mysql errno150,mysql errno:150“外键约束不正确” - MariaDB

MESSAGE_MAP 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`),

USER TABLE

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

I tried below query to apply Foreign Key Constraint

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;

Im getting the following error

ERROR 1005: Can't create table .#sql-1964_4 (errno: 150 >"Foreign key constraint is incorrectly formed")

My Observation

The data type of the columns (message_from,message_to) and USER_ID are

the same. And also USER_ID is a primary key.

Question is

What went wrong?

Thank you for the answers

解决方案

First there are a number of errors in your code that makes it a bit cumbersome to test. Second, make sure you use the same charset in both tables, I changed message_map to 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;

I removed demo from the foreign key definition.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值