`
Aga
  • 浏览: 219856 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

ORACLE CHECK CONSTRAINT使用示例(转载)

阅读更多
看下面的例子:
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));


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=595502
分享到:
评论

相关推荐

    Oracle约束基本语法 修改表结构

    Oracle数据库是世界上最广泛使用的数据库系统之一,其强大的功能和稳定性深受企业青睐。在数据库设计中,约束是非常重要的组成部分,它们确保了数据的完整性和一致性。本文将深入探讨Oracle约束的基本语法以及如何...

    1小时学会Oracle

    - 示例:`ALTER TABLE students ADD CONSTRAINT check_age CHECK (age BETWEEN 1 AND 100);` - **CREATE INDEX**:创建索引以加快查询速度。 - 示例:`CREATE INDEX index_name ON table_name (column_name);` -...

    oracle基础教程(超详细)

    示例:`CREATE TABLE new_employee (id NUMBER CONSTRAINT emp_pk PRIMARY KEY, name VARCHAR2(100) NOT NULL, dept_id NUMBER CONSTRAINT emp_dept_fk REFERENCES departments(id), status VARCHAR2(10) CONSTRAINT...

    oracle中sql语句用法

    根据提供的文件信息,我们可以深入探讨Oracle数据库中的...通过以上的详细介绍,我们已经了解了在Oracle数据库中如何创建序列、使用各种约束以及如何解锁用户的基本方法。这些技能对于维护和管理Oracle数据库至关重要。

    Oracle 增加修改删除字段

    Oracle支持多种类型的约束,如主键(PRIMARY KEY)、外键(FOREIGN KEY)、唯一性(UNIQUE)、非空(NOT NULL)和检查(CHECK)等。 **添加约束**: ```sql ALTER TABLE 表名 ADD CONSTRAINT 约束名 约束类型 ...

    oracle对象管理及使用.docx

    - 添加约束:`ALTER TABLE card ADD CONSTRAINT deposit_amount CHECK (money &gt;= 100);` - **删除表结构**:使用`DROP TABLE`命令删除表。如果表存在外键约束,可能需要先删除外键表才能成功删除目标表。 - 示例:...

    Oracle图文笔记

    - 示例: `CREATE TABLE student (sex CHAR(1) DEFAULT 'M' CONSTRAINT S_CK1 CHECK (sex IN ('M', 'F')));` —— 创建性别列,并限制其值只能为 'M' 或 'F'。 10. **约束查看:** 使用 `DESCRIBE` 命令查看表的结构...

    Oracle数据库的完整性约束规则详解

    本文将深入探讨Oracle数据库中的五种主要完整性约束规则:Check、NOT NULL、Unique、Primary Key和Foreign Key。 #### 二、Check约束 Check约束用于验证数据列的值是否满足特定的条件,如数值范围、字符集等。这种...

    Oracle学习总结、练习

    通过以上内容的学习,我们可以了解到在Oracle数据库中如何创建表并为其添加各种约束,以及如何管理和使用序列。这些基础知识对于Oracle数据库的日常维护和开发都非常重要。在实际工作中,熟练掌握这些技能能够帮助...

    (二)Oracle 补充.md

    age NUMBER CONSTRAINT chk_student_age_min CHECK (age &gt; 10), -- 学生年龄设置check约束 gender VARCHAR2(6) CONSTRAINT chk_student_gender CHECK (gender IN ('男', '女')), -- 性别限制 deptno NUMBER ...

    Oracle 系统表大全

    根据提供的信息,我们可以深入探讨Oracle系统表及其使用方法。这些系统表是Oracle数据库的重要组成部分,它们存储了关于数据库对象的元数据,例如用户、表空间、表、索引等的信息。接下来,我们将逐一分析这些系统表...

    Oracle存储过程分页

    通过上述示例代码,我们了解了如何使用Oracle存储过程实现分页查询的功能。这种方法不仅提高了查询效率,而且使得代码更加清晰、易于维护。此外,还可以根据实际需求对存储过程进行扩展,例如添加更多参数或支持更...

    Oracle OCA 1Z0-047 题库

    ADD CONSTRAINT cust_f_name CHECK(REGEXP_LIKE(cust_first_name, '^[[:alpha:]]*$')) NOVALIDATE; ``` 这里使用`REGEXP_LIKE`函数配合正则表达式`^[[:alpha:]]*$`来检查字段是否只包含字母。 3. **正则表达式...

    sql.rar_oracle

    "sql.rar_oracle"这个压缩包文件可能包含了一系列关于如何在Oracle环境中使用SQL语句创建数据库表的教程或示例。以下是对Oracle数据库中SQL建表相关知识点的详细说明: 1. **SQL简介**:SQL是标准的数据库查询语言...

    Oracle管理索引、权限和角色复习过程.pdf

    在 Oracle 中,数据完整性可以使用约束、触发器、应用程序(过程、函数)三种方法来实现。其中,约束是最为简洁高效的方法。 二、约束 约束是用于确保数据库数据满足特定的商业规则的。Oracle 中的约束包括: 1. ...

    oracle 051题库

    根据提供的信息,我们可以深入探讨与Oracle数据库相关的几个关键知识点,特别是关于如何使用`CREATE TABLE ... AS SELECT`语句以及在创建新表时如何处理约束、默认值等。 ### Oracle数据库中的`CREATE TABLE ... AS...

    oracle数据库教学ppt

    在上述示例中,我们看到Oracle支持在`CREATE TABLE`语句中添加存储参数、表空间选项和存储特性,如`PCTFREE`、`PCTUSED`、`TABLESPACE`等,以优化数据存储和访问性能。 数据查询: SQL的数据查询功能允许用户检索...

    Oracle总结,常见面试题

    Oracle是世界上最广泛使用的数据库管理系统之一,它提供了丰富的功能来管理和处理数据。在面试中,对Oracle的掌握程度经常被用来评估候选人的技能水平。以下是一些Oracle中的关键知识点,包括PL/SQL的应用、视图的...

Global site tag (gtag.js) - Google Analytics