您的位置:首页 > 其它

事务的一些基本概念

2016-04-11 22:37 281 查看
最近想复习一下事务的概念,写下笔记,方便以后自己复习

事务的四大特性以及隔离级别

一.事务的概念

说简单点,对数据库进行一系列操作的时候,要么同时成功,提交到数据库执行,要么同时失败,回滚到刚开始操作的状态

二.事务的四大特性ACID

1.A-原子性:处于事务状态下的操作都是原子性的,不可再分的,也就是说要么都成功,要么都失败.

2.C-一致性:数据库的数据在事务操作的前后都保持数据的一致性

3.I-隔离性:一次事务的操作对其他事务来说是不可干扰的,透明的

4.D-持久性:一次事务的操作对数据库的数据的改变是永久性的

三.并发出现的问题

1.丢失更新:撤销一个事务时,把其他事务已提交的更新数据覆盖(A和B事务并发执行,A事务执行更新后,提交;B事务在A事务更新后,B事务结束前也做了对该行数据的更新操作,然后回滚,则两次更新操作都丢失了)。

2.脏读:一个事务读到另一个事务未提交的更新数据(A和B事务并发执行,B事务执行更新后,A事务查询B事务没有提交的数据,B事务回滚,则A事务得到的数据不是数据库中的真实数据。也就是脏数据,即和数据库中不一致的数据)。

3.不可重复读:一个事务读到另一个事务已提交的更新数据(A和B事务并发执行,A事务查询数据,然后B事务更新该数据,A再次查询该数据时,发现该数据变化了)。

4.覆盖更新:这是不可重复读中的特例,一个事务覆盖另一个事务已提交的更新数据(即A事务更新数据,然后B事务更新该数据,A事务查询发现自己更新的数据变了)。

5.虚读(幻读):一个事务读到另一个事务已提交的新插入的数据(A和B事务并发执行,A事务查询数据,B事务插入或者删除数据,A事务再次查询发现结果集中有以前没有的数据或者以前有的数据消失了)。

四.事务的隔离级别

1.Serializable(可串行化): 这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。幻读,脏读,不可重复读等问题都不会发生。

2.Repeatable Read(可重读):对于读出的记录,添加共享锁直到事务A结束。其它事务B对这个记录的试图修改会一直等待直到transaction A结束。可能发生的问题:当执行一个范围查询时,可能会发生幻读。这是MySQL的默认事务隔离级别

3.Read Committed(读取提交内容):在事务A中读取数据时对记录添加共享锁,但读取结束立即释放。其它事务B对这个记录的试图修改会一直等待直到A中的读取过程结束,而不需要整个事务A的结束。所以,在事务A的不同阶段对同一记录的读取结果可能是不同的。可能发生的问题:不可重复读。大多数数据库默认的隔离级别,mysql除外

4.Read Uncommitted(读取未提交内容):不添加共享锁。所以其它事务B可以在事务A对记录的读取过程中修改同一记录,可能会导致A读取的数据是一个被破坏的或者说不完整不正确的数据。另外,在事务A中可以读取到事务B(未提交)中修改的数据。比如事务B对R记录修改了,但未提交。此时,在事务A中读取R记录,读出的是被B修改过的数据。可能发生的问题:脏读。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  事务