首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL外键约束没有失败

问SQL外键约束没有失败
EN

Stack Overflow用户
提问于 2017-03-13 00:26:28
回答 3查看 58关注 0票数 0

我已经为角色、用户及其关系创建了表,因为users_roles.But表是完全空的,所以我没有得到任何错误。我可以在user_roles表中看到条目。为什么会这样呢?

代码语言:javascript
复制
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);
EN

回答 3

Stack Overflow用户

发布于 2017-03-13 00:32:45

我总是用略微不同的语法创建外键,我从来没有见过你使用的方式。

代码语言:javascript
复制
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,这种创建外键的方式是有效的。

票数 0
EN

Stack Overflow用户

发布于 2017-03-13 00:43:55

https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html

您在users_roles.The引用部分中遗漏了外键,它应该在外键上,而不是列上。

票数 0
EN

Stack Overflow用户

发布于 2017-03-13 01:13:56

忽略column_definition部件中的外键定义。

重要

。。

MySQL解析但忽略“内联引用规范”(定义在SQL标准中),其中引用被定义为列规范的一部分。仅当作为单独的外键规范的一部分指定时,MySQL才接受引用子句。

点击此处:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42749906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档