个人学习oracle记录——事务篇


事务是什么

讲事务的csdn文章。我自己理解一下觉得就是为了一个(访问数据库、并且可能会改变数据库内容的)目的,而进行的一系列操作的集合,附带的特点是:只有全部操作都成功这个目的才算成功,但凡有一个失败,那么其他操作全都应该撤销

事务的优点就是可以“后悔”,只要中间有个步骤出错,我就可以反悔说:“当我没说/做”。所以设计事务的目的是:保证数据的完整性。


一、COMMIT语句(提交事务)

用来提交当前事务的所有更改,“一系列操作”的最后一步。
提交后其他用户才知道你干了什么,否则只有你一个人知道自己干了什么。但你提交前别人也会读到你修改的数据——“脏读”,如果你回退了那么别人读取的是无效的数据,“脏数据”。
commit有三种提交方式:显示提交、隐式提交还有自动提交。w3cschool没说这个,可以参考这篇文章

二、ROLLBACK语句(回滚事务)

用来撤销当前事务或有问题的事务。
比较有意思的参数是:“to savepoint xxxx”保存点,加入这个参数后,回滚会到叫xxxx的保存点就结束,在此保存点前的操作得到保留,此保存点后的操作全都被撤销。如果省略这个子句,则默认全部撤销。
保存点的设置方法:在两个操作中间声明。例如:

     INSERT INTO table1(a,b,c) VALUES('aaa','bbb','ccc');
     
     SAVEPOINT SAVE_A;
 
     INSERT INTO table2(a1,b1,c1) VALUES('aaa1','bbb1','ccc1');

三、SET TRANSACTION语句(设置事务)

用来设置事务的各种状态,比如只读、读/写、隔离级别,为事务分配名称或将事务分配回滚段等等。
看起来除了设置读写权限和隔离级别以外,用处不太大。

四、LOCK TABLE语句(锁表)

用来锁定表、表分区或表子分区。
主要是lock_mode有六种,但是含义感觉好相似,好难懂。 参考了一下这篇文章

2.1 EXLUSIVE排他锁
表级锁:当一个Session获取到了排他锁以后,其他用户只能进行查询操作,一般对一张表进行drop操作时获得该锁。
2.2 SHARE共享锁
表级锁:SHARE模式允许并发查询,但是一个Session如果获得了共享锁,那么就不能对该表进行update操作。
2.3 ROW SHARE行共享模式
行级锁:允许并发访问,但是不允许用户独占式访问。这个锁模式等价于WITH SHARE UPDATE(以前老版本的写法)
2.4 ROW EXCLUSIVE行排他模式
行级锁:ROW EXCLUSIVE模式一般来说用户不会手动进行设置,在一个Session会话对数据库进行insert、update以及delete操作时,该用户就会自动的获取到这个ROW EXCLUSIVE锁。在ROW EXCLUSIVE和ROW SHARE模式一样,但是如果一个Session获得了ROW EXCLUSIVE锁,那么另外的Session就不能进行ROW EXCLUSIVE锁定,也不能对该表进行SHARE锁定。
2.4 SHARE ROW EXLUSIVE共享行排他
行级锁:如果一个Session获取了SHARE ROW EXLUSIVE锁,该用户以及其他用户可以对整张表进行查询,但是,不允许其他用户对该表进行SHARE锁定或者更新表的数据。

还是感觉蛮难懂的,以后遇到再转头仔细看吧。


总结

这一章就是讲事务这个技术怎么用。首先搞清楚事务,是为了保护数据完整性,方便及时回退,对一串操作进行“包裹”的技术。然后开始事务用的“begin”,提交事务用的“commit”,设置回退点“savepoint xxx”,回退就“rollback to savepoint xxx”,设置事务用“set transaction”,更进一步保护数据完整性可以加上锁表操作“lock table”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值