Oracle检查约束

时间:2016-12-29 16:03:29

标签: sql oracle constraints ddl check-constraints

如果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');

如何修复约束?

3 个答案:

答案 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')