这是触发错误的最小示例
CREATE TABLE A (
id bigint NOT NULL AUTO_INCREMENT PRIMARY KEY
);
CREATE TABLE B (
what tinyint NOT NULL,
a bigint NOT NULL,
CONSTRAINT x FOREIGN KEY (a) REFERENCES A(id),
CONSTRAINT y CHECK (what > 0)
);
SELECT b.a FROM B b;
ALTER TABLE B DROP CONSTRAINT x;
当我在一个新的 MariaDB 实例(docker mariadb:10.3.28)中运行它时,一切正常。
当 MariaDB 10.3.29 发布时,查询突然中断。因此,当我在新的 MariaDB 实例(docker mariadb:10.3.29)中运行它时,我收到最后一条语句的以下错误消息:
[42S22][1054] (conn=8) Unknown column '`db`.`b`.`what`' in 'CHECK'
一些奇怪的观察:
- 如果我删除检查并在删除一切正常
y
后添加它x
- 如果我删除
SELECT
一切正常 - 错误消息中的
b
from 会随着SELECT
语句中的表别名而变化 - 再次运行最后一条语句显示相同的错误
- 错误消息根本没有意义
所以我的问题是:我的 SQL 有什么问题?
这实际上是 MariaDB 中的一个错误。请参阅错误跟踪器。
他们建议做
FLUSH TABLES;
之前的ALTER
声明。我可以确认这“隐藏了错误”。