Oracle外键不加索引引起死锁示例

时间:2024-01-20 20:10:08 

--创建一个表,此表作为子表

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;

标签:外键,索引,死锁
0
投稿

猜你喜欢

  • python 用正则表达式筛选文本信息的实例

    2023-04-29 14:12:26
  • 通过Py2exe将自己的python程序打包成.exe/.app的方法

    2021-07-05 11:05:55
  • php基础教程

    2024-06-05 09:23:33
  • mysql 存储过程的问题

    2024-01-29 09:05:15
  • 详细讲解MySQL数据库对文件操作的封装

    2008-12-17 16:08:00
  • Python如何使用type()函数查看数据的类型

    2022-05-30 17:49:31
  • Pandas之groupby( )用法笔记小结

    2023-03-03 15:58:24
  • Python中整数的缓存机制讲解

    2021-12-24 12:35:46
  • 数据库性能优化二:数据库表优化提升性能

    2024-01-22 12:07:19
  • Python实现对字符串的加密解密方法示例

    2023-08-01 19:41:13
  • 来自腾讯的一个不固定高度得消息的滚动特效

    2024-04-17 10:19:34
  • python基于pygame实现飞机大作战小游戏

    2021-04-27 07:59:17
  • Python基于pandas实现json格式转换成dataframe的方法

    2021-08-23 23:09:01
  • ASP trim,ltrim,rtrim 去前后空格 函数

    2011-03-03 10:39:00
  • python迭代dict的key和value的方法

    2021-11-03 16:04:17
  • python创建属于自己的单词词库 便于背单词

    2022-05-01 10:17:00
  • python实现简单反弹球游戏

    2021-05-06 23:25:45
  • asp从Excel中筛选符合条件的记录保存至新的Excel中

    2007-09-06 19:20:00
  • Python heapq使用详解及实例代码

    2023-03-07 14:36:56
  • SWFObject1.5: 基于Javascript的Flash媒体版本检测与嵌入模块

    2009-08-06 18:02:00
  • asp之家 网络编程 m.aspxhome.com