事务:一组操作逻辑,使数据从一个状态转变到另一个状态。
事务特性:
原子性(atomicity):
一个不可分割的工作单元,要么全部提交,要么全部回滚。一致性(consistency):
事务执行前后,数据从一个合法状态转变到另一个合法状态隔离性(isolation):
事务之间相互不干扰。持久性(durablility)
事务被提交,则对数据修改时永久性的。
事务状态:
活动(active):事务正在执行中部分提交(partially committed):数据已提交到内存,未修改到磁盘失败(failed):活动和部分提交的中的事务,出现异常,导致无法继续执行。中止(aborted):失败的事务回滚执行完成后。提交(committed) 二、基本操作 1、显示事务
开启事务:start transaction或者begin
保存点:savepoint [name];
回滚:rollback
提交:commit
MySQL变量autocommit默认设置为ON,设置为false即可关闭自动DML事务提交。
##查询变量 show variables like "autocommit"; ## 关闭自动提交 set autocommit=false; ## 开启自动提交 set autocommit=ture;
DDL自动提交。针对用户的操作会自动提交。两个事务间无commit或rollback则前一个事务会自动提交。start slave、stop slave、reset slave、change master to这些关于MySQL主从复制的语句会隐式提交。analiyze table、cache index、check table、flush、load index into cache、optimize table、repair table、reset等也会隐式提交。 三、事务隔离级别 1、问题背景
在事务并发时,常出现一些问题:
**脏写:**事务A、B同时开启,在未终止或未提交前,事务A修改了事务B中修改的数据。**脏读:**事务A、B同时开启,事务A读取了事务B更新而未提交的数据,事务B最终回滚了数据,则A读取的数据是脏数据。**不可重复读:**事务A、B同时开启,在事务A两次读取同一字段之间,事务B修改了该字段,导致事务A两次读取字段结果不同。**幻读:**事务A、B同时开启,在事务A两次读取同一字段之间,事务B插入一些行,导致事务A两次读取字段结果增加。
一般认为问题严重程度排序如下:
脏写 > 脏读 > 不可重复读 > 幻读
READ UNCOMMITTED: 读未提交。READ COMMITTED: 读已提交。REPEATABLE READ: 可重复读。SERIALIZABLE: 可串行。
| 隔离级别 | 脏读 | 不可重复读 | 幻读 | 加锁读 |
|---|---|---|---|---|
| READ UNCOMMITTED | Yes | Yes | Yes | No |
| READ COMMIITTED | No | Yes | Yes | No |
| REPEATABLE READ | No | No | Yes | No |
| SERIALIZABLE | No | No | No | Yes |
MySQL默认事务隔离为REPEATABLE-READ.
## 查看事务隔离级别 show @@transection; ## 设置事务隔离级别 set [global|session] transection_istoloation='READ-UNCOMMITTED | READ-COMMIITTED | REPEATABLE-READ | SERIALIZABLE'; ## 在my.cnf写入,写在[mysqld]下 transaction-isolation = READ-COMMITTED



