0

MESSAGE_MAP表MySQLのエラー番号:150「外部キー制約が間違って形成されている」 - 私は、外部キー制約を適用するには、クエリの下にしようとしたMariaDB

CREATE TABLE `message_map` (
     `message_from` varchar(15) NOT NULL, 
     `message_id` varchar(15) NOT NULL, 
     `message_to` varchar(15) NOT NULL, 
     `message_status` bit(1) DEFAULT NULL 
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 
    ALTER TABLE `message_map` 
    ADD PRIMARY KEY (`message_from`,`message_id`,`message_to`), 
    ADD KEY `FK_ij6tystusydqijqp8lgoigo1c` (`message_id`), 

ユーザテーブル

CREATE TABLE `user` (
     `USER_ID` varchar(15) NOT NULL, 
     `PASSWORD` varchar(15) DEFAULT NULL, 
     `PHONE_NUMBER` varchar(15) DEFAULT NULL, 
     `USER_NAME` varchar(15) DEFAULT NULL, 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
    ALTER TABLE `user` 
    ADD PRIMARY KEY (`USER_ID`), 
    ADD UNIQUE KEY `USER_ID_UNIQUE` (`USER_ID`); 

ALTER TABLE `demo`.`message_map` 
ADD CONSTRAINT `FK_MSG_MAP_USER` 
    FOREIGN KEY (`message_from`) 
    REFERENCES `demo`.`user` (`USER_ID`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE, 
ADD CONSTRAINT `FK_MSG_MAP_USER_TO` 
    FOREIGN KEY (`message_to`) 
    REFERENCES `demo`.`user` (`USER_ID`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE; 

イム次のエラーに

ERROR 1005を取得:テーブル<shema>を作成できません。 #sql-1964_4(エラー番号:150> "外部キー制約が間違って形成されている")

私の観察は

列(message_from、message_to)とUSER_IDのデータ型が同じ あります。また、USER_IDは主キーです。

質問

は、何が間違っていたのですか?

はテストにそれは少し面倒になり、あなたのコード内のエラーの数がある

+0

3列の主キー? – Riad

+1

投稿したコードにエラーがあります。 –

+0

'PRIMARY KEY'は' UNIQUE'キーです。後者を取り除く。冗長です。 –

答えて

1

まず答えをいただき、ありがとうございます。第二に、あなたは両方のテーブルに同じ文字セットを使用してください、私はUTF8にmessage_map変更:

DROP TABLE message_map; 
CREATE TABLE message_map (
    message_from varchar(15) NOT NULL, 
    message_id varchar(15) NOT NULL, 
    message_to varchar(15) NOT NULL, 
    message_status bit(1) DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

ALTER TABLE message_map 
    ADD PRIMARY KEY (message_from,message_id,message_to), 
    ADD KEY FK_ij6tystusydqijqp8lgoigo1c (message_id); 

ALTER TABLE message_map 
    ADD CONSTRAINT FK_MSG_MAP_USER 
    FOREIGN KEY (message_from) 
     REFERENCES user (USER_ID) 
      ON DELETE CASCADE 
      ON UPDATE CASCADE, 
    ADD CONSTRAINT FK_MSG_MAP_USER_TO 
    FOREIGN KEY (message_to) 
     REFERENCES user (USER_ID) 
      ON DELETE CASCADE 
      ON UPDATE CASCADE; 

私は外部キー定義からデモを削除しました。