Open kmishima16 opened 1 month ago
@kmishima16
その他の問題として、2つ以上のトランザクションが外部キー制約のチェックや更新を行おうとしたときに、互いの処理が終わるのを待つ状態になってしまい、結果としてどちらも完了できなくなってしまうことがあるそうです。 外部キー制約でデッドロックに引っかかった話
①外部キー設定を削除 ②カラム名を変更 ③外部キーを設定 一度外部キー制約の設定を削除しないと変更することができない。
参照先の整合性のチェックやトランザクションのロックなど追加の処理が発生するため、パフォーマンスが落ちてしまう。
MySQL
[1451] [23000]: Cannot delete or update a parent row:
a foreign key constraint fails (`test_db`.`Issue`, CONSTRAINT `Issue_ibfk_1`
FOREIGN KEY (`assignee_id`) REFERENCES `Assignee` (`id`))
PostgreSQl
[23503]: ERROR: update or delete on table "assignee" violates foreign key constraint
"fk_assignee" on table "issue"
詳細: Key (id)=(1) is still referenced from table "issue".
MySQLは制約の情報。PostgreSQLは制約の情報 + 値。PostgreSQLの方が親切に感じました。
クイズ2の解答を考える際にこんな記事を見つけました。 PostgreSQLで外部キーを使う際の注意点
PostgreSQLだと手動でインデックスを貼らないといけないようです。 使用するデータベースによって挙動が違うので注意しないといけないと感じました。
課題解答ページ作成しました。 内容についてご確認よろしくお願いいたします。 https://different-shock-b76.notion.site/12527f38df768051b4a7c70afe6062f6?pvs=4