Mysql SQL外键约束未失败
我已经为角色、用户及其关系用户创建了表。但是我没有收到任何错误,因为用户表是完全空的。我可以在用户角色表中看到条目。为什么会这样Mysql SQL外键约束未失败,mysql,sql,Mysql,Sql,我已经为角色、用户及其关系用户创建了表。但是我没有收到任何错误,因为用户表是完全空的。我可以在用户角色表中看到条目。为什么会这样 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`
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);
我总是用稍微不同的语法创建外键,我从来没有见过你使用它的方式
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;
正如您在这里看到的:,这种创建外键的方法很有效。
用户角色中缺少外键。引用部分应位于外键上,如Dave所示,而不是列上。列定义部分中的外键定义将被忽略 重要 [……] MySQL解析但忽略“内联引用规范”(如 在SQL标准中定义),其中引用被定义为 列规范的一部分。MySQL只接受REFERENCES子句 当指定为单独外键规范的一部分时
在这里找到:这里有一个SQL提琴:。我发现这很奇怪。表user中的user\u id在哪里,然后表users\u角色有主键(
user\u id
,role\u id
)?运行show create table users\u roles
)。你会看到,没有FK。