回答

收藏

SQL非空约束条件

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

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

本版积分规则