😈 手動でデッドロックを実行しましょう![ 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;
読書ありがとう😎(将来、私に注意してください)
誰もが実行を停止する誰かが待っているので、誰も実行を停止することができます!
->みんな走ってる、止まる条件は誰かが止まったら.でもみんな誰かが止まるの待ってるから、誰も止まりません.
Reference
この問題について(😈 手動でデッドロックを実行しましょう![ SQL ]), 我々は、より多くの情報をここで見つけました https://dev.to/kaziusan/lets-run-deadlock-manually-sql-1hテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol