MySQL-外键约束中出错。无法创建外键
我对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)未签名
如果用户不存在,则创建表(
`用户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)
应该无关紧要,它不影响实际的数据类型。