MySql的事务控制(TCL语言)
⒈事务
一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行。
⒉事务的特性(ACID)
1.原子性(Atomicity):一个事务不可再分割,要么都执行要么都不执行。
2.一致性(Consistency):一个事务执行会使数据从一个一致状态切换到另外一个一致状态。
3.隔离性(Isolation):一个事务的执行不受其它事务的干扰。
4.持久性(Durability):一个事务一旦提交,则会永久的改变数据库的数据。
⒊事务的创建
1.隐式事务:事务没有明显的开启和结束的标记,例如insert、update和delete语句
2.显式事务:事务具有明显的开启和结束的标记。前提,必须先设置自动提交功能为禁用。set autocommit = 0;
显示当前事务状态 show variables like 'autocommit';
⒋事务过程
①开启事务
1 set autocommit = 0; 2 start transaction; #可选
②编写事务中的sql语句(select、insert、update、delete)
1 语句1; 2 语句2; 3 ....
③结束事务
1 commit; #提交事务 2 rollback; #回滚事务
⒌事务的隔离级别
级别 | 脏读 | 不可重复读 | 幻读 |
read uncommitted 读未提交(数据) |
✓ | ✓ | ✓ |
read committed 读已提交(数据) |
✗ | ✓ | ✓ |
repeatable read 可重复读 |
✗ | ✗ | ✓ |
serializable 串行化 |
✗ | ✗ | ✗ |
MySql中默认第三个隔离级别:repeatable read(可重复读)
Oracle中默认第二个隔离级别:read committed(读已提交)
查看隔离级别:select @@tx_isolation
设置隔离级别:set session|global transaction isolation level
⒍SAVEPOINT回滚点
在sql中设置
1 语句1; 2 savepoint a; #设置回滚点 3 语句2; 4 rollback to a; #回滚到指定的回滚点