- 我使用REPEATABLE_READ或SERIALIZABLE事務隔離(鎖會保留我每次訪問行)
- 我們正在談論的多個線程同時訪問多個表。
我有以下問題:
- 是否有可能爲
INSERT
操作導致死鎖?如果是這樣,請提供一個詳細的場景,演示如何發生死鎖(例如線程1執行此操作,線程2執行此操作,...,死鎖)。 - 對於獎勵積分:對所有其他操作(例如SELECT,UPDATE,DELETE)回答相同的問題。
UPDATE: 3.超級獎勵積分:我怎樣才能避免在以下情況下的僵局?
鑑於表:
- 權限
[id BIGINT PRIMARY KEY]
- 公司
[id BIGINT PRIMARY KEY, name VARCHAR(30), permission_id BIGINT NOT NULL, FOREIGN KEY (permission_id) REFERENCES permissions(id))
我創建了一個新的公司如下:
- INSERT INTO權限; - 插入權限.id = 100
- INSERT INTO companies(name,permission_id)VALUES('Nintendo',100); - 插件companies.id = 200
我刪除公司如下:
- SELECT permission_id FROM公司WHERE ID = 200; - 返回permission_id = 100
- DELETE FROM companies WHERE id = 200;
- DELETE FROM permissions WHERE id = 100;
在上例中,INSERT鎖定順序爲[permissions,companies],而DELETE鎖定順序爲[companies,permissions]。有沒有辦法解決這個例子爲REPEATABLE_READ
或SERIALIZABLE
隔離?
插入,選擇和刪除是不會導致死鎖定義爲單個用戶(在單個事務中)的場景。 – 2013-05-14 03:07:25
@CleverIdeaWidgetry,我澄清了這個問題,以反映我們正在討論多線程和表的事實。 – Gili 2013-05-14 03:10:47
您的基本問題的答案是「可以嗎?」是的 - 正如其他人所說的。是否有一些障礙阻止你自己測試你的場景? – 2013-05-14 03:31:22