事物的含义:
1、原子性(Atomicity)
事务的原子性是指事务中包含的所有操作要么都做,要么都不做,保证数据库是一致的。
例如:A帐户向B帐户划账1000,则先将A减少1000,再将B增加1000,
这两个动作要么都提交,要么都回退,不可能发生一个有效、一个无效的情况。
2、一致性(Consistency)
一致性是指数据库在事务操作前和事务处理后,其中的数据必须都满足业务规则约束。
例如:A、B帐户的总金额在转账前和转帐后必须一致,其中的不一致必须是短暂的,在事务提交前才会出现的。
再如:约定B帐户不能多于1000元,则A转出1000成功,B转入1000失败,最终由原子性得到-整个事务回滚
3、隔离性(Isolation)
隔离性是数据库允许多个并发事务同时对数据进行读写和修改的能力,
隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。
例如:在A、B之间转帐时,C同时向A转帐,若同时进行则A、B之间的一致性不能得到满足。
所以在A、B事务执行过程中,其他事务不能访问(修改)当前相关的数值。
4、持久性(Durability)
持久性表示为:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
在提交之前如果系统故障,则所有信息全部丢失。提交之后数据存放在磁盘中,是永久性的。
事务隔离级别
事务隔离级别:一个事务对数据库的修改与并行的另一个事务的隔离程度。
我们讨论隔离级别的场景,主要是在多个事务并发的情况下
不同隔离级别对应不同的干扰程度, 隔离级别越高, 数据一致性就越好, 但并发性越弱
标准组织ANSI的ANSI/ISO SQL标准(SQL92)定义了四种事务隔离级别(transaction isolation level)
SQL92标准的隔离级别由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable 。
但各个数据库厂商实现的方式不尽相同
这些事务隔离级别是针对三种现象定义的
三种需要阻止的现象(preventable phenomena)是:
1、脏读取(dirty read):
一个事务读取了被其他事务写入但还未提交的数据。
2、不可重复读取(nonrepeatable read):
一个事务再次读取其之前曾经读取过的数据时,发现数据已被其他已提交的事务修改或删除。
一般由其它事务的update语句引起
3、不存在读取(phantom read):
事务按照之前的条件重新查询时,返回的结果集中包含其它已提交事务插入的满足条件的新数据。
一般由其它事务的insert语句引起
隔离级别 \ 现象 | 脏读取 | 不可重复读取 | 不存在读取 |
---|---|---|---|
未提交读取(read uncommitted) | 允许 | 允许 | 允许 |
已提交读取(read committed) | 不允许 | 允许 | 允许 |
可重复读取(repeatable read) | 不允许 | 不允许 | 允许 |
串行化(rerializable) | 不允许 | 不允许 | 不允许 |
来源:https://www.cnblogs.com/cj953865288/p/8588887.html