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 WRITE, B WRITE; 来消除死锁的风险。这是原子的,所以第二个连接会等待。

如果不使用 LOCK TABLES,有死锁的风险。

在某些情况下,即使是单个 SQL 语句也可能会死锁。我们在我目前的工作场所经常看到这种情况,例如,如果 table 有多个主键或唯一键。例如:

CREATE TABLE MyTable (
  id INT AUTO_INCREMENT PRIMARY KEY,
  x INT,
  UNIQUE KEY (x)
);

MySQL 似乎有一个允许死锁的设计缺陷,因为它 不是 原子语句获取多个唯一键上的锁。