Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-外键约束中出错。无法创建外键_Mysql_Foreign Keys_Primary Key - Fatal编程技术网

MySQL-外键约束中出错。无法创建外键

MySQL-外键约束中出错。无法创建外键,mysql,foreign-keys,primary-key,Mysql,Foreign Keys,Primary Key,我对MySQL中的外键有一个问题,我真的很困惑为什么它不起作用 我有以下表格: 如果用户不存在,则创建表( `用户id`INT非空自动增量主键, `用户名'VARCHAR(30)不为空, `电子邮件'VARCHAR(50)不为空, `密码`CHAR(128)不为空 唯一索引唯一用户(用户名、电子邮件) )引擎=InnoDB; 如果不存在角色,则创建表( 角色id整数无符号非空自动增量主键, 角色名称VARCHAR(50)不为空 ); 如果不存在用户角色,则创建表( 用户id INT(11)未签名

我对MySQL中的外键有一个问题,我真的很困惑为什么它不起作用

我有以下表格:

如果用户不存在,则创建表(
`用户id`INT非空自动增量主键,
`用户名'VARCHAR(30)不为空,
`电子邮件'VARCHAR(50)不为空,
`密码`CHAR(128)不为空
唯一索引唯一用户(用户名、电子邮件)
)引擎=InnoDB;
如果不存在角色,则创建表(
角色id整数无符号非空自动增量主键,
角色名称VARCHAR(50)不为空
);
如果不存在用户角色,则创建表(
用户id INT(11)未签名非空,
角色_id INT(11)无符号非空,
外键(用户id)引用用户(用户id)
外键(角色id)引用角色(角色id)
)引擎=InnoDB;
可以创建角色\u id的外键,但用户\u id有问题,出现以下错误:

表用户角色的外键约束中出现错误: 外键(用户id)引用用户(用户id): 在引用的表中找不到 引用的列显示为第一列或列类型 表中的约束与引用的表中的约束不匹配。 请注意,枚举和集合的内部存储类型在中发生了更改 使用>=InnoDB-4.1.12创建的表,以及旧表中的此类列 无法被新表中的此类列引用。


有人能告诉我,我做错了什么吗?

user\u role。user\u id
INT UNSIGNED
,但是
用户。user\u id
只是
INT
。它们必须是相同的数据类型。将
user\u role.user\u id
更改为
INT
,或将
users.user\u id
更改为
INT UNSIGNED

在所有表中使用
integer
作为id的类型,而不是在某些表中使用
INT(11)
(或反之亦然)。@stickybit
(11)
应该无关紧要,它不影响实际的数据类型。