A(Atomicity)-原子性 | C(Consistent)-一致性 | I(Isolation)-隔离性 | D(Durable)-持久性 |
---|---|---|---|
原子性指的是数据库事务是不可分割的一部分,只有一个事务中的所有操作都成功,这个事务才算执行成功,一旦有一个操作失败,那么其他成功的操作也必须回滚。 例如:A --> B转账 |
指的是在事务开始之前和事务结束之后,数据库的完整性约束都没有被破坏,事务执行的前后都是合法的(一致的)数据状态。 | 隔离性就是说每个事务之间的操作应该相互隔离,互不干扰。即并发环境下, 当前请求完成之前对另一个并发请求不可见。 针对隔离,SQL92标准定义了4种隔离级别 |
事务一旦提交成功了,那么就应该是持久的,即使是数据库重启,服务器宕机等情况发生,数据都不会丢失 |
这里区别于分布式CAP中的一致性
分布式CAP(一致性、可用性、分区容错性), 它的一致性, 指的是“所有节点同时看到相同的数据”;
而数据库ACID的一致性, 指数据库执行的任何事务都会将其从一个一致的状态变为另一个一致的状态;
把分布式事务的一个节点视为事务的一个session,一致性的定义就比较恰当了
隔离级别 | 含义 | 可能存在问题 |
---|---|---|
读取未提交 READ-UNCOMMITTED | 一个事务可以读到其他事务还没有提交的数据 | 脏读、不可重复读、幻读 |
读已提交 READ-COMMITTED (常用) | 一个事务只能读到另一个已经提交的事务修改过的数据,并且其他事务每对该数据进行一次修改并提交后,该事务都能查询得到最新值。 | 不可重复读、幻读 |
可重复读 REPEATABLE-READ | 一个事务第一次读过某条记录后,即使其他事务修改了该记录的值并且提交,该事务之后再读该条记录时,读到的仍是第一次读到的值 | 幻读 |
串行化 SERIALIZABLE | 对同一条记录的操作都是串行的 | 慢 |
隔离级别配置参数:transaction-isolation
幻读:⾏锁只能锁住⾏,即使把所有的⾏记录都上锁,也阻⽌不了新插⼊的记录
网友评论