【发布时间】:2021-10-18 22:46:33
【问题描述】:
我遇到了一个奇怪的错误,生成的列和 MariaDB 在 Docker 容器中运行。
我使用的图片是mariadb:10。
我一直在尝试添加生成的列。我添加的第一列效果很好;我添加的第二个会使容器崩溃并破坏表。
这是第一列有效:
ALTER TABLE program
ADD is_current tinyint AS (
IF (
status IN ('active', 'suspended')
AND start_date >= NOW(),
1,
0
)
);
这个很好用。以下 SQL 使容器崩溃:
ALTER TABLE program
ADD is_covered tinyint AS (
IF (
status IN ('active', 'suspended')
AND start_date <= NOW(),
1,
0
)
);
重启容器后出现如下错误:
SELECT * FROM program;
[42S02][1932] 表“my_local.program”被标记为崩溃,应该修复
repair table my_local.program;
引擎中不存在表“my_local.program”/操作失败
按照this question 的指示,我检查了容器中是否存在ibdata1 文件。它存在,表的.ibd 和.rfm 文件也存在。
我无法解决这个问题;我不得不删除表并重新创建它并重新导入数据。
如果有人有任何建议,我很乐意听到。
【问题讨论】:
-
唯一的区别是
<=与>=? -
来自mariadb documentation: "
ALTER TABLE语句对生成列的支持有限。... - 它不支持使用ADD添加VIRTUAL生成列如果ALGORITHM未设置为COPY,则同一语句还添加其他列。有关更多信息,请参阅 MDEV-17468。" - 这可能相关吗? -
编辑将 MySQL 更改为 MariaDB。 MariaDB 于 2010 年从 MySQL 分叉出来,从那时起它一直在实现自己的代码。您应该将 MariaDB 视为与 MySQL 不同的数据库产品。在每个版本中引入的这两种产品之间存在越来越多的不兼容性。
-
select version();显示什么? -
@Barmar 是的,实际上我还想包含更多的逻辑,但在表格崩溃之前我没有做到这一点......
标签: docker mariadb generated-columns