我很好奇是否有可能sql中创建条件非null约束?换句话说,只要能创造约束,就能创造约束吗?A列包含“ I7 w4 K, L& I3 b M- d, O
NEW”,那么B列可以是空的,但如果是A列的内容改为其他内容,然后B列不再允许空? : F2 b/ p: Z, l扩展这一点,然后保持不变,只要A列说“ NEW”,B列必须是空的还是空的?6 I0 R8 }6 u. d
谢谢大家:D + f0 W5 E0 O/ ?0 G$ e+ ~$ G 0 x8 B6 {$ ]1 _7 H0 }解决方案: 2 ]' @% z9 e; ?. }7 t
这对于CONSTRAINT CHECK非常合适。只需执行以下操作:9 ^/ ~% E. r$ m
要求:1 C n. V; A8 H0 c" B' x9 ^
是否有可能创造一个约束,只要A列包含长行 NEW”,B列可以是空的,但如果是A列的内容改为其他内容,然后B列就不再允许Null? j( `! N1 G7 h% f/ c
请注意以下短语:B列 可以 为空" w+ }( A# P+ k8 R# P2 n3 o6 S% v
解决方案: # I1 @7 N/ s3 `" B8 G7 d+ wcreate 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) );可以进一步简化: 3 f5 c- P# o/ M5 z; Ycreate table tbl( A varchar(10) not null, B varchar constraint uk_tbl check ( A = 'NEW OR B IS NOT NULL );矛盾的要求与上述要求不符: + M8 j# R. O% i2 {扩展这一点,然后保持不变,只要A列说“ NEW”,B列必须是空的还是空的?8 J, H: y4 I. w/ Z2 L
请注意以下短语:B列 必须 为空 % M3 m! c0 |$ s9 T. Fcreate table tbl( A varchar(10) not null, B varchar constraint uk_tbl check ( (A = 'NEW' AND B IS NULL) OR A 'NEW);它可以通过以下方式简化,但可能不如上述可读性:! \9 h! i* [3 x6 v. Q
create table tbl( A varchar(10) not null, B varchar constraint uk_tbl check ( A 'NEW OR B IS NULL );