事务是一组原子性的SQL查询,如果数据库引擎能够成功的执行该组查询,则执行该组查询,如果其中任何一条语句因为崩溃或其它原因无法执行,那么所有的语句都不会执行。
相关SQL命令
- 开始事务
START TRANSACTION; - 提交事务
COMMIT; - 回滚事务
ROLLBACK; - 查看当前事务隔离级别
select @@tx_isolation; - 修改当前隔离级别
SET session TRANSACTION ISOLATION LEVEL (隔离级别);
ACID
原子性(atomicity),一致性(consistency),隔离性(isolation)和持久性(durability)。
ACID是一个良好的事务需要具备的标准。
原子性:一个事务被看做不可分割的工作单元,要么全部提交,要么失败回滚。
一致性:
隔离性:一个事务的修改在未提交前对其它事务不可见。
持久性:事务所做的修改一旦提交就会保存到数据库中。
隔离级别
由ACID原则我们知道,一个事务的修改在未提交前对其它事务不可见。
- 其它事务无法“看见”自己对数据的修改。
- 自己只能“看见”事务开始时已经提交的事务所做的修改,执行事务中其它事务提交的修改看不见。
如图,
tjc的值(num)为500
事务A(左)首先将tjc的值-50(步骤1)
事务B(右)查看tjc,值为450(此为脏读)
事务A回滚
事务B查看tjc,值为500(此为不可重复读)
脏读为在事务B中读取了事务A未提交的修改,如果事务A回滚,则B有可能执行得到错误的结果。
不可重复读是在同一事务中,两次执行同样的查询得到的结果不一样,如步骤2,4。
网友评论