[英]does MySQL executes single statement atomically?
說,我有 2 個連接,它們正在執行以下代碼。 它會導致死鎖嗎?
connection 1-> lock tables A write, B write;
connection 2-> lock tables B write, A write;
您可以通過使用LOCK TABLES A, B WRITE;
來消除死鎖的風險LOCK TABLES A, B WRITE;
在這兩個連接中。 這是原子的,所以第二個連接會等待。
如果您不使用LOCK TABLES
,則存在死鎖的風險。
在某些情況下,即使是單個 SQL 語句也可能會死鎖。 我們在我目前的工作場所經常看到這種情況,例如,如果一張表有多個主鍵或唯一鍵。 例如:
CREATE TABLE MyTable (
id INT AUTO_INCREMENT PRIMARY KEY,
x INT,
UNIQUE KEY (x)
);
MySQL 似乎有一個允許死鎖的設計缺陷,因為獲取多個唯一鍵上的鎖的語句不是原子的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.