我有一个 MySQL 数据库,我想添加一列:
MariaDB [(none)]> use myDatabase;
Database changed
MariaDB [myDatabase]>
ALTER TABLE material add new_column FLOAT;
但我收到以下错误:
ERROR 1054 (42S22): Unknown column '`myDatabase`.`m`.`existing_column`' in 'CHECK'
果然,existing_column
在表material
中:
MariaDB [myDatabase]> describe material;
+------------------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| existing_column | tinyint(1) | YES | | NULL | |
+------------------------------+--------------+------+-----+---------+----------------+
42 rows in set (0.003 sec)
(为了清楚起见,我省略了其他列)
并且存在 CHECK 约束:
MariaDB [myDatabase]> SELECT * FROM INFORMATION_SCHEMA.CHECK_CONSTRAINTS WHERE `TABLE_NAME` = "material";
+--------------------+-------------------+------------+-----------------+-------------------------------------+
| CONSTRAINT_CATALOG | CONSTRAINT_SCHEMA | TABLE_NAME | CONSTRAINT_NAME | CHECK_CLAUSE |
+--------------------+-------------------+------------+-----------------+-------------------------------------+
| def | myDatabase | material | CONSTRAINT_1 | `existing_column` in (0,1) |
+--------------------+-------------------+------------+-----------------+-------------------------------------+
2 rows in set (0.007 sec)
我已经尝试过:
- 确保
existing_column
中的所有值均为 0 或 1 -> 没有变化 - 删除 CHECK -> 当我尝试时,我遇到了同样的错误:
MariaDB [myDatabase]> alter table material drop constraint CONSTRAINT_1;
ERROR 1054 (42S22): Unknown column '`myDatabase`.`m`.`existing_column`' in 'CHECK'
- 制作 sqldump 并将其导入到另一个系统上 -> 没有错误,我可以添加我的列!
上下文:
- 我在 Debian 10 上使用 mysql 10.3.29
- 我通常使用 flask-sqlalchemy和 flask-migrate用于管理迁移。这就是我最初收到错误的地方。
- 我真的不需要 CHECK 约束。 Sqlalchemy 自动添加
最佳答案
将此问题链接到此处,因为它很相似:MariaDB: ALTER TABLE command works on one table, but not the other
我在 Debian 上运行 MariaDB:10.5.10-MariaDB-1:10.5.10+maria~buster
我可以将架构应用到其他数据库,但我被困在一个不断引发相同错误的表上:
ERROR 1054 (42S22): Unknown column '`database`.`table`.`col`' in 'CHECK'
将 MariaDB 更新到 10.5.15
允许我应用该架构。它可能只需要重新启动 - 但现在不可能知道。
关于MySQL CHECK 中的未知列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71193045/