我已经为角色、用户及其关系创建了表,因为users_roles.But表是完全空的,所以我没有得到任何错误。我可以在user_roles表中看到条目。为什么会这样呢?
CREATE TABLE IF NOT EXISTS role
(
id INT(11) NOT NULL AUTO_INCREMENT,
roleName VARCHAR(45) DEFAULT NULL,
PRIMARY KEY(id)
);
LOCK TABLES `role` WRITE;
ALTER TABLE `role` DISABLE KEYS ;
INSERT INTO `role` VALUES (1,'admin'),(2,'user');
ALTER TABLE `role` ENABLE KEYS ;
UNLOCK TABLES;
DROP TABLE IF EXISTS `user`;
CREATE TABLE IF NOT EXISTS `user` (
`username` varchar(45) DEFAULT NULL,
`password` varchar(100) DEFAULT NULL,
PRIMARY KEY (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `users_roles`;
CREATE TABLE `users_roles` (
`username` varchar(45) NOT NULL REFERENCES user(username),
`role_id` int(11) NOT NULL REFERENCES role(id),
PRIMARY KEY (`username`,`role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into users_roles values (1,1);发布于 2017-03-13 00:32:45
我总是用略微不同的语法创建外键,我从来没有见过你使用的方式。
DROP TABLE IF EXISTS `users_roles`;
CREATE TABLE `users_roles` (
`username` varchar(45) NOT NULL,
`role_id` int(11) NOT NULL ,
PRIMARY KEY (`username`,`role_id`),
FOREIGN KEY(role_id) REFERENCES role(id),
FOREIGN KEY(username) REFERENCES user(username)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;正如您在这里看到的:http://www.sqlfiddle.com/#!9/16224c,这种创建外键的方式是有效的。
发布于 2017-03-13 00:43:55
https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html
您在users_roles.The引用部分中遗漏了外键,它应该在外键上,而不是列上。
发布于 2017-03-13 01:13:56
忽略column_definition部件中的外键定义。
重要
。。
MySQL解析但忽略“内联引用规范”(定义在SQL标准中),其中引用被定义为列规范的一部分。仅当作为单独的外键规范的一部分指定时,MySQL才接受引用子句。
点击此处:
https://stackoverflow.com/questions/42749906
复制相似问题