看下面的例子:
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));
分享到:
相关推荐
"MLDN魔乐科技JAVA培训_Oracle课堂17_约束.rar" 这个标题和描述都指向一个关于Java编程和Oracle数据库的教育课程,具体聚焦在第17课的内容——“约束”。这个课程可能由MLDN(魔乐科技)提供,是一个专业的JAVA培训...
本课程“MLDN魔乐科技_Oracle课堂17_约束”聚焦于Oracle数据库中的一个重要概念——约束,它是确保数据完整性和一致性的关键机制。通过这个课程,我们可以深入理解Oracle数据库中的各种约束类型及其应用。 首先,...
Oracle考试主要测试考生对Oracle数据库系统的理解和操作能力,涵盖数据库管理、数据结构、数据库设计、SQL语言以及PL/SQL程序设计等多个方面。以下是对试卷中涉及的一些核心知识点的详细解释: 一、数据库管理技术...
在Oracle数据库中,约束是一种用于确保数据完整性的机制。它可以帮助我们定义表中的列必须满足的规则,从而确保数据的一致性和准确性。Oracle提供了多种类型的约束,包括但不限于NOT NULL、UNIQUE、PRIMARY KEY、...
Oracle 11g是一款强大的关系型数据库管理系统,广泛应用于企业级的数据存储与管理。本教程主要针对初学者,旨在帮助你从零基础开始掌握Oracle...通过这个视频教程,你将逐步掌握这些技能,成为Oracle数据库管理的专家。
在Oracle中,还需要了解如何添加约束,如主键(PRIMARY KEY)、外键(FOREIGN KEY)、唯一性(UNIQUE)和检查(CHECK)约束等,以确保数据的完整性和一致性。 安全性是数据库管理的关键部分,Oracle提供了多种方式...
创建表时定义约束** - **创建包含多种约束的表:** - `CREATE TABLE 表名 (字段1 类型 CONSTRAINT 主键名 PRIMARY KEY, 字段2 类型 NOT NULL, 字段3 类型 CONSTRAINT 外键名 REFERENCES 参照表(参照字段), 字段4 ...
Oracle数据库自带的几个触发器(最简单触发器格式)示例如下: -- create or replace trigger MDSYS.sdo_drop_user after drop on DATABASE declare stmt varchar2(200); BEGIN if dictionary_obj_type = 'USER...
### Oracle 图文笔记知识点梳理 ...以上知识点总结了 Oracle 图文笔记中提到的关键概念和技术细节,涵盖了 SQL 基础、条件筛选以及高级查询技巧等多个方面,旨在帮助读者快速掌握 Oracle 数据库的核心技能。
CHECK约束 60 10.5.4. 数据库触发器 60 10.6. 数据库性能优化工具 60 10.7. 常见问题处理 60 10.7.1. 序号生成器 60 10.7.2. 确定Oracle数据库中重复的记录 61 10.7.2.1. 自关联查询方法 61 10.7.2.2. GROUP BY/...
在这个实验报告中,我们主要探讨了SQL语言在Oracle数据库中的应用。实验的目的是让学生通过实际操作熟悉Oracle的SQL * Plus工具,掌握SQL语言的基本语法,包括数据定义(DDL)、数据操纵(DML)以及数据查询(DQL)...
1. 定义表:使用CREATE TABLE语句,指定表名及各列的名称和数据类型,并可添加列级完整性约束,如NOT NULL、DEFAULT、UNIQUE、CHECK和PRIMARY KEY或FOREIGN KEY。 2. 删除表:使用DROP TABLE语句,如`DROP TABLE ...
卸载Oracle数据库通常涉及到停止服务、删除文件等步骤,需要按照官方文档进行操作。 ##### 2.3 Oracle的启动 启动Oracle数据库涉及的服务包括: - **OracleService[全局数据库名]**:核心服务之一,负责提供数据库...
在创建表时,经常会创建该表的主键、外键、唯一约束、Check约束等 语法结构 create table 表名( [字段名] [类型] [约束] ……….. CONSTRAINT fk_column FOREIGN KEY(column1,column2,…..column_n) ...
- **定义**: PL/SQL(Procedural Language for SQL)是Oracle为标准SQL语言提供的一种过程化扩展,它允许开发者在Oracle数据库环境中编写过程化的代码。 - **特性**: - 高性能的过程化语言,支持所有数据处理命令。...
- **`conn[ect]`**:此命令用于连接到Oracle数据库。语法如下: - `conn 用户名/密码@网络服务名 [as sysdba/sysoper]` - 当使用具有管理员权限的用户(如`sys`或`system`)进行连接时,需要添加`as sysdba`或`as ...
常见的完整性约束包括NOT NULL(非空约束)、UNIQUE(唯一约束)、PRIMARY KEY(主键约束)、FOREIGN KEY(外键约束)和CHECK(检查约束)。 #### 六、过程与函数 过程和函数是PL/SQL中的重要组成部分,它们可以...