1

一度に複数のテーブルを作成しようとしていました (そのうちのいくつかは他のテーブルを参照しています)。

データ型を一致させ、プライマリ/外部キーを正しく設定したと思います。しかし、「外部キー制約を追加できません」というエラーしか表示されません。参照されるテーブルは、他のテーブルが参照する前に最初に作成される可能性があると考えたため、順序を逆にしましたが、結果は同じでした。

最後に、最初に参照されるテーブル(item_type)のみを作成して実行し、後でテーブル(item)を参照してみました..そして...うまくいきました!

しかし、それらのコードを一度に実行できるかどうかは疑問です。

以下のコードは次のとおりです..(簡単にするために2つの表のみが示されています..)

CREATE TABLE item (
    i_id SMALLINT unsigned NOT NULL AUTO_INCREMENT,
    i_name VARCHAR(30) NOT NULL,
    t_id SMALLINT unsigned NOT NULL,
    PRIMARY KEY (i_id),
    FOREIGN KEY (t_id) REFERENCES item_type(t_id)
) ENGINE=INNODB;

CREATE TABLE item_type (
    t_id SMALLINT unsigned NOT NULL AUTO_INCREMENT,
    t_name VARCHAR(20) NOT NULL,
    PRIMARY KEY(t_id)
);
4

2 に答える 2

0

存在しないテーブルに外部キーを定義することはできないため、CREATE TABLE上記の順序で操作を実行してもうまくいきません。item_type最初にテーブルを作成し、次にitemへの外部キーを持つテーブルを作成するとitem_type、機能するはずです。

于 2013-08-15T10:00:30.973 に答える
0

データベースエンジンはSQLコードをバッチで実行するため、テーブルをクレートする1​​つのステートメントは1つのバッチですが、例では、最初のバッチはまだ実行されていない2番目のバッチを参照しているため、バッチの順序を変更すると機能します。

CREATE TABLE item_type (
    t_id SMALLINT unsigned NOT NULL AUTO_INCREMENT,
    t_name VARCHAR(20) NOT NULL,
    PRIMARY KEY(t_id)
);

CREATE TABLE item (
    i_id SMALLINT unsigned NOT NULL AUTO_INCREMENT,
    i_name VARCHAR(30) NOT NULL,
    t_id SMALLINT unsigned NOT NULL,
    PRIMARY KEY (i_id),
    FOREIGN KEY (t_id) REFERENCES item_type(t_id)
) ENGINE=INNODB;
于 2013-08-15T10:01:41.807 に答える