我有一个包含2个日期列的表,open_date和close_date。当我插入一个新行时,close_date可以为null。但是将来我会想要更新close_date,我想确保close_date比open_date更大? 感谢名单
我正在使用oracle ......
答案 0 :(得分:1)
这样的check constraint会问你问:
ALTER TABLE YourTable ADD CONSTRAINT CK_open_date_before_close_date
CHECK (open_date < close_date);
这将拒绝将表更新为违反条件的状态的任何事务。例如,如果您更新了5行但只有其中一行违反了约束,则整个更新将失败。
此外,对于开放式结束日期,我建议您使用NULL
的标记值,而不是99991231
。这有很多原因,其中最重要的是查询性能(因此您可以在不需要OR IS NULL
子句的情况下执行简单的不等式语句)。然后,您可以另外创建列NOT NULL
并简化上述检查条件。这也会对前端应用程序代码产生积极影响。
<强>更新强>
检查约束中不需要OR close_date IS NULL
,因为如果close_date
为NULL
,整个表达式将被评估为NULL
,这不会违反CHECK
约束。
答案 1 :(得分:1)
您可以添加检查约束以确保Close_date大于Open_Date,
ALTER TABLE Table_Name
ADD CONSTRAINT ck_Con_Name CHECK (Close_date > Open_Date)
为了确保为Close_Date列提供一个值而不是为null,请将列设置为NON-NULABLE。
为此,您需要确保该列中没有任何NULL值。将列更新为某些defualt值。然后改变表定义像这样......
ALTER TABLE Table_Name
ALTER COLUMN Close_date DATETIME NOT NULL;
答案 2 :(得分:-1)
您可能需要CHECK
约束。
请参阅link