定义
例如:王五向赵六的账户上转2000块钱,王五的账户上少2000块钱,赵六的账户上多2000块钱,这个操作是一个最小的工作单元,要么同时成功,要么同时失败。
做某件事的时候,需要多条增删改语句共同联合起来才能完成,所以需要事务的存在。一个事务其实就是多条增删改语句同时成功,或者同时失败!
提交事务、回滚事务
定义
提交事务:清空事务性活动的日志文件,将数据全部彻底持久化到数据库表中。提交事务标志着事务的结束,并且是一种全部成功的结束。
演示事务:
事务的ACID 特性
原⼦性(Atomicity)
⼀致性(Consistency)
事务执⾏结束后,数据必须保持⼀致性状态。在事务执⾏期间,数据库中的数据可以处于中间状态,但在事务完成时必须保证数据的⼀致性。
隔离性(Isolation)
持久性(Durability)
⼀旦事务提交,其所做的修改必须永久保存到数据库中。即使系统发⽣故障或宕机,数据也能够保持不变。
事务的隔离级别
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
Read uncommitted(读未提交) | √ | √ | √ |
Read committed (读提交) | × | √ | √ |
Repeatable Read(可重复读取,默认 | × | × | √ |
Serializable(可序化) | × | × | × |
读未提交(READ UNCOMMITTED)
读已提交(READ COMMITTED)
在读已提交隔离级别下,事务 B 只能在事务 A 修改过并且已提交后才能读取到事务 B 修改的数据。读已提交隔离级别解决了脏读的问题,但可能发生不可重复读和幻读问题
可重复读(REPEATABLE READ)
可串行化(SERIALIZABLE)
这是最高隔离级别,效率最低。解决了所有的问题。每一次读取到的数据都是最真实的。
脏读
不可重复读
一个事务先后读取同一条记录,但两次读取的数据不同,称为不可重复读
幻读
查看当前会话隔离级别
SELECT @@transaction_isolation;
设置事务隔离级别
SET [GLOBAL|SESSION] TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ |SERIALIZABLE };
事务隔离级别越高,数据越安全,但是性能越低。