目录
一、事务控制概念
二、事务控制特性
三、事务控制相关命令
1、测试begin和commit(开始事务和提交事务)
2、测试事务回滚rollback
四、总结
1、事务的ACID特性
2、事务之间的相互影响
3、事务的隔离级别
一、事务控制概念
在MySQL中用于处理操作量大、复杂度高的数据。比如在人员管理系统中,删除一个人员,既需要删除人员的基本信息,也需要删除和该人员相关的信息,如信箱、文章、发起的事务等等,这些数据的操作语句就构成了一个事务。
当然只有使用了Innodb数据引擎的数据库或表才支持事务,在使用过程中药保证成批的SQL语句要么全部执行,要么全部执行,这样的事务处理可以维护数据库数据的完整性。一般在事务中会出现insert、update、delete、select语句。
二、事务控制特性
原子性:一个事务中的所有操作要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性:在事务开始之前和事务结束之后,数据库的完整性没有被破坏。这表示写入额资料必须完全符合所有的预设规则,包含资料的精确度、串联性以及后续数据库可以自发性地完成预定工作。
隔离性:数据库允许多个并发事务同时对其数据进行读写和修改能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务的隔离又分为不同级别,包括读未提交、读提交、可重复读和串行化。
持久性:事务处理结束后,对数据的修改应该是永久的即便系统故障也不会丢失。
三、事务控制相关命令
- Begin开始事务
- Rollback回滚事务
- Commit提交事务
- Set autocommit=0 禁止自动提交模式
- Set autocommit=1开启自动提交模式
1、测试begin和commit(开始事务和提交事务)
准备个数据表:
示例1:
begin开启事务,修改数据未提交,退出后重新连接查看,数据未改变。
示例2:
begin开启事务,修改数据后commit提交,退出后重新连接查看,数据改变。
示例3:
当前全局事务隔离级别和会话事务隔离级别都为RU(未提交读) ,允许脏读。
则事务A在提交前,事务B可以看到A未提交的修改。
示例4:
全局事务隔离级别和会话事务隔离级别都为RC(提交读)。 防止脏读,但不可重复读。
事务A在提交前的修改,事务B看不到。
事务A提交后,事务B可以看到修改的数据。
示例5:
全局事务隔离级别和会话事务隔离级别都为RR(可重复读)。 可以防止脏读和不可重复读。
事务A修改数据未提交,开启事务B进行查看,看到的是修改前的数据。
事务A提交后,事务B查看到的仍然是修改前的数据。
事务B在结束前,查询到的结果是一致的。事务A做的修改不影响事务B的查询结果。
2、测试事务回滚rollback
rollback:回滚会结束用户的事务,并撤销正在进行的所有未提交的修改。
四、总结
1、事务的ACID特性
- 原子性(Atomicity)
- 一致性(Consistency )
- 隔离性(Isolation)
- 持久性(Durability)
2、事务之间的相互影响
当多个客户端并发地访问同一个表时,可能出现下面的一致性问题:
- 脏读
- 不可重复读
- 幻读
- 丢失更新
3、事务的隔离级别
- 未提交读(Read Uncommitted(RU)) :允许脏读。
- 提交读(Read Committed (RC)) :防止脏读。
- 可重复读(Repeatable Read(RR)):—mysql默认的隔离级别,防止脏读和不可重复读。
- 串行读(serializable):—相当于锁表,可以防止脏读、不可重复读和幻读,(事务串行化)会降低数据库的执行效率。