MySQL Workbench で SQL エディターを使用しているときに、実行時に外部キー制約が無視されているように見える奇妙なことに遭遇しました。次に例を示します。
create database testdb;
use testdb;
create table t1 (
`test` INT,
PRIMARY KEY (`test`)
) ENGINE = InnoDB;
create table t2 (
`test1` INT,
`test2` INT,
FOREIGN KEY (`test2`) REFERENCES t1(test),
PRIMARY KEY (`test1`)
) ENGINE = InnoDB;
insert into t1 values (1);
insert into t2 values (1,1);
insert into t2 values (2,2);
この例でinsert into t2 values (2,2);
は、列テストが 2 である t1 に行がないため、失敗するはずです。
phpMyAdminでテストしましたが、正しく失敗し、外部キー制約に違反しているというエラーが発生しましたが、MySQL Workbenchではエラーは発生せず、テーブルに挿入されました(phpMyAdminで確認しました) .
別のクライアントを使用してSQLを入力できるので、私にとっては大きな問題ではありませんが、外部キーについての私の理解では、参照先のテーブルに値が存在する必要があるため、これが機能する理由に興味があります。
MySQL のバージョンは 5.5.16、エンジンは InnoDB です。