【问题标题】:Add mysql unique constraints to apply to entries within a certain date添加mysql唯一约束以应用于特定日期内的条目
【发布时间】:2020-12-07 10:59:45
【问题描述】:

我正在尝试向 mysql 表添加约束,但是我希望此约束仅适用于某个日期之后的条目。即约束适用于 '2020-01-01 00:00:00' 之后而不是之前的所有条目。

这是正在使用的查询,如果可能,我如何添加时间检查。谢谢

ALTER TABLE table_name ADD UNIQUE unique_index(col1, col2, col3) ;

【问题讨论】:

    标签: mysql database mariadb


    【解决方案1】:
    CREATE TABLE tablename ( 
        entityvalue DATATYPE,
        entitydate DATETIME,
        additional_column DATATYPE AS (CASE WHEN entitydate >= '2020-01-01 00:00:00'
                                            THEN {constraintexpression}
                                            ELSE NULL END),
        UNIQUE (additional_column) );
    

    如果达到实体检查日期,则将生成的列分配给要约束的表达式(例如,唯一的),否则为 NULL。然后它用于 UNIQUE 约束 - NULL 为之前的任何值和之后的约束表达式提供唯一性。

    如果版本允许,则附加列可能是 VIRTUAL。


    或者使用简化版:

    CREATE TABLE tablename ( 
        entityvalue DATATYPE,
        entitydate DATETIME,
        additional_column DATATYPE AS (CASE WHEN entitydate >= '2020-01-01 00:00:00'
                                            THEN entityvalue
                                            ELSE NULL END),
        UNIQUE ( additional_column ) );
    

    日期之前的行为 NULL,禁止唯一性检查。

    DEMO

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-30
      • 1970-01-01
      • 1970-01-01
      • 2020-04-21
      • 1970-01-01
      相关资源
      最近更新 更多