如果Oracle SQL中的约束如何?
Create Table A(
b varchar(25) primary key,
c varchar(25),
constraint b_1
check(b='name' and c != 'notallowed')
);
以下应不工作:
Insert into A values('name','notallowed');
但是这个应该工作:
Insert into A values('notname','notallowed');
如何修复约束?
答案 0 :(得分:3)
如果我理解正确,唯一的非法组合是b='name' and c='notallowed'
。如果这是正确的,您可以使用not
运算符表达此信息:
CREATE TABLE a (
b varchar(25) PRIMARY KEY,
c varchar(25),
CONSTRAINT b_1
CHECK(NOT(b = 'name' AND c = 'notallowed'))
);
答案 1 :(得分:2)
另一种写作方式是:
create Table A
(
b varchar(25) primary key,
c varchar(25),
constraint b_1 check ( (b,c) not in (('name', 'notallowed')) )
);
(是的,Oracle中需要IN
列表周围的重复括号)
答案 2 :(得分:1)
我猜你正在寻找这个
check ((b='name' and c != 'notallowed') or b != 'name')