Oracle数据库设计——定义约束 Check约束
2008-10-18 13:19
309 查看
看下面的例子:
CREATE TABLE temp (age NUMBER(3));
ALTER TABLE temp ADD CONSTRAINT ck_temp_age CHECK
((AGE>0) AND (AGE <= 125));
现在我们能够插入Age表的集合是{1,2,…,125}或null,这和我们实际的现实生活是符合的。
为限制Age字段取值范围不能为空,增加not null约束。
CREATE TABLE temp (age NUMBER(3) NOT NULL);
ALTER TABLE temp ADD CONSTRAINT ck_temp_age CHECK
((AGE>0) AND (AGE<=125));
下面的操作就会获得一个oracle错误:
SQL> insert into temp values (130);
insert into temp values (130)
*
ORA-02290: check constraint (SCOTT.CK_TEMP_AGE) violated.
当Oracle 执行插入操作时,会检查Check约束条件表达式结果是否为TRUE,不为TRUE则拒绝执行。
Check约束可以使用组合条件:
CREATE TABLE temp (a NUMBER);
ALTER TABLE temp ADD CONSTRAINT ck_temp_a CHECK
(((a>=0) AND (a<=10)) OR (a=999) OR (a=9999));
Oracle中没有Boolean类型,PL/SQL有Boolean类型.为了替代一个boolean列使用check约束
CREATE TABLE temp(enabled NUMBER(1) NOT NULL);
ALTER TABLE temp ADD CONSTRAINT ck_temp_enabled CHECK
(enabled IN (0, 1));
也可以使用varchar2类型
CREATE TABLE temp(enabled VARCHAR2(1) NOT NULL);
ALTER TABLE temp ADD CONSTRAINT ck_temp_enabled CHECK
(enabled IN ('T', 'F', 't', 'f'));
CREATE TABLE temp(status VARCHAR2(16) NOT NULL);
ALTER TABLE temp ADD CONSTRAINT ck_temp_status CHECK
(status IN
('RECEIVED','APPROVED','WAITING APPROVAL'));
一、多字段约束
Check约束可以是一个多字段的组合,如下:
CREATE TABLE box
(length NUMBER(2) NOT NULL,
width NUMBER(2) NOT NULL,
height NUMBER(2) NOT NULL);
ALTER TABLE box ADD CONSTRAINT ck_box_volume CHECK
((length*width*height<100) AND
(length > 0) AND (length <= 10) AND
(width > 0) AND (width <= 10) AND
(height > 0) AND (height <= 10));
也可以以不同的名字定义多个Check约束
ALTER TABLE box ADD CONSTRAINT ck_box_length CHECK
((length > 0) AND (length <= 10));
ALTER TABLE box ADD CONSTRAINT ck_box_width CHECK
((width > 0) AND (width <= 10));
ALTER TABLE box ADD CONSTRAINT ck_box_height CHECK
((height > 0) AND (height <= 10));
ALTER TABLE box ADD CONSTRAINT ck_box_dimension CHECK
((length*width*height<100));
二、补充Unique约束
Check约束可以被用于多行非空约束,即同时为空或同时不为空。Unique约束的两个字段可能有一个为null,而另一个不为null,如果我们不想它出现这种情况,我们就可以用Check约束:
(both columns are NULL) OR (both columns are NOT NULL)
CREATE TABLE temp (pk NUMBER PRIMARY KEY, a NUMBER, b NUMBER);
ALTER TABLE temp
ADD CONSTRAINT uk_temp_a_b UNIQUE (a, b);
ALTER TABLE temp ADD CONSTRAINT ck_temp_a_b
CHECK ((a IS NULL AND b IS NULL) OR
(a IS NOT NULL AND b is NOT NULL));
CREATE TABLE temp (age NUMBER(3));
ALTER TABLE temp ADD CONSTRAINT ck_temp_age CHECK
((AGE>0) AND (AGE <= 125));
现在我们能够插入Age表的集合是{1,2,…,125}或null,这和我们实际的现实生活是符合的。
为限制Age字段取值范围不能为空,增加not null约束。
CREATE TABLE temp (age NUMBER(3) NOT NULL);
ALTER TABLE temp ADD CONSTRAINT ck_temp_age CHECK
((AGE>0) AND (AGE<=125));
下面的操作就会获得一个oracle错误:
SQL> insert into temp values (130);
insert into temp values (130)
*
ORA-02290: check constraint (SCOTT.CK_TEMP_AGE) violated.
当Oracle 执行插入操作时,会检查Check约束条件表达式结果是否为TRUE,不为TRUE则拒绝执行。
Check约束可以使用组合条件:
CREATE TABLE temp (a NUMBER);
ALTER TABLE temp ADD CONSTRAINT ck_temp_a CHECK
(((a>=0) AND (a<=10)) OR (a=999) OR (a=9999));
Oracle中没有Boolean类型,PL/SQL有Boolean类型.为了替代一个boolean列使用check约束
CREATE TABLE temp(enabled NUMBER(1) NOT NULL);
ALTER TABLE temp ADD CONSTRAINT ck_temp_enabled CHECK
(enabled IN (0, 1));
也可以使用varchar2类型
CREATE TABLE temp(enabled VARCHAR2(1) NOT NULL);
ALTER TABLE temp ADD CONSTRAINT ck_temp_enabled CHECK
(enabled IN ('T', 'F', 't', 'f'));
CREATE TABLE temp(status VARCHAR2(16) NOT NULL);
ALTER TABLE temp ADD CONSTRAINT ck_temp_status CHECK
(status IN
('RECEIVED','APPROVED','WAITING APPROVAL'));
一、多字段约束
Check约束可以是一个多字段的组合,如下:
CREATE TABLE box
(length NUMBER(2) NOT NULL,
width NUMBER(2) NOT NULL,
height NUMBER(2) NOT NULL);
ALTER TABLE box ADD CONSTRAINT ck_box_volume CHECK
((length*width*height<100) AND
(length > 0) AND (length <= 10) AND
(width > 0) AND (width <= 10) AND
(height > 0) AND (height <= 10));
也可以以不同的名字定义多个Check约束
ALTER TABLE box ADD CONSTRAINT ck_box_length CHECK
((length > 0) AND (length <= 10));
ALTER TABLE box ADD CONSTRAINT ck_box_width CHECK
((width > 0) AND (width <= 10));
ALTER TABLE box ADD CONSTRAINT ck_box_height CHECK
((height > 0) AND (height <= 10));
ALTER TABLE box ADD CONSTRAINT ck_box_dimension CHECK
((length*width*height<100));
二、补充Unique约束
Check约束可以被用于多行非空约束,即同时为空或同时不为空。Unique约束的两个字段可能有一个为null,而另一个不为null,如果我们不想它出现这种情况,我们就可以用Check约束:
(both columns are NULL) OR (both columns are NOT NULL)
CREATE TABLE temp (pk NUMBER PRIMARY KEY, a NUMBER, b NUMBER);
ALTER TABLE temp
ADD CONSTRAINT uk_temp_a_b UNIQUE (a, b);
ALTER TABLE temp ADD CONSTRAINT ck_temp_a_b
CHECK ((a IS NULL AND b IS NULL) OR
(a IS NOT NULL AND b is NOT NULL));
相关文章推荐
- Oracle数据库设计——定义约束 Check约束
- Oracle数据库设计——定义约束 主键1
- Oracle数据库设计——定义约束 主键1
- Oracle数据库设计——定义约束 主键
- Oracle数据库设计——定义约束 Unique约束
- Oracle数据库设计——定义约束 Not NULL约束 Default values
- Oracle数据库设计(定义约束 外键约束)(转)
- 44、Oracle数据库设计(定义约束 外键约束)
- [转]Oracle数据库设计——定义约束 Unique约束
- Oracle数据库设计——定义约束 外键约束
- Oracle数据库设计(定义约束 外键约束)(转)
- 设计流程•系统和功能定义
- Android Studio 2.2 预览版 - 全新的 UI 设计器和约束布局
- Oracle数据库设计提升性能的五条法则
- 结合元素和属性的定义分析Schema的几种设计方案
- Oracle数据库的唯一约束
- 优化网站设计(六):在文档底部放置脚本定义或引用
- ORACLE数据库设计 多对多关系
- Oracle数据库学习(五)--视图,序列,索引,约束
- Java抽象类的定义以及使用(模板设计模式)