含义
事务:一条或多条sql语句组成一个执行单位,一组sql语句要么都执行要么都不执行
特点( ACID)
- A 原子性:一个事务是不可再分割的整体,要么都执行要么都不执行
- C 一致性:一个事务可以使数据从一个一致状态切换到另一个一致状态
- I 隔离性:一个事务的执行不受其他事务的干扰,多个事务相互隔离
- D 持久性:一个事务一旦提交,则永久的持久化到本地
事务的使用步骤
隐式(自动)事务:没有明显的开启和结束,本身就是一条事务可以自动提交,比如 insert、update、delete
显式事务:具有明显的开启和结束
使用显式事务:
#1.开启事务
SET autocommit=0;
START TRANSACTION;#可以忽略
#2.编写一组逻辑sql语句
#注:sql语句支持的是 insert、update、delete
#设置回滚点:
SAVEPOINT 回滚点名;
#3.结束事务
#COMMIT;提交
#ROLLBACK;回滚
#ROLLBACK TO 回滚点名;回滚到指定的地方
savepoint 和 rollback 一起使用
并发事务
- 多个事务同时操作同一个数据库的相同数据时会发生事务的并发问题
- 并发问题:
①脏读:一个事务读取了其他事务还没有提交的数据,读到的是其他事务“更新”的数据
②不可重复读:一个事务多次读取,结果不一样
③幻读:一个事务读取了其他事务还没有提交的数据,读到的知识其他事务“插入”的数据 - 可以通过设置隔离级别来解决并发问题
- 隔离级别
①read uncommitted:出现脏读、幻读、不可重复读
②read committed:避免脏读,出现幻读、不可重复读
③repeatable read:避免脏读、不可重复读,出现幻读
④serializable:避免脏读、不可重复读、幻读
MySQL中默认第三个隔离级别
Oracle中默认第二个隔离级别
#查看隔离级别
SELECT @@tx_isolation;
#设置隔离级别
SET SESSION|GLOBAL TRANSACTION ISOLATION LEVEL 隔离级别;