当前位置:Gxlcms > 数据库问题 > 数据库事务

数据库事务

时间:2021-07-01 10:21:17 帮助过:3人阅读

参考 https://www.cnblogs.com/takumicx/p/9998844.html 一、定义 事务是一个抽象的概念;是数据库运行中的逻辑工作单元,单个逻辑工作单元所执行的一系列操作,要么都执行,要么都不执行。数据库事务是构成单一逻辑工作单元的操作集合。 定义解释备注: 1.数据库事务可以包含一个或多个数据库操作,但是这些操作构成一个逻辑上的整体。 2.构成逻辑整体的这些数据库操作,要么全部执行成功,要么全部不执行。 3.构成事务的所有操作,要么全都对数据库产生影响,要么全部不产生影响,即不管事务是否执行成功,数据库总能保持一致性状态。 4.已上即使在数据库出现故障以及并发事务存在的情况下仍然成立。 二、事务的特性(ACID) 1.原子性(Atomicity) 事务中的所有操作作为一个整体,像原子一样不可分割,要么全部成功,要么全部失败,不存在中间状态。 2.一致性(Consistency) 事务的一致性指的是在一个事务执行之前和执行之后,数据库都必须处于一致性状态。事务执行结果,必须使数据库从一个一致性状态到另外一个一致性状态。一致状态的含义是数据库中的数据应该满足完整性约束。 3.隔离性(Isolation) 并发执行的事务之间不会相互影响。 4.持久性(Durability) 已被提交的事务对数据库的修改应该永久保存在数据库中, 三、数据库常见的并发异常 1.脏写 脏写是指事务回滚了其他事务对数据项的已提交修改 2.脏读 脏读是指一个事务读取了另一个事务未提交的数据 3.丢失更新 丢失更新是指事务覆盖了其他事务对数据的已提交修改,导致这些修改好像丢失了一样 4.不可重复读 不可重复读是指一个事务对同一数据的读取结果前后不一致。脏读和不可重复读的区别在于:前者读取的是事务未提交的脏数据,后者读取的是事务已经提交的数据,只不过因为数据被其他事务修改过导致前后两次读取的结果不一样。 5.幻读 幻读是指事务读取某个范围的数据时,因为其他事务的操作导致前后两次读取的结果不一致。幻读和不可重复读的区别在于,不可重复读是针对确定的某一行数据而言,而幻读是针对不确定的多行数据。因此幻读通常出现在带有查询条件的范围查询中。 四、事务的隔离级别 事务具有隔离性,理论上来说事务之间的执行不应该相互产生影响,其对数据库的影响应该和它们串行执行时一样。然而完全的隔离性会导致系统并发性能很低,降低对资源的利用率,因而实际上对隔离性的要求会有所放宽,这也会一定程度上造成对数据库一致性要求的降低。 事务的隔离级别,从低到高依次为: 1.读未提交(Read uncommitted) 读未提交,就是一个事务可以读取另一个未提交事务的数据 2.读已提交(Read committed) 读提交,就是一个事务要等另一个事务提交后才能读取数据 3.可重复读(Repeatable read) 重复读,就是在开始读取数据(事务开启)时,不再允许修改操作。 4.串行化(Serializable) 序列化是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读和幻读。但是这种事务隔离级别效率低下,比较消耗数据库性能,一般不使用。 Mysql的默认隔离级别是可重复读,Oracle的默认隔离级别为读提交。
事务隔离级别 脏写 脏读 不可重复读 幻读 丢失更新
读未提交   可能 可能 可能 可能
读已提交     可能 可能 可能
可重复读       可能  
串行化          
所有事务隔离级别都不允许出现脏写,而串行化可以避免所有可能出现的并发异常,但是会极大的降低系统的并发处理能力。

数据库事务

标签:ioi   mtu   完整   win   href   tail   jaf   mil   rac   

人气教程排行