【发布时间】:2013-07-10 23:06:07
【问题描述】:
我正在使用 MySQL 5 来尝试创建两个表。这是两张表:
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;
当我尝试执行此语句时,创建了 users 表,但随后出现错误:
Error Code: 1005
Can't create table 'dental.authorities' (errno: 150)
当两个引用的列相同时,我不明白为什么这个外键会失败。有没有
【问题讨论】:
-
这对我来说成功构建:sqlfiddle.com/#!2/1e9acf 并且看起来不错。您使用的是什么 MySQL 版本? (只要先创建
users) -
你为什么使用 varchar 外键而不是 if?使用 varchar 字段作为主键是个坏主意
-
你查过类似问题的cmets吗:stackoverflow.com/questions/1457305/…
-
@demonofnight:varchar 主键本质上没有什么“错误”。或使用小数、字符、浮点数、日期或时间戳主键。
标签: mysql