oracle005:oracle中的操作符,常见的锁

本文主要介绍了Oracle数据库的操作符和锁机制。操作符包括算数、逻辑、关系、连接和集合运算符。锁机制方面,介绍了乐观锁、悲观锁、行锁、表锁、共享锁、排他锁等类型,还说明了解锁方式以及死锁的形成情况,如共享锁多用户操作和行锁互操作时会形成死锁。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,操作符:

  1. 算数运算符
    +,-,*,/,
  2. 逻辑运算符
    and与,or或,not非
  3. 关系运算符
    =,!=,<,>,<=,>=
  4. 连接运算符
    就是||,比如:
select 'hello'||'world' from dual;

在这里插入图片描述

  1. 集合运算符

  2. Union:自动去重复,排序

  3. Union all:不去重复,不排序

  4. Intersect:求交集,排序了

  5. Minus:求差集 a minus b 就是 a-b
    二,锁
    oracle中默认的锁是:乐观锁,排他锁,行锁。
    oracle中解锁只有两种方式:commit,rollback
    1,乐观锁:
    就是乐观的认为在自己操作数据的过程中,没有其他人操作这个数据,当执行insert,update,delete的语句是就自动加上了乐观锁。

update a set loc='山西' where deptno=20;

我们看到当用户1把数据改成山西,还没有commit或者rallback释放锁的时候,用户二想把它改成广东处于阻塞状态,它在等用户1释放锁.用户1释放锁之后,用户2才能改,最后的数据是用户2操作之后的数据
在这里插入图片描述

2,悲观锁:
总是悲观的认为在自己操作数据之前害怕有别人操作这个数据,它在访问数据之前提前就把数据锁定住,可以放心大胆的操作了!
先锁住,再进行操作。
在这里插入图片描述
两个用户同时进去想上悲观锁,但是1用户先进去上了锁,2用户就处于阻塞状态,等1释放锁了之后它才能上锁。
为了方便看,我们加上nowait;

select * from a for update nowait;

在这里插入图片描述
这样就可以看到它是处于阻塞状态的。
3,行锁:
锁定一行数据或多行数据都叫行锁

Select * from a for update nowait;
select * from a where deptno=40 for update nowait;

行锁可以是乐观锁,也可以是悲观锁,反正就是它把它想要操作的行锁定,其他用户可以增,但是如果想删改就会处于阻塞状态。就是只能查或者给里面加,但是人家锁定的数据你不能动。也不能查人家锁定的数据,没有锁定的随便查
4,表锁:
就是把一张表都给锁定了,同样用户1锁住了,其他用户就不能锁了

table 表名 in exclusive mode nowait

在这里插入图片描述
表锁定之后,就只能查,不能增删改。
表锁和行锁的区别就是行锁能添加数据,表锁不能。

在这里插入图片描述
5,共享锁:
你可以加锁,我可以加锁,大家都可以加锁!但是没一个人能操作数据!大家都只看数据不能动数据!

lock table 表名 in share mode nowait

注意:如果不加nowait就同时锁不了。
在这里插入图片描述
当两张表是共享锁,都对数据进行了操作,就会形成死锁
在这里插入图片描述

6,排它锁
整张表锁定,别人无法访问,别人也不能在加锁!自己可以随意操作数据,自己可以解锁

lock table a in exclusive mode nowait;

在这里插入图片描述
不能增删改,但可以查
在这里插入图片描述
7,死锁

  • 共享锁的两个或多个用户想同时对数据进行操作时,会形成死锁。
    在这里插入图片描述
  • 当两个行锁锁的是不同的行,都想对对方的行进行操作时就会形成死锁。
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值