MySql(Innodb) でテーブルの外部キーを生成しようとしているときに、いくつかの問題が発生しています。それらを手伝ってくれませんか?
参照テーブル:
*create table entity
{
PID INT(20) auto inc not null,
ENTITYID INT(20) not null,
details VARCHAR(100) not null,
primary key(PID,ENTITYID)
}
create table user
{
USERID int(20) auto inc not null,
NAME VARCHAR(45) not null,
joindate DATETIME not null,
location VARCHAR(100) not null,
primary key(USERID,NAME) not null
}*
Referencing table:
*create table C
{
ENTITYID INT(20) not null,
NAME VARCHAR(45) not null,
foreign key ENTITYID_C constraint ENTITYID references entity(ENTITYID) on delete cascade,
foreign key name_C constraint NAME references user(NAME) on delete cascade,
primary key(ENTITYID,NAME)
}*
対応するエンティティまたは対応するユーザーが削除されたときに C のエントリを削除する必要があるため、テーブル C に 2 つの外部キーが必要です。
テーブル CI を作成しようとすると、次のエラーが発生します: ERROR 1005: Can't create table (errno: 150)。これは、mysql 仕様に定められたルールを順守していないためだと思われます。 http://dev.mysql.com/doc/refman/5.4/en/innodb-foreign-key-constraints.html
仕様の以下の部分/ルールはどういう意味ですか?
「InnoDB では、外部キーのチェックが高速になり、テーブル スキャンが不要になるように、外部キーと参照キーのインデックスが必要です。参照テーブルには、外部キー列が最初の列として同じ順序でリストされているインデックスが必要です。 ."
テーブル C の外部キーは、エンティティ テーブルとユーザー テーブルの主キーに対応する必要があるということですか。エンティティ テーブルの ENTITYID が主キーの最初であり、ユーザー テーブルの NAME が主キーの最初である必要があります。つまり、主キーの宣言を次のように書き直す必要がありますか?
entity table --> primary key(ENTITYID,PID) ,
user table --> primary key(NAME,USERID)
その場合、上記のようにキー宣言を並べ替えようとすると、エラー 1075 が発生します。
自動インクリメント キー (サロゲート キー) をインデックス順リストの 2 番目にして、仕様に準拠するにはどうすればよいですか?
ありがとうございました !