簡體   English   中英

MySQL 是否原子地執行單個語句?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM