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 );