Skip to main content

MySQL8.0のdelete文でロックになるか調べてみた

試しにインデックス乗らない状態でdeleteしたらどうなるか試しに調べてみた

・データ

+----+-----------+---------------------+---------------------+
| id | name      | created_at          | updated_at          |
+----+-----------+---------------------+---------------------+
|  2 | masterka2 | 2020-12-13 18:19:01 | 2020-12-13 18:19:01 |
|  3 | masterka  | 2020-12-13 18:20:56 | 2020-12-13 18:20:56 |
+----+-----------+---------------------+---------------------+

 

テスト1
インデックスが乗らないやつをdeleteしてみる
・端末1

start transaction
delete from table_test created_at <= '2020-12-13 18:20:00';

・端末2
これはロックされる

update table_test set name="masterk3" where id=3;

 

テスト2
インデックスが乗るやつをdeleteしてみる
・端末1

start transaction
delete from table_test id=2;

・端末2
これは行ロックになるので通る

update table_test set name="masterk3" where id=3;

 

テスト3
・端末1
試しに複雑なクエリを投げてみた

start transaction
delete from table_test as a
 where a.id in 
   (select id from 
    (select id from table_test where created_at &lt;= '2020-12-13 18:20:00')
   b);

・端末2
これはロックされる

update table_test set name="masterk3" where id=3;

 

テスト4

・端末1
試しに=で比較のクエリを投げてみた

start transaction
delete from table_test where name="msaterka";

・端末2
これはロックされる

update table_test set name="masterka3" where id =3;

 

インデックスのらないとテーブルロックになっちゃうから・・・・
数秒で終わるようにしないとまずいなぁ

関連記事:

Pocket