mysql事务

jdbc 事务

一曲冷凌霜 提交于 2019-12-21 07:22:44
一、什么是事务   事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的存取。事务的正确执行使得数据库从一种状态转换成另一种状态。   事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、 一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写事务必须服从ISO/IEC所制定的ACID原 则。ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩 写。 原子性 。即不可分割性,事务要么全部被执行,要么就全部不被执行。如果事务的所有子事务全部提交成功,则所有的数据库操作被提交,数据库状态发生转换;如果有子事务失败,则其他子事务的数据库操作被回滚,即数据库回到事务执行前的状态,不会发生状态转换。 一致性或可串性 。事务的执行使得数据库从一种正确状态转换成另一种正确状态。 隔离性 。在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务,即在事务正确提交之前,它可能的结果不应显示给任何其他事务。 持久性 。事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存。      运行嵌入式SQL应用程序或脚本,在可执行SQL语句第一次执行时

客户端持久化解决方案:indexedDB

[亡魂溺海] 提交于 2019-12-21 05:05:01
客户端持久化解决方案:indexedDB indexedDB适合大量的结构化的数据存储;打开数据库和获取数据对象都是异步的; 需要开启事务,访问的objectStore都要是在开启的事务中。 数据库结构: db->transaction->objectStore->data Web SQL Database 实际上已经被废弃,而HTML5支持的本地存储实际上变成了 Web Storage ( Local Storage和Session Storage )与 IndexedDB 。 Web Storage 使用简单字符串键值对在本地存储数据,方便灵活,但是对于大量结构化数据存储力不从心, IndexedDB 是为了能够在客户端存储大量的结构化数据,并且使用索引高效检索的API。 indexedDB最显著的特点: 异步API 在IndexedDB大部分操作( 如:打开数据库和获取数据 )并不是同步的,如: var request=window.indexedDB.open('testDB'); 这条指令并不会返回一个DB对象的句柄,我们得到的是一个IDBOpenDBRequest对象,而我们希望得到的DB对象在 IDBOpenDBRequest.result 属性中. indexedDB的常用操作 创建/打开数据库 function openDB (name) { var

MySQL事务

余生长醉 提交于 2019-12-21 02:02:49
https://www.codercto.com/a/86576.html 默认情况,MySQL执行的SQL是autocommit的,SALAlchemy 查询语句也是 autocommit的,就是说如果没有明确声明事务的begin,每个单独的SQL都是一个独立的事务。但是在做交易系统时,比如银行给用户A转账给用户B时,有两个操作,从A里面减100,然后给B加100。这两个操作必须放在一个事务里面才行,否是就会出现钱扣了,对方又没到账的情况。 通过connection.begin 方法可以获取事务对象,执行完sql后,要把事务commit提交,如果出现异常,则把事务rollback,保证数据的最终一致性。 手动开始事务的几种方式: connection = engine.connect(close_with_result=True) trans = connection.begin() try: r1 = connection.execute("update account set blance-=100 where id=1") r1 = connection.execute("update account set blance+=100 where id=2") trans.commit() except: trans.rollback() raise 当然

mysql学习笔记之隔离级别

本秂侑毒 提交于 2019-12-20 17:02:40
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 隔离级别为四种分别解决脏读,不可重复度,幻读等问题 脏读:指一个线程中的事务读取到了另外一个线程中未提交的数据。 不可重复读:一个事务对同一行数据重复读取两次,但是却得到了不同的结果。例如,在两次读取的中途,有另外一个事务对该型数据进行了修改,并提交。 幻读:一个线程事务读取到相关数据就一条,第二次读出现两条,新增的一条为另外一个线程事务提交插入的数据。 上图为各个隔离级别对应的问题 show variables like '%iso%'; 查看目前数据库的隔离级别 set @@session.tx_isolation = 'READ-COMMITTED'; --设置局部 set @@session.tx_isolation = 'REPEATABLE-READ'; 局 @@session 全 @@global 级联回滚(5.7.22后不会发生) 事务是需要手动提交和回滚的 来源: oschina 链接: https://my.oschina.net/u/3914215/blog/3145394

mysql事务简单测试

三世轮回 提交于 2019-12-20 10:10:31
Auth: jin Date: 20140507 一、事务控制 默认情况下,MySQL是自动提交(autocommit)的,如果需要通过明确的commit和rollblack来提交和回滚事务,那么需要通过明确的事务控制命令来开始事务。 SET AUTOCOMMIT, START TRANSACTION,COMMIT和ROLLBACK等语句支持本地事务。 1、开始一个项新的事务 START TRANSACTION 或BEGIN语句可以开始一项新的事务。 2、提交回滚事务 COMMIT和ROLLBACK用来提交回滚事务 3、在事务提交或回滚之后的操作 CHAIN和RELEASE 字句分别用来定义在事务提交或回滚之后的操作。 CHAIN会立即开启一个新事务,并且和刚才的事务具有相同的隔离级别 RELEASE 会断开和客户端的链接。 4、修改当前的链接的提交方式 SET AUTOCOMMIT 可以修改当前的链接的提交方式,如果设置了SET AUTOCOMMIT=0, 则设置之后的所用事务都需要通过明确的命令提交或回滚。 实例 CREATE TABLE `t1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(25) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`)

Python面试刷题day01(DB面试题01-05)

余生长醉 提交于 2019-12-20 08:28:49
目录 MySQL基础 SQL语言处理代码的顺序 SQL查询处理步骤 事务 存储过程 索引 最左前缀规则 MySQL基础 1. from 子句组装来自不同数据源的数据; 2. join 子句将多张表连接起来 3. on 子句筛选连接表要显示的内容 4. where 子句基于指定的条件对记录进行筛选; 5. group by 子句将数据划分为多个分组; 6. 使用聚集函数进行计算; 7. 使用 having 子句筛选分组; 8. 计算所有的表达式 9. select 字段 10. distinct 去重 11. 使用 order by 子句对结果集进行排序 12. 使用 limit 子句限制结果集返回的记录数 SQL语言处理代码的顺序 SQL语言处理代码的顺序 在 SQL 语句中,第一个被处理的子句是 from ,而不是第一出现的 select 。 SQL查询处理步骤 SQL查询处理步骤 1. from 2. join 3. on 4. where 5. group by 6. having 7. select 8. distinct 9. order by 10. limit 以上每个步骤都会产生一个虚拟表,该虚拟表作为下一个步骤的输入, 只有最后一步生成的表才会返回给调用者。 事务 什么是事务,MySQL是如何支持事务的? 事务是一段 sql 的批处理,但这个批处理是原子性操作

mysql事务使用 超简单

做~自己de王妃 提交于 2019-12-20 08:25:33
MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关1.MyISAM:不支持事务,用于只读程序提高性能 2.InnoDB:支持ACID事务、行级锁、并发 3.Berkeley DB:支持事务 进去mysql数据库: 查询数据库: 进入库 查看表: 拿user 表来试验; 开启事务 START TRANSACTION 或 BEGIN 提交事务(关闭事务) COMMIT 放弃事务(关闭事务) ROLLBACK 查看user 表数据 mysql-> select * from user; 开启事物 mysql -> begin; 修改user 表的id=5的数据: mysql-> update user set photo=6000 where=5; 现在执行成功,但是还在事物中,事物没有结束查看表数据 还是一样,打开新窗口 在事物外查询 表数据没变; 回来原窗口 继续执行事务,吧id=4的数据修改成4000; mysql-> update user set photo=4000 where id=4; 现在这些都在事物中,想把zhangsan的5000给lisi1000,这时张三4000,李四6000,所有sql执行完比提交事物; mysql-> commit; mysql-> select * from user; 事物执行成功;一个事物到这就结束了;

【转帖】分布式事务之解决方案(XA和2PC)

China☆狼群 提交于 2019-12-20 07:30:51
分布式事务之解决方案(XA和2PC) https://zhuanlan.zhihu.com/p/93459200 ​ 博彦信息技术有限公司 java工程师 3. 分布式事务解决方案之2PC(两阶段提交) 针对不同的分布式场景业界常见的解决方案有2PC、TCC、可靠消息最终一致性、最大努力通知这几种。 3.1. 什么是2PC 2PC即两阶段提交协议,是将整个事务流程分为两个阶段,准备阶段(Prepare phase)、提交阶段(commit phase),2是指两阶段,P是指准备阶段,C是提交阶段。 举例 :张三和李四好久不见,老友约起聚餐,饭店老板要求先买单,才能出票。这时张三和李四分别抱怨近况不如意,囊肿羞涩,都不愿意请客,这时只能AA。只有张三和李四都付款,老板才能出票安排就餐。但由于张三和李四都是铁公鸡,形成两尴尬的一幕 : 准备阶段 :老板要求张三付款,张三付款。老板要求李四付款,李四付款。 提交阶段 :老板出票,两人拿票纷纷落座就餐。 例子中形成两一个事务,若张三或李四其中一个拒绝付款,或钱不够,店老板都不会给出票,并且会把已收款退回。 整个事务过程由事务管理器和参与者组成,店老板就是事务管理器,张三、李四就是事务参与者,事务管理器负责决策整个分布式事务的提交和回滚,事务参与者负责自己本地事务的提交和回滚。 在计算机中部分关系数据库如Oracle

脏读

a 夏天 提交于 2019-12-20 05:00:08
测试 READ UNCOMMITTED(读取未提交)的隔离性; insert into user values ( 3 , '小明' , 1000 ) ; insert into user values ( 4 , '淘宝店' , 1000 ) ; select * from user ; + ----+-----------+-------+ | id | name | money | + ----+-----------+-------+ | 1 | a | 900 | | 2 | b | 1100 | | 3 | 小明 | 1000 | | 4 | 淘宝店 | 1000 | + ----+-----------+-------+ 开启一个事务操作数据 小明在淘宝店买了一个 100 元的零食 star transaction ; update user set money = money - 100 where name = '小明' ; update user set money = money + 100 where name = '淘宝店' ; 淘宝店查询结果 select * from user ; SELECT * FROM user ; + ----+-----------+-------+ | id | name | money | + ----+--------

面试之数据库分表

♀尐吖头ヾ 提交于 2019-12-20 04:55:38
数据库分表) 数据切分 垂直(纵向)切分 水平(横向)切分 分库分表带来的问题 1. 事务一致性问题 2. 跨节点关联查询 join 问题 3. 跨节点分页、排序、函数问题 4. 全局主键避重问题 1. UUID 2. 结合数据库维护主键ID表 3. Snowflake分布式自增ID算法 5. 数据迁移、扩容问题 什么时候考虑切分 1. 能不切分尽量不要切分 2. 数据量过大,正常运维影响业务访问 3. 随着业务发展,需要对某些字段垂直拆分 4. 数据量快速增长 5. 安全性和可用性 案例分析 1. 用户中心业务场景 2. 水平切分方法 "根据数值范围":以主键uid为划分依据,按uid的范围将数据水平切分到多个数据库上。 "根据数值取模":也是以主键uid为划分依据,按uid取模的值将数据水平切分到多个数据库上。 3. 非uid的查询方法 1. 建立非uid属性到uid的映射关系 1. 映射关系 2. 基因法 2. 前台与后台分离 支持分库分表中间件 数据切分 关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库、优化索引,做很多操作时性能仍下降严重。此时就要考虑对其进行切分了,切分的目的就在于减少数据库的负担,缩短查询时间。 数据库分布式核心内容无非就是数据切分(Sharding)