国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

Oracle外鍵不加索引引起死鎖示例

2020-07-26 14:20:25
字體:
來源:轉載
供稿:網友
--創建一個表,此表作為子表

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;
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 蓬溪县| 两当县| 司法| 沙田区| 伊金霍洛旗| 涟水县| 南澳县| 汝城县| 鄂伦春自治旗| 保亭| 新丰县| 襄城县| 南城县| 固镇县| 双城市| 南开区| 久治县| 岳阳市| 时尚| 新田县| 延川县| 顺昌县| 易门县| 蛟河市| 盱眙县| 万全县| 澎湖县| 汾西县| 湖州市| 宜黄县| 阿拉善盟| 营口市| 江城| 罗城| 四川省| 米泉市| 兴和县| 繁昌县| 大田县| 漳浦县| 朔州市|