私は2つのテーブルを持っています:
テーブル作成者: ID (INTEGER)、author_name (VARCHAR)、first_name (VARCHAR)、last_name (VARCHAR)、preferred_name (VARCHAR)。
Table CoAuthored: ID (INTEGER) author1ID (INTEGER), author2ID (INTEGER), paper_ID (INTEGER) (このリンクで参照されている共著論文の ID)
CoAuthored の author1ID と author2ID が Author の ID を参照するように、外部キー制約を追加したいと考えています。テーブルを次のように定義しました。
CREATE TABLE Author(ID INT, author_name VARCHAR(100), preferred_name VARCHAR(100), first_name VARCHAR(100), last_name VARCHAR(100), PRIMARY KEY(ID)) ENGINE=INNODB;
CREATE TABLE CoAuthored(ID INT, author1ID INT, author2ID INT, paper_ID INT);
これは、外部キーを作成する私の試みです:
ALTER TABLE CoAuthored ADD foreign key (author1ID) references Author(ID) on delete cascade on update cascade;
これは問題なく実行されますが、ID に存在しない author1ID を含むタプルを追加しようとすると、それを実行できます。つまり、外部キー制約が機能していません。
他に何をする必要がありますか?create ステートメントで両方のテーブル ENGINE=INNODB を作成しようとしましたが、エラー 1005 can't create table が発生します。