一、含义
事务:一条或多条sql语句组成一个执行单位,一组sql语句要么都执行要么都不执行
二、特点(ACID)
原子性(Atomicity):一个事务是不可再分割的整体,要么都执行要么都不执行
一致性(Consistency):一个事务可以使数据从一个一致状态切换到另外一个一致的状态
隔离性(Isolation):一个事务不受其他事务的干扰,多个事务互相隔离的
持久性(Durability):一个事务一旦提交了,则永久的持久化到本地
三、事务的使用步骤 ★
隐式(自动)事务:没有明显的开启和结束,本身就是一条事务可以自动提交,比如insert、update、delete
显式事务:具有明显的开启和结束
①开启事务
set autocommit=0;
start transaction;#可以省略
②编写一组逻辑sql语句
注意:sql语句支持的是insert、update、delete
设置回滚点:
savepoint 回滚点名;
③结束事务
提交:commit;
回滚:rollback;
回滚到指定的地方:rollback to 回滚点名;
四、并发事务
1、事务的并发问题
脏读:事务A读取了事务B更新的数据,然后B回滚,那么A读取的数据就是脏数据
不可重复读:事务A多次读取同一数据,事务B在事务A多次读取的过程中,对数据进行了更新并提交,导致事务A多次读取同一数据结果不一致。(注重更新)
幻读:A将数据库所有学生成绩从分数改成了等级,但是B在这个时候插入了一条带有分数的记录,当A改完之后发现还有一条记录没有改过来。(注重增删)
2、隔离级别
脏读 | 不可重复读 | 幻读 | |
---|---|---|---|
读未提交 | x | x | x |
不可重复读 | √ | x | x |
可重复读(MySQL默认) | √ | √ | x |
串行化 | √ | √ | √ |