我很好奇是否有可能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 );