我正在使用MySQL 5来尝试创建两个表。这里有两个表:为什么MySQL不允许这个外键?
DROP TABLE IF EXISTS `users` ;
CREATE TABLE IF NOT EXISTS `users` (
`username` VARCHAR(50) not null ,
`password` VARCHAR(50) not null,
`enabled` boolean not null,
`accountNonExpired` boolean not null,
`accountNonLocked` boolean not null,
`credentialsNonExpired` boolean not null,
PRIMARY KEY (`username`)
) ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;
DROP TABLE IF EXISTS `authorities` ;
create table IF NOT EXISTS `authorities` (
`username` VARCHAR(50) not null ,
`authority` varchar(50) not null,
foreign key (`username`) references `users` (`username`),
unique index authorities_idx_1 (username, authority)
) engine = InnoDb;
当我尝试执行该语句,创建用户表,但后来我得到的错误:
Error Code: 1005
Can't create table 'dental.authorities' (errno: 150)
我没有看到为什么这个外键时失败两个引用的列是相同的。取决于你的服务器版本,并设置有
这为我成功建立:http://sqlfiddle.com/#!2/1e9acf,看起来不错。你使用的是什么MySQL版本? (只要'用户'是首先创建的) –
为什么使用varchar外键而不是if? 使用varchar字段作为主键是一个坏想法 – Lefsler
你检查了类似问题的意见:http://stackoverflow.com/questions/1457305/mysql-creating-tables-with-foreign-keys-giving- errno-150?rq = 1 – Kaffee