标签:rac 脏读 机制 情况 用户 一致性 读取 自动 持久化
Oracle
SQL事务
事务:表示操作集合,不可分割,要么全部成功,要么全部失败
事务的开始取决于一个DML语句 增删改查;
事务的结束
1.正常的commit(使数据修改生效) 或 rollback 数据恢复到原有的状态
2.自动提交,一般要将自动提交关闭:因为效率太低
3.用户关闭会话,会自动提交
4.系统崩溃或者断电的时候 会回滚到上一个状态
事务的四个特性
ACID
A:原子性:表示不可分割,一个操作要么全部执行,要么全部失败
C:一致性:保证数据的一致性,经过多个操作,数据的状态不会改变,从一个一致性状态到另一个一致性状态
I: 隔离性:各个事务之间相互之间不会产生影响(重点:隔离级别)严格的隔离性会导致效率降低,在某些情况下
隔离级别:
读未提交 (会产生 脏读,不可重复度,幻读)
读已提交 (会产生 不可重复度,幻读)
可重复度 (会产生 幻读)
序列化
数据不一致的问题::假定有两个事务去操作数据库 事务A 事务B,先要将两个事务都处于开启的状况
脏读 事务A修改了数据库信息,但是未提交,事务B去执行查询,缺查询到了修改的数据库信息,读取到了不存在的数据
不可重复读 : 事务A修改数据库信息之后,并提交了事务,事务B查到了修改之后的数据, 数据相较于事务B开启之后发生了改变, 即事务b开始查询到 不等于事务A提交之后 事务b查询到内容
幻读:事务a增加或删除之后,事务b查询该表,该表还是事务a未增加删除之前的状况,但是当你增加或删除 和事务a增加删除一样的数据的数据,会报错,明明没有却读取到了,就是幻读
D:持久性:所有数据的修改必须要持久化存储到硬盘中,不会因为应用程序关闭而变化
最重要的是一致性:
因为:所有的特性都是为了保证数据的一致性,所以一致性是最终追求,通过其他三个特性来保证一致性、
锁机制:
解决并发访问的时候,数据不一致的问题,需要给数据加锁,加锁的同时需要考虑 粒度 的问题
操作对象:数据库 表 行
以行为主
SQL事务
标签:rac 脏读 机制 情况 用户 一致性 读取 自动 持久化
原文地址:https://www.cnblogs.com/wxgShareBlog/p/14847736.html