回答

收藏

SQL非空约束条件

技术问答 技术问答 580 人阅读 | 0 人回复 | 2023-09-14

我很好奇是否有可能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    );
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则