0

tableinfo と tablenamelist の 2 つのテーブルと、次のような外部キーがある場合:

Alter tableinfo add foreign key (name) references tablenamelist(name) on update cascade;

記録はどのような状況で変更されますか?

私の理解では、tablenamelist で「bob」を「Bobby」に変更すると、tableinfo で「bob」のすべてのインスタンスが「Bobby」に更新されます。tableinfo テーブルの名前を変更するとどうなりますか? レコードを 'bob' から 'tim' に変更すると、tableinfo のレコードが変更されますか? それとも、そのレコードを新しい名前に再割り当てするだけですか?

4

1 に答える 1

1

最初の仮定は正しいです。で名前を変更するtablenamelistと、テーブルで名前が変更されますtableinfo

tableinfo2番目の仮定は正しくありません。テーブル内の名前を、テーブル内に存在しない名前に変更しようとすると、外部キー違反が発生しますtablenamelist

外部キーは、外部テーブルにキーが存在することを強制する制約です。

外部キーから

リレーショナルデータベースのコンテキストでは、外部キーは2つのテーブル間の参照制約です。

また、14.3.5.4から。外部キーの制約

InnoDBは、親テーブルに一致する候補キー値がない場合、子テーブルに外部キー値を作成しようとするINSERTまたはUPDATE操作を拒否します。

于 2012-10-30T03:40:18.567 に答える