【Oracle】【Mysql】oracle和mysql锁表操作

文章介绍了数据库管理系统中,如MySQL和Oracle的表锁定机制,包括READ和WRITE锁的用法以及解锁操作。在MySQL中,LOCKTABLES和UNLOCKTABLES用于控制表级别的访问,而SELECTFORUPDATE用于行级锁定。Oracle提供了行级锁定,包括行共享、行排它、共享、共享排它和排它锁等不同模式。此外,还提到了解除锁定的方法以及全局加锁的FLUSHTABLES命令。

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

mysql锁表

锁定表

LOCK TABLES tbl_name { READ | WRITE }, [ tbl_name { READ | WRITE }, ...]
LOCK TABLES table1 WRITE, table2 READ;
  1. READ锁代表其他用户只能读,不能进行其他操作
  2. WRITE锁代表其他用户不能进行任何操作(包括读)

解锁表

UNLOCK TABLES

查看哪些表被锁

show OPEN TABLES where In_use > 0;

全局加锁

FLUSH TABLES WITH READ LOCK;

oracle锁表

行级锁定(mysql同)

# 锁定整张表
SELECT * FROM tbl_name t FOR UPDATE 
# 只锁定主键=值得特定行 
SELECT * FROM tbl_name t WHERE id=1 FOR UPDATE

通过select for update语句锁定的表,其他用户只能进行读操作,锁定者通过commit或rollback命令自动解锁。

表级锁定

LOCK TABLE <tbl_name> IN <lock_mode> mode [nowait]

lock_mode是锁定模式,nowait关键字用于防止无限期的等待其他用户释放锁。
lock_mode五种模式如下(1-5级别越高限制越大):

  1. 行共享(row share, rs):允许其他用户访问和锁定该表,但禁止排它锁锁定整张表。
  2. 排它锁(row exclusive, rx):与行共享模式相同,同时禁止其他用户在此表上使用共享锁。使用select …for update语句会在表上自动应用行排它锁。
  3. 共享(share, s):共享锁锁定表后,仅允许其他用户查询表中的行,但不允许插入、更新和删除行。多个用户可以在同一张表中放置共享锁,即允许资源共享。例如:如果用户每天都需要在结账时更新日销售额表,则可以在更新该表时使用共享锁以确保数据的一致性。
  4. 共享排它锁(share row exclusive, srx):执行比共享锁更多的限制。放置其他事务在表上应用共享锁、共享排它锁和排它锁。
  5. 排它锁(exclusive, x):对表执行最大的限制。除了允许其他用户查询该表记录,排它锁防止其他事务对表做任何更改或在表上应用任何类型的锁。

解锁

# 管理员权限执行
alter system kill session 'sid, serial#';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值