MySQL外键ON DELETE SET NULL检查数据类型错误

时间:2013-09-14 23:31:22

标签: mysql sql innodb

我正在开发一个规范化的数据库,为了安全起见,我想使用外键。

我的数据库:

CREATE TABLE `names` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(250) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`),
  KEY `name_2` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `name_id` (`name_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

命令:

ALTER TABLE  `names` ADD FOREIGN KEY (  `name` ) REFERENCES  `temp`.`users` (
`name_id`
) ON DELETE SET NULL ON UPDATE CASCADE ;

回应(错误):
在名称上创建外键时出错(检查数据类型)

那么,如何解决这个问题?

2 个答案:

答案 0 :(得分:15)

错误是不言自明的。 Name表中的names类型为varchar(250),而name_id表中的users类型为int(11)

但我相信你的意思是在引用users表的names表中一直有一个FK。

ALTER TABLE users
ADD FOREIGN KEY (name_id) REFERENCES names (id) 
  ON DELETE SET NULL ON UPDATE CASCADE; 

这是 SQLFiddle 演示

答案 1 :(得分:0)

两个键必须是相同的类型和长度,你有varchar和int。

这是你想要的:

ALTER TABLE  `names` ADD FOREIGN KEY (  `id` ) REFERENCES  `users` (
`name_id`)