回答

收藏

SQL非空约束条件

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

我很好奇是否有可能sql中创建条件非null约束?换句话说,只要能创造约束,就能创造约束吗?A列包含“% G  v5 H- _* Q3 ~" a. d
NEW”,那么B列可以是空的,但如果是A列的内容改为其他内容,然后B列不再允许空?* e, Z$ v+ @" L% M
扩展这一点,然后保持不变,只要A列说“ NEW”,B列必须是空的还是空的?
, D: H# I- q7 I$ B3 Y$ H4 k8 r5 m谢谢大家:D  
: R* z) `& i5 p, D                                                                8 z+ ]$ ?, K1 |9 A+ M5 w6 q$ U
    解决方案:                                                                - W( h# E0 j* D5 r
                                                                这对于CONSTRAINT CHECK非常合适。只需执行以下操作:
. |, u& v, M( i要求:. F+ u" y% j% U+ N& E9 C, O; Z: U
是否有可能创造一个约束,只要A列包含长行 NEW”,B列可以是空的,但如果是A列的内容改为其他内容,然后B列就不再允许Null?1 d  _& k# @, F3 i9 C" Z/ z5 I7 N
请注意以下短语:B列 可以    为空
1 |# S3 C5 I% A9 {, j, I9 f& S% S解决方案:7 z# |; b2 T$ i$ y% K9 a7 q+ s
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)   );可以进一步简化:
  c$ l- O- m3 }2 [create table tbl(    A varchar(10) not null,   B varchar   constraint uk_tbl check    (     A = 'NEW        OR B IS NOT NULL   );矛盾的要求与上述要求不符:
6 v- H% S2 p/ F& X0 Z! _扩展这一点,然后保持不变,只要A列说“ NEW”,B列必须是空的还是空的?
, O$ q' [6 c! T( C请注意以下短语:B列 必须    为空
3 R# I$ i! e  U2 ucreate table tbl(    A varchar(10) not null,   B varchar   constraint uk_tbl check    (     (A = 'NEW' AND B IS NULL)      OR A  'NEW);它可以通过以下方式简化,但可能不如上述可读性:% y6 N9 }! C% e5 O2 @, S' {
create table tbl(    A varchar(10) not null,   B varchar   constraint uk_tbl check    (     A  'NEW       OR B IS NULL    );
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则