MySql事务详解-面试必考
一.事务的语法
- start transaction;/begin;(开始事务)
- commit;使得当前的修改确认
- rollback;使得当前的修改被放弃
二.事务的ACID特性
1.原子性(Atomicity)
事务的原子性是指事务必须是一个原子的操作序列单元。事务中包含的各项操作在一次执行过程中,值允许出现一下两种状态之一:
- 全部执行成功
- 全部执行失败
事务开始后的所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错会回滚到事务开始前的状态,所有操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中的原子,是物质的基本构成单位。
2.一致性(Consistency)
事务的一致性是指事务的执行不能破幻数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处于一致性状态。
例如:如果从A账户转账到B账户,不可能因为A账户扣了钱,二B账户没有加钱。
3.隔离性(Isolation)
事务的隔离性是指在并发环境中,并发的事务是互相隔离的。也就是说,不同的事务并发操作相同的数据时,每个事务都有各自完整的数据空间。
一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务是不能互相干扰的。
隔离性分4个级别:读未提交,读已提交,可重复读,顺序读
4.持久性(Duration)
事务的持久性是指事务一旦提交后,数据库中的数据必须被永久的保存下来。即使服务器系统崩溃或服务器宕机等故障。只要数据库重新启动,name一定能够将其恢复到事务成功接收后的状态。
三.事务的并发问题
- 脏读:读取到了没有提交的数据,事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据。
- 不可重复读:同一条命令返回不同的结果集(update更新)。事务A多次读取同一数据,事务B在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致。
- 幻读:重复查询的过程中,数据发生了量的变换。