事务属性-ACID
原子性 Atomicity 事务原子性强调了一个事务是一个逻辑工作单元,是一个整体,是不可分割的。
一致性 Consistency 一个事务执行一项数据库操作,事务将使数据库库从一种一致性状态变换成另一种一致性状态
隔离性 Isolation 在事务未提交前,它操作的数据,对其他用户不可见。
持久性 Durability 事务的持久性是指一旦事务成功完成,该事务对数据库所事假的所有更新都是永久的
数据库事务:
以第一个DML语句的执行作为开始
以下面的其中之一作为结束
commilt或rollback
ddl或dcl语句(自动提交)
用户会话正常结束--commit
系统异常终了 --rollback
(SQL>set autocommit on '设置自动提交)
并发与数据的读取
当多个会发同时访问(操作)相同数据时,将会出现一些意想不到的结果
--脏读 Dirty reads :当一个事务读取另一个事务尚未提交的修改时,产生脏读。
--不可重复度 Non-repaetable reads :同一查询在同一事务中多次进行,在此期间,由于其他事务提交了对数据的修改或删除,每次返回不同的结果(在一个事务过程中,同样的数据被2次读取,并得到不同的值,称为不可重复度)
--幻读 Phantom reads :同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,虽然查询条件相同,每次返回的结果集却不同(在一个事务中,同样的sql执行2次时,得到的结果集不同)
事务隔离等级
脏读 不可重复度 幻读
Read uncommitted Y Y Y
Read committed N Y Y
Repeatable read N N Y
Serializable N N N
Oracle事务隔离等级
Read committed Oracle默认的隔离等级,对一条SQL可以保证数据的一致性,对于一个事务,无法做到repeatable read
Serializable 只能看到事务开始时所以提交的改变以及自身的改变
Read-Only 只能看到事务开始时所有提交的改变,自身不允许DML操作
只读事务隔离等级
1) 只读事务只允许执行查询操作,不允许执行任何DML操作事务
2) 当使用只读事务可以确保取得特定的时间点的数据
SQL> set transaction read only
Serializable
只能看到事务开始时所有提交的改变以及自身的改变
只针对DML操作的改变
DDL操作队该事务可见
使用Serializable隔离等级的情景:
修改操作比较短的事务
事务中存在多条SQL语句,需要数据从事务一开始就保持一致性。
原子性 Atomicity 事务原子性强调了一个事务是一个逻辑工作单元,是一个整体,是不可分割的。
一致性 Consistency 一个事务执行一项数据库操作,事务将使数据库库从一种一致性状态变换成另一种一致性状态
隔离性 Isolation 在事务未提交前,它操作的数据,对其他用户不可见。
持久性 Durability 事务的持久性是指一旦事务成功完成,该事务对数据库所事假的所有更新都是永久的
数据库事务:
以第一个DML语句的执行作为开始
以下面的其中之一作为结束
commilt或rollback
ddl或dcl语句(自动提交)
用户会话正常结束--commit
系统异常终了 --rollback
(SQL>set autocommit on '设置自动提交)
并发与数据的读取
当多个会发同时访问(操作)相同数据时,将会出现一些意想不到的结果
--脏读 Dirty reads :当一个事务读取另一个事务尚未提交的修改时,产生脏读。
--不可重复度 Non-repaetable reads :同一查询在同一事务中多次进行,在此期间,由于其他事务提交了对数据的修改或删除,每次返回不同的结果(在一个事务过程中,同样的数据被2次读取,并得到不同的值,称为不可重复度)
--幻读 Phantom reads :同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,虽然查询条件相同,每次返回的结果集却不同(在一个事务中,同样的sql执行2次时,得到的结果集不同)
事务隔离等级
脏读 不可重复度 幻读
Read uncommitted Y Y Y
Read committed N Y Y
Repeatable read N N Y
Serializable N N N
Oracle事务隔离等级
Read committed Oracle默认的隔离等级,对一条SQL可以保证数据的一致性,对于一个事务,无法做到repeatable read
Serializable 只能看到事务开始时所以提交的改变以及自身的改变
Read-Only 只能看到事务开始时所有提交的改变,自身不允许DML操作
只读事务隔离等级
1) 只读事务只允许执行查询操作,不允许执行任何DML操作事务
2) 当使用只读事务可以确保取得特定的时间点的数据
SQL> set transaction read only
Serializable
只能看到事务开始时所有提交的改变以及自身的改变
只针对DML操作的改变
DDL操作队该事务可见
使用Serializable隔离等级的情景:
修改操作比较短的事务
事务中存在多条SQL语句,需要数据从事务一开始就保持一致性。