第3.17课 上课 MySQL数据库进阶, 数据库事务

3_17

MySQL数据库进阶

 数据库事务

  什么是事务

事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。

也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。

 

事务的结束有两种情况:

1 当事务中的所有步骤全部成功执行时,事务提交成功。

2 如果其中任何一步骤失败,将发生回滚操作,撤消之前到事务开始时的所有操作。

  事务的ACID特性

事务是一组读写操作,并且只有所有操作都成功才算成功的特性。

 

1、原子性(Atomicity)

事务的原子性是指事务中包含的所有操作要么都做,要么都不做,保证数据库是一致的。

 

2、一致性(Consistency)

一致性是指数据库在事务操作前和事务处理后,其中的数据必须都满足业务规则约束。

例如:对银行转帐事务,不管事务成功还是失败,应该保证事务结束后帐户表中张三和李四的转账总额为2000元。

 

3、隔离性(Isolation)

隔离性是数据库允许多个并发事务同时对齐数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。

 

4、持久性(Durability)

事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

  事务隔离级别

SQL事务隔离级别由弱到强分别是:

 

脏读:

 

脏读指的是一个事务允许读取其他正在运行的事务还没有提交的改变。这种情况的发生主要因为没有加锁。

 

不可重复读:

 

不可重复读是指事务A读取了事务B已经提交的更改数据。

不可重复读指的是一个事务内连续读却得到不同的结果,主要因为同时有其他事务更新了我们正在读取的数据。

要达到允许可重复读的目的,我们必须让当前事务保持一个读共享锁。

 

幻读:

 

幻读指的是事务不是串行发生时发生的一种现象,是事务A读取了事务B已提交的新增数据。

例如事务A对一个表的所有数据进行修改,同时事务B向表中插入一条新数据。

那么操作事务A的用户就发现表中还有没有修改的数据行,就像发生了幻觉一样。

解决幻读的方法是增加范围锁(range lock)或者表锁。

四种事务隔离级别中只有SERIALIZABLE能够解决幻读。

  MySQL中的事务控制

 

 

 

步骤1:

步骤2:

 

 

步骤3:

 

posted on 2018-01-31 22:52  東風★破  阅读(146)  评论(0)    收藏  举报

导航