在 MySQL 中使用 CHECK 和 LIKE?

时间:2021-03-30 12:06:07

标签: mysql check-constraints

我是 mysql 的新手,我的问题是这是正确的吗?

CREATE TABLE ... (
    /* some definition ommitted. */
    About varchar(300) NOT NULL DEFAULT '...',
    CHECK(About LIKE 'ABOUT: %, DATE: %')
);

通过搜索,所有结果都在 LIKE 中显示 SELECT,那么在 CHECK 中使用在语法上是否正确?

1 个答案:

答案 0 :(得分:0)

是的,语法上没问题。

但有两点:

  1. 请注意,在 8.0.16 版本以下,MySQL 确实接受表 DDL 中的检查约束,但不强制执行检查约束。所以就好像他们根本不在那里一样。

    您应该检查这是否适用于您的版本。

  2. 更重要的是,您似乎犯了一个错误,违反了第一范式。

    这里似乎有两个属性,某种文字描述和某个时间点。那应该是两个不同的列。

    不要将它们的值放在一个大的文本列中!

    否则我保证你以后会很头疼:

    • 每次您想查询这两个属性之一时,您首先需要解析整个文本。
    • 您无法创建任何有助于提高性能的有用索引。
    • 更新一个属性意味着在正确的位置更改整个文本,而不仅仅是属性本身。
    • 等等等等...