我很好奇是否有可能sql中创建条件非null约束?换句话说,只要能创造约束,就能创造约束吗?A列包含“ ( j _' B) r i$ Z5 W. C8 zNEW”,那么B列可以是空的,但如果是A列的内容改为其他内容,然后B列不再允许空?% m9 j8 h$ N z* Q* g5 N
扩展这一点,然后保持不变,只要A列说“ NEW”,B列必须是空的还是空的? h* Y5 E: i' |, _ h7 G谢谢大家:D ( T Q' |/ \5 h9 R4 v * H( \$ I& w' ~9 \ e, W2 `+ ~ 解决方案: : B7 y5 J0 @# A) ?4 K3 Y 这对于CONSTRAINT CHECK非常合适。只需执行以下操作:- _% G3 z# Z% Y4 m* p/ T
要求: 3 k% i3 G# B, z, d+ G* a% v是否有可能创造一个约束,只要A列包含长行 NEW”,B列可以是空的,但如果是A列的内容改为其他内容,然后B列就不再允许Null? , F% v* X; e" n5 N请注意以下短语:B列 可以 为空 3 W# B% I5 o7 ^7 i @1 E6 L T+ u$ F7 N解决方案: & r2 y, H5 S' {- q" H7 hcreate 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) );可以进一步简化: 4 b) b! ?" d9 S7 d0 Acreate table tbl( A varchar(10) not null, B varchar constraint uk_tbl check ( A = 'NEW OR B IS NOT NULL );矛盾的要求与上述要求不符: ) }% q" o8 p" c1 f0 @扩展这一点,然后保持不变,只要A列说“ NEW”,B列必须是空的还是空的?$ M1 p1 c# p8 T% @- P; z3 L
请注意以下短语:B列 必须 为空$ Z/ m' z: [& [- E! u) y
create table tbl( A varchar(10) not null, B varchar constraint uk_tbl check ( (A = 'NEW' AND B IS NULL) OR A 'NEW);它可以通过以下方式简化,但可能不如上述可读性: : V4 E4 k1 U* e) R- s' ncreate table tbl( A varchar(10) not null, B varchar constraint uk_tbl check ( A 'NEW OR B IS NULL );