什么是事务
数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作(对数据库的相关增删改查的操作),要么完全地执行,要么完全地不执行。
事务的四大特性
事务特性 | 含义 |
---|---|
原子性(Atomicity) | 每个事务都不能再拆分,如果事务中有多条语句,它们应该是一个整体。要么全部成功,要么全部失败。 |
一致性(Consistency) | 事务执行前与事务执行后,数据库的状态应该是一致的。如:转账操作,转账前前与转账后两个人的总金额应该是一样的。 |
隔离性(Isolation) | 如果同时有多个事务在数据库中执行,事务与事务之间应该互不影响。 |
持久性(Durability) | 事务一旦提交,对数据库的影响是持久的,就算关闭服务器,数据也是持久存在。 |
事务的隔离级别
事务在操作时的理想状态:事务与事务之间不会有任何影响
并发访问的问题 | 含义 |
---|---|
脏读 | 一个事务读取到了另一个事务中尚未提交的数据 |
不可重复读 | 一个事务中两次读取的数据内容不一致,要求的是一个事务中多次读取时数据是一致的,这是事务update时引发的问题 |
幻读 | 一个事务中两次读取的数据的数量不一致,要求在一个事务多次读取的数据的数量是一致的,这是insert或delete时引发的问题 |
MySQL数据库有四种隔离级别
上面的级别最低,下面的级别最高。“是”表示会出现这种问题,“否”表示不会出现这种问题。
级别 | 名字 | 隔离级别 | 脏读 | 不可重复读 | 幻读 | 数据库默认隔离级别 |
---|---|---|---|---|---|---|
1 | 读未提交 | read uncommitted | 是 | 是 | 是 | |
2 | 读已提交 | read committed | 否 | 是 | 是 | Oracle和SQL Server |
3 | 可重复读 | repeatable read | 否 | 否 | 是 | MySQL |
4 | 串行化 | serializable | 否 | 否 | 否 |