三、事务特性
事务必须具备以下四个属性,简称ACID 属性:
原子性(Atomicity):事务是一个完整的操作。事务的各步操作是不可分的(原子的);要么都执行,要么都不执行
场景: 银行转账,A-100 B+100 同时成功或同时失败
一致性(Consistency):一个查询的结果必须与数据库在查询开始的状态一致(读不等待写,写不等待读)。
场景: 查询数据,9:00开始查询数据 9:15查询完毕,在这期间所查询的数据被其他操作更新,且在9:00-1:15之间查询结果显示的是9:00时候并没有被更改的数据. 一般oracle是把这个没有更新的数据放入'undo'里, 如果oracle在'undo'里没有找到数据,则宁可报错,也不会让你看到其他操作更新的新的数据.
隔离性(Isolation):对于其他会话来说,未完成的(也就是未提交的)事务必须不可见。
场景: 事务和事务之间相互隔离,2个session 一个查询 一个更新,那么在更新操作没有 commit之前, 查询所看到的数据是没有提交之前的,相互没有影响。
持久性(Durability):事务一旦提交完成后,数据库就不可以丢失这个事务的结果,数据库通过日志能够保持事务的持久性。
场景: 事务提交之后不可逆, 提交数据是由内存的数据刷新到磁盘上,这个过程的快慢和性能有关。那么oracle主要是靠 'rudo' 日志,先记录日志,在写到磁盘上。
事务采用隐性的方式,起始于session的第一条DML语句,注意登录的用户需要使用sysdba形式:conn system/tiger@orcl as sysdba;
查看事务:select * from v$transaction;
事务结束于:
1)COMMIT(提交)或ROLLBACK(回滚)
2)DDL语句被执行(提交)
3)DCL语句被执行(提交)
4)用户退出SQLPLUS(正常退出是提交,非正常退出是回滚)
5)机器故障或系统崩溃(回滚)
6)shutdowm immediate(回滚)
事务必须具备以下四个属性,简称ACID 属性:
原子性(Atomicity):事务是一个完整的操作。事务的各步操作是不可分的(原子的);要么都执行,要么都不执行
场景: 银行转账,A-100 B+100 同时成功或同时失败
一致性(Consistency):一个查询的结果必须与数据库在查询开始的状态一致(读不等待写,写不等待读)。
场景: 查询数据,9:00开始查询数据 9:15查询完毕,在这期间所查询的数据被其他操作更新,且在9:00-1:15之间查询结果显示的是9:00时候并没有被更改的数据. 一般oracle是把这个没有更新的数据放入'undo'里, 如果oracle在'undo'里没有找到数据,则宁可报错,也不会让你看到其他操作更新的新的数据.
隔离性(Isolation):对于其他会话来说,未完成的(也就是未提交的)事务必须不可见。
场景: 事务和事务之间相互隔离,2个session 一个查询 一个更新,那么在更新操作没有 commit之前, 查询所看到的数据是没有提交之前的,相互没有影响。
持久性(Durability):事务一旦提交完成后,数据库就不可以丢失这个事务的结果,数据库通过日志能够保持事务的持久性。
场景: 事务提交之后不可逆, 提交数据是由内存的数据刷新到磁盘上,这个过程的快慢和性能有关。那么oracle主要是靠 'rudo' 日志,先记录日志,在写到磁盘上。
事务采用隐性的方式,起始于session的第一条DML语句,注意登录的用户需要使用sysdba形式:conn system/tiger@orcl as sysdba;
查看事务:select * from v$transaction;
事务结束于:
1)COMMIT(提交)或ROLLBACK(回滚)
2)DDL语句被执行(提交)
3)DCL语句被执行(提交)
4)用户退出SQLPLUS(正常退出是提交,非正常退出是回滚)
5)机器故障或系统崩溃(回滚)
6)shutdowm immediate(回滚)