当我创建一个具有约束的类时,如下所示:
constraints = [
models.CheckConstraint(
check=models.Q('plan' == 1),
name="custom_constraint"
)
]我收到这样的信息:
(models.W027) MySQL does not support check constraints.
HINT: A constraint won't be created. Silence this warning if you don't care about it.为什么Django CheckConstraints使用PostgreSQL而不是MySQL?
发布于 2019-08-23 18:41:32
根据MySQL文档,CHECK约束在8.0.16之前被MySQL数据库忽略:
在
CHECK8.0.16之前,CREATE TABLE只允许表MySQL约束语法的以下有限版本,该约束语法被解析和忽略**: 检查(费用) 从CHECKconstraints,8.0.16到,CREATE TABLE允许为所有存储引擎提供表和列CREATE TABLE的核心特性。CREATE TABLE允许对表约束和列约束都使用以下CHECK约束语法: [约束符号]检查(费用)[未强制执行]
因此,在8.0.16之前,确实解析了CHECK约束,但是数据库引擎忽略了它,因此数据可能会违反这些约束。
然而,一些特定的约束(如NOT NULL、UNIQUE和FOREIGN KEY )是强制的,但不是泛型约束(比如应该具有特定值的列)。
https://stackoverflow.com/questions/57631395
复制相似问题