文章目录
十一.事务:一组操作的集合
①事务简介
事务 是一组操作的集合,它是一个不可分割的工作单位,事务会把所有操作作为一个整体一起向系统提交或撤销操作请求,既这些操作要么同时成功,要么同时失败。
②事务操作
1)查看/设置事务提交方式
# 查看事务提交方式:SELECT @@AUTOCOMMIT;
# 设置事务提交方式:SET @@AUTOCOMMIT = 0 或 1;
注意:
· MySQL的事务是默认自动提交的。
· AUTOCOMMIT = 1 是自动提交,AUTOCOMMIT = 0 是手动提交。
· @@表示查看当前系统的变量信息。
2)提交事务
# COMMIT;
3)回滚事务
# 执行过程中出现异常:ROLLBACK;
③事务四大特性(ACID)
· 原子性(ATOMICITY):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
· 一致性(CONSISTENCY):事务成功时,必须使所有数据都保持一致状态。
· 隔离性(ISOLATION):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
· 持久性(DURABILITY):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。
④并发事务问题
问题 | 描述 |
---|---|
脏读 | 一个事务读到另外一个事务还没有提交的数据。 |
不可重复读 | 一个事务先后读取同一条记录,但两次读取的数据不同。 |
幻读 | 一个事务按照条件查询数据时,没有对应的数据行,但在插入数据时,又发现这行数据已经存在,好像出现了“幻影”。 |
⑤事务隔离级别
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
Read uncommited | √ | √ | √ |
Read commited | × | √ | √ |
Repeatable Read | × | × | √ |
Serializable | × | × | × |
# 查询事务隔离级别:SELECT @@TRANSACTION_ISOLATION;
# 设置事务隔离级别:SET [SESSION / GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITED / Read COMMITED / REPEATABLE READ / SERIALIZABLE};
注意:
· SESSION代表当前客户端会话窗口有效。
· GLOBAL代表所有客户端会话窗口有效。