MySQL CHECK 中的未知列

标签 mysql mariadb flask-sqlalchemy flask-migrate

我有一个 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-sqlalchemyflask-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/

相关文章:

python - 从 Flask-SQLAlchemy 获取 UTC 格式的日期时间字段

php - 为什么 tcpdf 库从循环中输出一条记录?

php - PHP 进行一些查询后,MySQL 数据库中的条目发生变化

php - 我在 Android 中将 JSON 对象解析为 String 时出错

database - 多主到单从复制

python - 蒸馏器迁移误差 flask

mysql - Union 和 join 子句返回重复值

php - 如何使用 PHP 7 和 MySQL 将文件从 POST 插入到 longblob 列中?

mysql - csv导入没有导入行

python - SQLAlchemy 如何使用 timezone=UTC 加载日期(没有时区存储的日期)