我正在开发一个规范化的数据库,为了安全起见,我想使用外键。
我的数据库:
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 ;
回应(错误):
在名称上创建外键时出错(检查数据类型)
那么,如何解决这个问题?
答案 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`)