表的锁定
锁的概念:锁出现在数据共享的场合,用来保证数据的一致性,当多个会话同时修改一个表时,需要对数据进行相应的锁定。
锁只有只读锁,排他锁,共享排他锁等多种类型,而且每种类型又有''行级锁''(一次锁住一条记录),"页级锁"(一次锁住一页,即数据库中存储记录的最小可分配单元),"表级锁”(锁主整个表)
若为"行级排他锁",则除被锁住的行外,该表中其他行均可被其他的用户进行修改(update)或者删除(delete)。若为"表级排他锁",则所有其他用户只能对该表进行查询操作,而无法对其中的任何记录进行修改或者删除。当程序对所作的修改进行提交(commit)或回滚(rollback)后,锁住的资源便会得到释放,从而允许其他用户进行操作。
有时,由于程序的原因,锁住资源后长时间未对其工作进行提交;或是由于用户的原因,调出需要修改的数据后,未及时修改并提交,而是放置于一旁;或是由于客户服务方式中的客户端出现"死机",而服务器端却未检测到,从而造成缩定的资源未被及时释放,影响到其他用户的操作。
如果两个事务,分别锁定一部分数据,而都在等待对方释放锁才能完成事务操作,这种情况下就会发生死锁
-
隐示锁和显示锁
在Oracle中,修改数据操作时需要一个隐示的独占锁以锁定修改的行,直到修改被提交或者撤销为止。如果一个会话锁定了数据,那么第二个会话要对数据进行修改,只能等到第一个会话对修改使用commit进行提交或者使用rollba命令进行回滚后,才开始执行。因此需要养成一个良好的习惯:执行修改操作后,要尽早的提交或撤销,以免影响其他会话对数据的修改。
-
表的显示锁定操作语句
语句 描述 select for update 锁定表行,防止其他会话对行进行修改 lock table 锁定表,防止其他会话对表进行修改 --eg:对部门10的进行加锁
select * from emp where deptno='10' for update; -
表的锁定 lock语句用于对整张表的锁定语法如下 lock table 表名 in {share|exclusive} mode; 对表的锁定可以用共享(share)或独占(exclusive)模式,共享模式下其他会话可以加共享锁,但不能加独占锁。独占模式下,其他会话不能加共享或独占锁
lock table emp in exclusive mode;
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!