【发布时间】: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 表添加约束,但是我希望此约束仅适用于某个日期之后的条目。即约束适用于 '2020-01-01 00:00:00' 之后而不是之前的所有条目。
这是正在使用的查询,如果可能,我如何添加时间检查。谢谢
ALTER TABLE table_name ADD UNIQUE unique_index(col1, col2, col3) ;
【问题讨论】:
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,禁止唯一性检查。
【讨论】: