外部キー(FOREIGN KEY)制約を利用している場合、
子テーブルに追加、更新や削除を行う時は、必ず親テーブルの対象のidに対して排他ロックを行ってから、更新や削除、追加を行う。
- 親テーブルの該当idに対して排他ロックを取る
- 子テーブルの該当行に対して追加、更新、削除等を行う
これならロックは起こらない。
- 外部キー制約を利用していると、
子テーブルにINSERT, UPDATE, DELETEを行うと親に共有ロックがかかる - 外部キー制約を利用している子テーブルにINSERT, UPDATE, DELETEを行う場合は、
排他ロック「FOR UPDATE」をかけてからINSERT, UPDATE, DELETEを行う
共有ロック→排他ロックはデッドロックが起こる原因になる。外部キー制約を利用しているテーブルをSELECT以外で操作する場合は、必ず排他ロックを行ってから、更新や削除、追加を行う。
MySQLでの遅延制約 抜け穴
トランザクション中のみ外部キー制約のみを無視する
FOREIGN_KEY_CHECKS=0


![[Resolved] ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve ecr registry auth: service call has been retried 3 time(s): RequestError: send request failed caused by: Post “https://api.ecr.ap-northeast-1.amazonaws.com/”: dial tcp 52.119.218.165:443: i/o timeout](https://www.yuulinux.tokyo/contents/wp-content/uploads/2017/04/aws_logo_smile_1200x630-150x150.png)





