MariaDB创建UserRole表报1005错误外键约束格式错误如何解决
错误根因
- 你定义的
RoleName表的id字段未设置主键/唯一索引,MariaDB要求外键关联的父表字段必须具备有效索引,仅设置not null属性无法满足外键约束的创建要求。 - 可选排查点:如果父表使用了不支持外键的存储引擎(如MyISAM),也会触发该报错,可执行
show create table 表名语句检查存储引擎是否为InnoDB。
解决方案
给RoleName表的id字段添加主键约束即可,也可根据业务需要给UserRole表的外键字段增加not null约束避免存储无效空值,修正后的完整SQL如下:
create table if not exists RoleName ( id varchar(24) not null, constraint rolename_pk primary key (id) -- 新增主键约束,满足外键关联要求 ); create table if not exists Usr ( id integer auto_increment, email varchar(48) not null, usr_name varchar(48), is_active bool default false, constraint usr_pk primary key (id) ); create table if not exists UserRole ( usr_id integer not null, usr_role varchar(24) not null, constraint usr_role_fk foreign key (usr_id) references Usr(id), constraint usr_role_role_fk foreign key (usr_role) references RoleName(id) );
如果需要保留原有外键命名,修改RoleName表结构后直接执行原UserRole建表语句即可。
内容的提问来源于stack exchange,提问作者AndaluZ
相关产品推荐
相关产品推荐

