【Oracle学习】之 事务(Transaction)与锁

Q:创建空表后再插入记录,再回滚,记录没了,而表还存在?
A:看(下文)事务提交COMMIT


Topic1 :事务
Topic2:锁(exclusive,share锁)

一、事务概念

  定义:事务是一些数据库操作的集合。
特性:
  ①原子性(Atomicity):事务是数据库的逻辑工作单位,事务中的所有操作要么都做,要么都不做,不存在其他情况。

这里写图片描述

  ②一致性(Consistency):事务执行的结果必须是使数据库从一个一致性状态转变为另一个一致性状态,不存在中间的状态。

这里写图片描述

  ③隔离性(Isolation):数据库中一个事务的执行不受其他事务的干扰,每个事务都感觉不到还有其他事务在并发执行。

这里写图片描述

  ④持久性(Durability):一个事务一旦提交,则对数据库中数据的改变是永久性的,以后的操作或故障不会对事务的操作结果产生任何影响。

这里写图片描述


二、Oracle事务处理

(1)事务提交(COMMIT):
  ①显式操作方式:
sql statements
...

commit | rollback

这里写图片描述

  ②隐式操作方式:
(Ⅰ)利用语句可以设置事务是否自动提交
//事务的隐式管理方式
//on :开启事务自动提交;off:取消自动提交
set autocommit on/off

这里写图片描述

(Ⅱ)当发生以下事件时,事务将结束
⒈ 利用commit/rollback进行事务的提交和回滚
2. 执行DDL语句(create、alter、drop、rename、revoke等)时,事务将自动提交。详细查看:http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_1001.htm#SQLRF30041
3. 如果使用SQL*Plus,那么正常退出时,事务将会自动提交;而非正常退出时,则事务回滚。
(2)事务回滚(ROLLBACK):
(Ⅰ)取消全部操作
直接rollback
(Ⅱ)取消部分操作

这里写图片描述

insert into test_teacher (t_id, t_name) values (4, 'Gege');
insert into test_teacher (t_id, t_name) values (5, 'LAla');
savepoint A;
update test_teacher set t_name = 'Lala' where t_id = 5;
savepoint B;
insert into test_teacher (t_id, t_name) values (6, 'Miumiu');
 rollback to B;
 rollback to A;
 rollback;

这里写图片描述




二、锁

oracle 资料:https://docs.oracle.com/cd/B19306_01/server.102/b14220/consist.htm

  定义:锁是在事务访问相同资源时,防止事务之间的有害性交互的机制,这些资源包括用户系统对象、内存和数据字典中的共享数据结构。

Q:为什么需要锁?
A:并发运行时,容易造成读取脏数据。
Q:并发大概分为?
A:①读并发(不会造成错误,如select),②写并发(容易造成错误,如insert、update、delete等等)
Q:锁什么时候释放?
A:事务结束。

常见的锁应用:
  两个客户端同时操作同一数据,一个进行操作,另一个进行等待。
//select 可以显式加锁
select * from test_teacher where t_id = 4 for update;

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述


锁的分类:
①排他锁(exclusive):被称为写锁,该模式下的锁可以防止资源的共享,当进行数据修改时,会启用该类型的锁。

这里写图片描述

②共享锁(share):被称为读锁,该模式下的锁锁定的数据只能被读取,而不能被修改。加了共享锁的记录,允许被并发地读取。

这里写图片描述

  Oracle数据库大型数据库,它利用不同类型的锁来管理并发会话对数据对象的操作。oracle数据库中的锁按照所用对象的不同分为以下几种类型。
①DML锁:用来保护数据的完整性,称为数据锁。DML锁细分可以分为行级锁(TX)和表级锁(TM)。行级锁(TX)也属于排他锁。
②DDL锁:可以保护模式中对象的结构。
③内部锁:保护数据库的内部结构,完全自动调用。


死锁:

这里写图片描述

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值