首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Django CheckConstraint不能在MySQL上工作

问为什么Django CheckConstraint不能在MySQL上工作
EN

Stack Overflow用户
提问于 2019-08-23 18:31:02
回答 1查看 734关注 0票数 2

当我创建一个具有约束的类时,如下所示:

代码语言:javascript
复制
constraints = [
    models.CheckConstraint(
            check=models.Q('plan' == 1),
            name="custom_constraint"
        )
]

我收到这样的信息:

代码语言:javascript
复制
(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?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-23 18:41:32

根据MySQL文档,CHECK约束在8.0.16之前被MySQL数据库忽略:

在CHECK 8.0.16之前,CREATE TABLE只允许表MySQL约束语法的以下有限版本,该约束语法被解析和忽略**: 检查(费用) 从CHECK constraints,8.0.16到,CREATE TABLE允许为所有存储引擎提供表和列CREATE TABLE的核心特性。CREATE TABLE允许对表约束和列约束都使用以下CHECK约束语法: [约束符号]检查(费用)[未强制执行]

因此,在8.0.16之前,确实解析了CHECK约束,但是数据库引擎忽略了它,因此数据可能会违反这些约束。

然而,一些特定的约束(如NOT NULL、UNIQUE和FOREIGN KEY )是强制的,但不是泛型约束(比如应该具有特定值的列)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57631395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档