通常、私はPostgreSQLを使用していて、問題は発生しませんでしたが、MySQLを使用する必要があり、いくつかの問題が発生しています。データベースuser_main_dbにテーブルを作成しています。外部キーにはいくつかの問題があります。phpMyAdminは常に次のエラーを表示します。
1005-テーブル'user_main_db.user_main'を作成できません(errno:150)(engine = InnoDB&page = Status&token = 136fdbb820093986c79180b24adb304d">詳細...)
これは、データベースuser_main_dbに作成しようとしているテーブルです。
CREATE TABLE user_main
(
uid INTEGER,
fn VARCHAR(40) NOT NULL,
ava VARCHAR(255),
gender tinyint(1) NOT NULL,
dob DATE NOT NULL,
country_id INTEGER,
PRIMARY KEY (uid),
FOREIGN KEY ( uid ) REFERENCES user_basic_db.user_basic(uid) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY ( country_id ) REFERENCES countries_db.countries(country_id) ON DELETE CASCADE ON UPDATE CASCADE
);
これは、データベースuser_basic_dbのテーブルuser_basicです。
CREATE TABLE user_basic
(
uid INTEGER AUTO_INCREMENT,
email VARCHAR(40) NOT NULL,
password VARCHAR(40) NOT NULL,
PRIMARY KEY (uid)
);
これは、データベースcountries_dbのテーブルの国です。
CREATE TABLE countries(
country_id INTEGER PRIMARY KEY AUTO_INCREMENT,
country VARCHAR(40) NOT NULL UNIQUE
)
奇妙なことは、テーブルを次のように定義するときです。
CREATE TABLE user_main
(
uid INTEGER PRIMARY KEY REFERENCES user_basic_db.user_basic(uid) ON DELETE CASCADE ON UPDATE CASCADE,
VARCHAR(40) NOT NULL,
ava VARCHAR(255),
gender tinyint(1) NOT NULL,
dob DATE NOT NULL,
country_id INTEGER REFERENCES countries_db.countries(country_id) ON DELETE CASCADE ON UPDATE CASCADE
);
クエリは正常に実行されますが、外部キーは作成されません。「リレーショナルビュー」を開くと、uidとcountry_idへの参照がなく、そのようなIDを持つ国がない場合でもuser_main(country_id)に挿入できます。誰かを助けてください。ありがとうございました。