0

私は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 が発生します。

4

3 に答える 3

0

まず、外部キーに関連するすべてのテーブルを InnoDB として定義する必要があります。MyISAM は単に外部キーをサポートしていません。

ここでの問題 (エラー 1005) は少しわかりにくいものです。を実行するALTER TABLEと、別のテーブルで参照されていない外部キー フィールドの 1 つに値があることを意味します。

テーブルを作成するときは、最初に「親」テーブルを作成し、次に 2 番目と 3 番目のテーブルを作成していることを確認してください。

于 2010-10-25T20:53:02.453 に答える
0

から: https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-6035435.html

2 つの MySQL テーブル間に外部キー関係を設定するには、次の 3 つの条件を満たす必要があります。

  1. 両方のテーブルが InnoDB テーブル タイプである必要があります。

  2. 外部キー関係で使用されるフィールドには、インデックスを付ける必要があります。

  3. 外部キー関係で使用されるフィールドは、データ型が類似している必要があります。

重要: InnoDB 以外のテーブルの場合、FOREIGN KEY 句は無視されます。

于 2010-10-25T20:51:49.607 に答える
0

「ENGINE=InnoDB」を試すことができますか

外部キー制約/キー制約は InnoDB テーブルでのみ機能します:)

- 乾杯

于 2010-10-25T20:52:21.017 に答える