MySQL CONCAT_WS无法使用外键

MySQL CONCAT_WS not working with foreign keys

提问人:Connor Gyde 提问时间:11/7/2023 最后编辑:Connor Gyde 更新时间:11/7/2023 访问量:56

问:

我正在生成一个标识符列,以便对订阅进行分组。列的值用于连接表中的不同列值。但是,我在尝试更改表格时出现错误:CONCAT_WS

Database error code: 1215

Database error: Cannot add foreign key constraint

下面是有问题的查询。请注意,和是外键:organisation_idorder_id

ALTER TABLE `subscriptions`
ADD COLUMN `identifier` VARCHAR(191) GENERATED ALWAYS AS (
    CONCAT_WS('-', `organisation_id`, `is_trial`, `start_date`, `end_date`, `order_id`, `superseded_date`)
) STORED;

我尝试了 和 ,以及从查询中删除外键。当我在串联中未包含外键时,没有错误。CONCATCONCAT_WS

SQL MySQL 串联

评论

0赞 Bill Karwin 11/7/2023
请运行并告诉我们它报告的内容。SELECT VERSION();
0赞 Connor Gyde 11/7/2023
MySQL版本为8.0.33
1赞 Bill Karwin 11/7/2023
在这个 Dbfiddle 中,它似乎在 8.0.30 上工作正常:dbfiddle.uk/QhbFE3on 我在本地实例 8.2.0 上测试了它,它也工作正常。你能看一下 Dbfiddle 并澄清是否有任何不同吗?我不得不做出一些假设。
1赞 user1191247 11/7/2023
旧错误报告
1赞 Barmar 11/7/2023
@BillKarwin 当外键具有 .查看 dbfiddle.uk/l8UeFgQtON DELETE CASCADE

答:

2赞 Barmar 11/7/2023 #1

这是一个已知的限制。文档说:

存储的生成列的基列上的外键约束不能将 CASCADE、SET NULL 或 SET DEFAULT 用作 ON UPDATE 或 ON DELETE 引用操作。

您的解决方法似乎是:

  • 删除外键约束。
  • 删除外键的 和 选项。ON UPDATEON DELETE
  • 删除生成的列的选项。STORED

评论

0赞 Connor Gyde 11/7/2023
谢谢你,我会尝试这些。