我很好奇是否有可能sql中创建条件非null约束?换句话说,只要能创造约束,就能创造约束吗?A列包含“9 {! x& E0 N+ [! y8 A% ?5 n. K
NEW”,那么B列可以是空的,但如果是A列的内容改为其他内容,然后B列不再允许空?/ F f! Z! o; t! W1 ?
扩展这一点,然后保持不变,只要A列说“ NEW”,B列必须是空的还是空的? 3 u Q% ~6 ~& [7 Y谢谢大家:D : M l4 k; F6 K $ B g4 R/ D9 `! C0 a& q" s 解决方案: 2 n7 m0 F9 V/ _" ~: T3 I8 E
这对于CONSTRAINT CHECK非常合适。只需执行以下操作:: |& E* V8 y# O, p$ C6 ]
要求: - U9 k/ |0 G: s8 P; @% h是否有可能创造一个约束,只要A列包含长行 NEW”,B列可以是空的,但如果是A列的内容改为其他内容,然后B列就不再允许Null? 6 L+ ^0 K* F4 z+ y! u& B; x请注意以下短语:B列 可以 为空+ w1 e1 D! z% }
解决方案: }- M8 _. [5 F8 A* M' v# t. q9 v! T
create table tbl( A varchar(10) not null, B varchar constraint uk_tbl check ( A = 'NEW' -- B can be null or not null: no need to add AND here OR (A 'NEW' AND B IS NOT NULL) );可以进一步简化:" T/ J& n8 n8 ?$ a4 X
create table tbl( A varchar(10) not null, B varchar constraint uk_tbl check ( A = 'NEW OR B IS NOT NULL );矛盾的要求与上述要求不符: ( w: y, e, k3 P* I扩展这一点,然后保持不变,只要A列说“ NEW”,B列必须是空的还是空的? 3 ?) T! w5 K: T1 E: J$ o7 {请注意以下短语:B列 必须 为空/ ]' n; v* r: P Z4 c, p+ G
create table tbl( A varchar(10) not null, B varchar constraint uk_tbl check ( (A = 'NEW' AND B IS NULL) OR A 'NEW);它可以通过以下方式简化,但可能不如上述可读性: 5 L$ ^9 [0 s) k0 G# }6 {+ f, dcreate table tbl( A varchar(10) not null, B varchar constraint uk_tbl check ( A 'NEW OR B IS NULL );