Shopware 6迁移报错:外键约束格式错误求助
迁移命令执行报错:外键约束格式错误
问题详情
执行迁移命令 ./bin/console database:migrate 时触发以下错误:
Migration error: An exception occurred while executing 'CREATE TABLE IF NOT EXISTS `a1filter_property_group_option_tag` ( `option_id` binary(16) NOT NULL, `tag_id` binary(16) NOT NULL, `created_at` datetime(3) NOT NULL, `updated_at` datetime(3) DEFAULT NULL, PRIMARY KEY (`option_id`, `tag_id`), CONSTRAINT `fk.a1filter_property_group_option_tag.tag_id` FOREIGN KEY ( `tag_id`) REFERENCES `tag` (`id`) ON DELETE SET NULL ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;': SQLSTATE[HY000]: General error: 1005 Can't create table `devxxx_yyy`.`a1filter_property_group_option_tag` (errno: 150 "Foreign key constraint is incorrectly formed")
解决建议
- 修正字段约束冲突:当前
tag_id被设为NOT NULL,但外键规则用了ON DELETE SET NULL——当关联的tag记录被删除时,数据库无法将非空字段设为NULL,这是核心矛盾。二选一解决:要么把tag_id改为binary(16) DEFAULT NULL,要么把外键的ON DELETE改为CASCADE(同步删除关联记录)或RESTRICT(阻止删除关联tag)。 - 校验关联字段匹配性:检查
tag表的id字段是否为binary(16)类型,同时确保两张表的字符集、存储引擎完全一致。InnoDB要求外键字段与关联字段的类型、长度、字符集必须严格匹配。 - 验证关联表的键类型:确认
tag表的id是主键或唯一索引,InnoDB不允许外键关联到非唯一的普通字段。 - 查看详细错误日志:执行
SHOW ENGINE INNODB STATUS;命令,在输出的LATEST FOREIGN KEY ERROR段落中可获取更具体的错误细节,快速定位问题。
内容的提问来源于stack exchange,提问作者Stacker1427
相关产品推荐
相关产品推荐

