事务机制
1.术语
·事务 Transaction
·开启事务 Begin(Start)Transaction
·提交事务 Commit Transaction
·回滚事务 Rollback Transaction
·结束事务 End Transaction
2.事务:
事务是最小的工作单元,不可再分,一个事务对应一个完整的业务。这个业务是需要N条DML语句共同联合执行处理,这N条DML语句必须保证原子性不可再分,必须保证同时成功,或者同时失败,为了就是保证数据的安全。
银行的转账操作就是一个原子性不可再分的例子,必须保证转出成功,转入成功,才算是整个转账业务成功结束,如果中间执行过程中出现任何异常,为了保证数据的安全,不能选择修改数据库中的数据,将所有的操作记录清空,这个动作就是回滚。
3.事务包括四个特征:
ACID(原子性,一致性,隔离性,持久性)
隔离性包括四中隔离级别
*脏读(Dirty read, uncommited read)读未提交【对方还没提交的数据就读取到了,一般数据库都比这个隔离级别高】
*读提交,提交读(commited read)【对方提交之后的数据可以读取到,这是oracel默认的隔离级别】
*可重复读取(Repeatable read 这是mysql数据库的缺省行为)【对方提交之后的数据还是读取不到,第一次读取结果和第二次读取结果完全相同,不管时间间隔多久,只要当前事务未提交】
例如,银行要查账,在3点开始读数据库数据,执行到5点结束,读完数据后,这是3点时刻的账物记录,不影响银行的其他柜员对数据库进行数据操作
*序列化读(Serializable read)这是最高的隔离级别,这种隔离级别表示大家访问数据库的时候必须要排队
演示:·在cmd窗口首先设置事务的隔离级别
·开启事务 start transaction
·执行sql语句
·提交事务 commit
4.什么时候标志着事务的开启?
只要一条DML语句开始执行标志着事务的开始。
5.什么时候标志着事务的结束?
只要执行了commite语句或者rollback语句标志着事务的结束
Commited 表示成功的结束
Rollback 表示失败的结束
事务只要结束,oracle数据库中的DML缓存就会全部清空。