前のページで確認した通り、デフォルトでは外部キー制約を設定している親テーブルの該当カラムの値を更新したり、データそのものを削除しようとするとエラーが発生します。ここでは親テーブルを更新したりデータを削除したりした場合の挙動の設定を行います。UPDATE句を使います。DELETE句を使います。同時に指定することもできます。reference_option」と続けて記述して下さい。UPDATE句に対しては次の値を指定することができます。ACTIONそれでは一つ一つ確認していきます。いずれの場合でも親テーブルは同じであり、次のようなテーブルを作成しデータをいくつか追加してあります。UPDATE句にRESTRICTを指定した場合は、親テーブルに対して更新や削除を行うとエラーが発生します。UPDATE句を明示的に指定しなかった場合に設定される値です。次のような子テーブルを作成します。RESTRICTを指定しています。engine=InnoDB;子テーブルにデータを追加します。親テーブルの「name」カラムの値を更新してみます。上記のようにエラーが発生し更新は行えません。今回は更新を行いましたが親テーブルのデータを削除しようとした場合もエラーとなります。親テーブルを参照しているテーブルを削除するために「sales1」テーブルを削除して下さい。ACTIONを指定した場合は、親テーブルに対して更新や削除を行うとエラーが発生します。ACTIONとRESTRICTは同じ挙動となります。次のような子テーブルを作成します。ACTIONを指定しています。engine=InnoDB;子テーブルにデータを追加します。親テーブルのデータを削除してみます。上記のようにエラーが発生し削除は行えません。今回は親データを削除しようとしましたが更新しようとした場合もエラーとなります。親テーブルを参照しているテーブルを削除するために「sales2」テーブルを削除して下さい。UPDATE句にCASCADEを指定した場合は、親テーブルに対して更新を行うと子テーブルで同じ値を持つカラムの値も合わせて更新されます。親テーブルに対して削除を行うと子テーブルで同じ値を持つデータが削除されます。次のような子テーブルを作成します。DELETE句にCASCADEを指定しています。engine=InnoDB;子テーブルにデータを追加します。親テーブルの「name」カラムの値を更新してみます。今回は親テーブルの更新に成功しました。親テーブル及び子テーブルの内容を確認してみます。親テーブルで更新したデータと同じ値が格納されていた子テーブルのデータも同時に更新されていることが確認できます。続いて親テーブルのデータを削除してみます。親テーブルのデータの削除に成功しました。親テーブル及び子テーブルの内容を確認してみます。親テーブルで削除したデータと同じ値が格納されていた子テーブルのデータも同時に削除されていることが確認できます。このようにCASCADEを指定した場合には、親テーブルの更新に合わせて子テーブルのデータも更新され、親テーブルのデータの削除に合わせて子テーブルのデータも削除されます。親テーブルを参照しているテーブルを削除するために「sales3」テーブルを削除して下さい。親テーブルもデータが一部変更されたので元の状態に戻してあります。NULLを指定した場合は、親テーブルに対して更新を行うと子テーブルで同じ値を持つカラムの値がNULLに更新されます。親テーブルに対して削除を行うと子テーブルで同じ値を持つデータのカラムの値がNULLに更新されます。次のような子テーブルを作成します。NULLを指定しています。engine=InnoDB;子テーブルにデータを追加します。親テーブルの「name」カラムの値を更新してみます。今回は親テーブルの更新に成功しました。親テーブル及び子テーブルの内容を確認してみます。親テーブルで更新したデータと同じ値が格納されていた子テーブルのデータのカラムの値がNULLに更新されていることが確認できます。続いて親テーブルのデータを削除してみます。親テーブルのデータの削除に成功しました。親テーブル及び子テーブルの内容を確認してみます。親テーブルで削除したデータと同じ値が格納されていた子テーブルのデータのカラムの値がNULLに更新されていることが確認できます。NULLを指定した場合には、親テーブルが更新されたり削除されたりすると、子テーブルで同じ値を格納していたデータのカラムの値がNULLに設定されます。IKURA初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を多数行っています。