mysql错误:150“外键约束形成错误” - MariaDB

时间:2016-12-28 12:08:03

标签: mysql mariadb foreign-key-relationship mysql-error-1005

MESSAGE_MAP表

$('#slider span')

USER TABLE

    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`);

我收到以下错误

  

错误1005:无法创建表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; <shema>(错误:150&gt;&#34;外键约束形成错误&#34;)

我的观察

  

列的数据类型(message_from,message_to)和USER_ID是   相同。而USER_ID也是主键。

问题

出了什么问题?

感谢您的回答

1 个答案:

答案 0 :(得分:1)

首先,您的代码中存在许多错误,这使得测试时有点麻烦。其次,确保在两个表中使用相同的字符集,我将message_map更改为utf8:

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;

我从外键定义中删除了演示。