首页
网页制作
网络编程
脚本专栏
数据库
网站运营
网络安全
平面设计
CMS教程
搜索
建站极客
数据库
oracle
正文
Oracle外键不加索引引起死锁示例
所属分类:
数据库
/
oracle
阅读数: 410
收藏 0
赞 0
分享
--创建一个表,此表作为子表
create table fk_t as select *from user_objects;
delete from fk_t where object_id is null;
commit;
--创建一个表,此表作为父表
create table pk_t as select *from user_objects;
delete from pk_t where object_id is null;
commit;
--创建父表的主键
alter table PK_t add constraintpk_pktable primary key (OBJECT_ID);
--创建子表的外键
alter table FK_t addconstraint fk_fktable foreign key (OBJECT_ID) references pk_t (OBJECT_ID);
--session1:执行一个删除操作,这时候在子表和父表上都加了一个Row-S(SX)锁
delete from fk_t whereobject_id=100;
delete from pk_t where object_id=100;
--session2:执行另一个删除操作,发现这时候第二个删除语句等待
delete from fk_t whereobject_id=200;
delete from pk_t whereobject_id=200;
--回到session1:死锁马上发生
delete from pk_t whereobject_id=100;
session2中报错:
SQL> delete from pk_table where object_id=200;
delete from pk_table where object_id=200
*
第 1 行出现错误:
ORA-00060: 等待资源时检测到死锁
当对子表的外键列添加索引后,死锁被消除,因为这时删除父表记录不需要对子表加表级锁。
--为外键建立索引
create index ind_pk_object_id on fk_t(object_id) nologging;
--重复上面的操作session1
delete from fk_t whereobject_id=100;
delete from pk_t whereobject_id=100;
--session2
delete from fk_t whereobject_id=200;
delete from pk_t whereobject_id=200;
--回到session1不会发生死锁
delete from pk_t whereobject_id=100;
更多精彩内容
其他人还在看
oracle(plsql)生成流水号
这篇文章主要介绍了oracle(plsql)生成流水号,需要的朋友可以参考下
评论 0
收藏 0
赞 0
分享
oracle中decode函数的使用方法
这篇文章主要介绍了oracle中decode函数的使用方法,需要的朋友可以参考下
评论 0
收藏 0
赞 0
分享
Oracle数据远程连接的四种设置方法和注意事项
Oracle数据库的远程连接可以通过多种方式来实现,本文我们主要介绍四种远程连接的方法和注意事项,并通过示例来说明,接下来我们就开始介绍
评论 0
收藏 0
赞 0
分享
oracle表空间中空表统计方法示例介绍
这篇文章主要介绍了oracle表空间中空表统计方法,需要的朋友可以参考下
评论 0
收藏 0
赞 0
分享
oracle用户权限、角色管理详解
这篇文章主要介绍了oracle用户权限、角色管理的使用和示例,需要的朋友可以参考下
评论 0
收藏 0
赞 0
分享
oracle用户权限管理使用详解
这篇文章主要介绍了oracle用户权限管理使用方法,需要的朋友可以参考下
评论 0
收藏 0
赞 0
分享
oracle生成动态前缀且自增号码的函数分享
这篇文章主要介绍了oracle生成动态前缀且自增号码的函数,需要的朋友可以参考下
评论 0
收藏 0
赞 0
分享
45个非常有用的 Oracle 查询语句小结
这里我们介绍的是 40+ 个非常有用的 Oracle 查询语句,主要涵盖了日期操作,获取服务器信息,获取执行状态,计算数据库大小等等方面的查询。这些是所有 Oracle 开发者都必备的技能,所以快快收藏吧
评论 0
收藏 0
赞 0
分享
oracle监控某表变动触发器例子(监控增,删,改)
这篇文章主要介绍了oracle监控某表变动触发器例子(监控增,删,改),用于监控某表的变动并生成日志记录到另一个表,需要的朋友可以参考下
评论 0
收藏 0
赞 0
分享
oracle 数据库隔离级别学习
这篇文章主要介绍了oracle数据库的隔离级别相关的知识,数据库操作的隔离级别,有需要的朋友可以参考下
评论 0
收藏 0
赞 0
分享
查看更多
网络赚钱
更多
又被电商耍?2015.6·18年中大促"先涨后降"把戏仍在
90后男屌丝如何让淘宝客日赚10万滴
网络赚钱的几种模式总结
Google
创业者找投资需要想好的九个问题
营销型网站建设提高网站转化率的方法
站长故事
更多
喜马拉雅创始人自述:网络电台一年半获取7000万用户
苹果发布三款新品:一个丑+另一个丑+一个死贵?
站长故事 一位“苦逼站长”的心酸 SEO真的如此简单吗?
比较适合个人站长的5种类型网站:定位 坚持 收益
那些跟马化腾一起创业的亿万富翁们
十年了!一个依靠设计师们热情支撑起的网站