😈 手動でデッドロックを実行しましょう![ SQL ]


💎 デッドロックとは


これは、複数のユーザーがそれぞれのロックを解放するのを待つ状況であり、永久にロックを解除します.

💎 デッドロックをしましょう


1️⃣ テーブルの作成


-- schema
CREATE TABLE Lefty (
    Id INT NOT NULL AUTO_INCREMENT,
    Number INT,
    PRIMARY KEY(Id)
);
CREATE TABLE Righty (
    Id INT NOT NULL AUTO_INCREMENT,
    Number INT,
    PRIMARY KEY(Id)
);

-- data
INSERT INTO Lefty (Number) VALUES (1);
INSERT INTO Righty (Number) VALUES (1);
レフティテーブル
ID

1
1
右表
ID

1
1

2️⃣ 始めましょう


1 .最初は両方のテーブルがトランザクションを開始します.
▼ 2人のユーザーを想像してください

2 .左タブから実行する

このように、更新SQLは待ちます.そして、右がロックされる前に、終わりません.それは永遠に待つつもりです
order2を実行している間は、右のタブから
その後デッドロックエラー登場!両方のユーザーは、現在各ロックをリリースするのを待ちます.

誰もが実行を停止する誰かが待っているので、誰も実行を停止することができます!

If deadlock error didn't appear, you could change autocommit setting


mysql> SELECT @@session.autocommit;
+----------------------+
| @@session.autocommit |
+----------------------+
|                    1 |
+----------------------+

-- change autocommit to 0
SET autocommit=0;
読書ありがとう😎
(将来、私に注意してください)
誰もが実行を停止する誰かが待っているので、誰も実行を停止することができます!
->みんな走ってる、止まる条件は誰かが止まったら.でもみんな誰かが止まるの待ってるから、誰も止まりません.