回答

收藏

SQL非空约束条件

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

我很好奇是否有可能sql中创建条件非null约束?换句话说,只要能创造约束,就能创造约束吗?A列包含“' U" X% y' X" H% a
NEW”,那么B列可以是空的,但如果是A列的内容改为其他内容,然后B列不再允许空?
0 O2 c: \* p6 C- j/ h8 }扩展这一点,然后保持不变,只要A列说“ NEW”,B列必须是空的还是空的?
! J# o* `/ i* G9 {% d5 x$ ]谢谢大家:D  + I8 j7 I& D- _' {! H
                                                               
  i; Z. @* C7 P) h    解决方案:                                                                * X8 Z- Z6 a: p$ N
                                                                这对于CONSTRAINT CHECK非常合适。只需执行以下操作:3 v' U& n4 D, y- P, M' p
要求:8 p9 v- j! O  f$ c3 S2 z# Y6 {/ }
是否有可能创造一个约束,只要A列包含长行 NEW”,B列可以是空的,但如果是A列的内容改为其他内容,然后B列就不再允许Null?3 F+ S/ ]6 \) l6 Q; ?* y
请注意以下短语:B列 可以    为空8 f5 H# _( t/ r: A$ r0 J" u
解决方案:- v7 ^" H" e- C8 Q( n( U6 U: 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)   );可以进一步简化:2 F4 R1 ?7 L7 i4 e* N/ Q
create table tbl(    A varchar(10) not null,   B varchar   constraint uk_tbl check    (     A = 'NEW        OR B IS NOT NULL   );矛盾的要求与上述要求不符:
9 R; _* m) E8 Z) `3 U* {扩展这一点,然后保持不变,只要A列说“ NEW”,B列必须是空的还是空的?
. a2 g/ a% v* Y' L0 Y& c请注意以下短语:B列 必须    为空9 `) f% ~1 I% D
create table tbl(    A varchar(10) not null,   B varchar   constraint uk_tbl check    (     (A = 'NEW' AND B IS NULL)      OR A  'NEW);它可以通过以下方式简化,但可能不如上述可读性:8 L) r0 e/ |) p% O' w
create table tbl(    A varchar(10) not null,   B varchar   constraint uk_tbl check    (     A  'NEW       OR B IS NULL    );
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则