關於主外來鍵關係DML父表和DML子表加鎖方式
原創 轉載請註明出處
當存在主外來鍵關係時候不管是更新主表還是子表都會出現對應的LOCK,解釋如下:
實驗
SQL> create table test1
2 (id int);
SQL> alter table TEST1
2 add constraint TEST_PK primary key (ID);
SQL> insert into test1
2 values(10);
1 row inserted
SQL> commit;
Commit complete
SQL> create table test2
2 (id int);
Table created
SQL> alter table TEST2
2 add constraint test_fk foreign key (ID)
3 references test1 (ID);
Table altered
SQL> INSERT INTO TEST2
2 VALUES(10);
1 row inserted
SQL> COMMIT;
Commit complete
然後開一個會話進行刪除TEST2。出現LOCK模式如下
SQL> SELECT LOCK_TYPE,MODE_HELD,LOCK_ID1 FROM DBA_LOCKS WHERE SESSION_ID=150;
LOCK_TYPE MODE_HELD LOCK_ID1
-------------------------- ---------------------------------------- ----------------------------------------
Transaction Exclusive 327689
DML Row-X (SX) 51297
DML Row-S (SS) 51295
這裡LOCK_ID1是對應的OBJECT_ID我的子表是51297父表是51295 ,子表加了表共享行獨佔,父表加了表共享行共享。
為了測試主表這樣的問題,必須引入大量的資料
declare
i number(10);
begin
for i in 11..10000000 loop
insert into test1
values( i);
end loop;
end ;
這樣可以等待很長時間
鎖的模式如下
SQL> select LOCK_TYPE,MODE_HELD,LOCK_ID1 from dba_locks where session_id=148;
LOCK_TYPE MODE_HELD LOCK_ID1
-------------------------- ---------------------------------------- ----------------------------------------
Transaction Exclusive 262169
DML Row-S (SS) 51297
DML Row-X (SX) 51295
51295父表 51297子表
也許要問SS 和SX的區別區別在於行的獨佔和共享,如
DML Row-S (SS) 51297
DML Row-X (SX) 51295
這樣的模式我們隊51295進行FOR UPDATE是不行的行級X和S是不相容的
但是對51297進行FOR update是可以因為S和S相容。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-667534/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 父表修改與外來鍵的關係(主鍵DML與外來鍵的關係)
- 求主外來鍵的關係
- 檢視主外來鍵關係
- 生產庫故障分析(主外來鍵和DML效能分析)
- mysql主外來鍵依賴關係MySql
- MySQL建立資料表並建立主外來鍵關係MySql
- ORACLE查詢表之間的主外來鍵關係Oracle
- 資料庫的主外來鍵關係資料庫
- oracle 主外來鍵關係及實驗Oracle
- Oracle 查詢表與表之間的 主外來鍵關係Oracle
- EntityFramework Core 遷移忽略主外來鍵關係Framework
- 求主外來鍵的關係的指令碼(ZT)指令碼
- MySQL 檢視資料庫中有主外來鍵關係的表資訊MySql資料庫
- Django(15)外來鍵和表關係Django
- 關於全域性臨時表DML特性案例體現
- 無索引的外來鍵之主表子表DML操作實驗及結論索引
- 關於主外來鍵表資料提交過程中的一點疑惑
- 關於表空間和表的關係
- SAP IQ DML操作產生表鎖(不是行鎖),同時DML同一個表預設直接報錯
- DDL、DML、DCL、DQL相關操作
- 轉載--oracle DML鎖Oracle
- 主外來鍵關聯刪除(on delete set null和on delete cascade)deleteNull
- oracle主外來鍵鎖_lock_約束Oracle
- ORACLE DML鎖定機制Oracle
- db2_dml鎖分析DB2
- Oracle查詢表的外來鍵引用關係Oracle
- 關於Oracle LOGMNR找不到dml操作及補充日誌相關Oracle
- EF Code First中的主外來鍵約定和一對一、一對多關係的實現
- 一加和OPPO什麼關係?一加跟OV竟有這層關係
- DML的鎖,修改表經常遇到的的場景
- 關於PR 和PO關係
- Django中ORM外來鍵和表的關係(Django程式設計-4)DjangoORM程式設計
- MySQL:Innodb 關於Handler_commit每次DML增加2的原因MySqlMIT
- 根據父表查詢子表
- oracle外來鍵索引解決父表鎖定問題Oracle索引
- 開發CMP關係的時候,是建立主鍵表CMP關係然後指向外來鍵表CMP,還是反之?
- 外來鍵沒有索引哪些DML操作會被阻塞索引
- 並行dml操作所需的TM鎖並行