看下面的例子:
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约束的基本语法以及如何...
- 示例:`ALTER TABLE students ADD CONSTRAINT check_age CHECK (age BETWEEN 1 AND 100);` - **CREATE INDEX**:创建索引以加快查询速度。 - 示例:`CREATE INDEX index_name ON table_name (column_name);` -...
示例:`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数据库中的...通过以上的详细介绍,我们已经了解了在Oracle数据库中如何创建序列、使用各种约束以及如何解锁用户的基本方法。这些技能对于维护和管理Oracle数据库至关重要。
Oracle支持多种类型的约束,如主键(PRIMARY KEY)、外键(FOREIGN KEY)、唯一性(UNIQUE)、非空(NOT NULL)和检查(CHECK)等。 **添加约束**: ```sql ALTER TABLE 表名 ADD CONSTRAINT 约束名 约束类型 ...
- 添加约束:`ALTER TABLE card ADD CONSTRAINT deposit_amount CHECK (money >= 100);` - **删除表结构**:使用`DROP TABLE`命令删除表。如果表存在外键约束,可能需要先删除外键表才能成功删除目标表。 - 示例:...
- 示例: `CREATE TABLE student (sex CHAR(1) DEFAULT 'M' CONSTRAINT S_CK1 CHECK (sex IN ('M', 'F')));` —— 创建性别列,并限制其值只能为 'M' 或 'F'。 10. **约束查看:** 使用 `DESCRIBE` 命令查看表的结构...
本文将深入探讨Oracle数据库中的五种主要完整性约束规则:Check、NOT NULL、Unique、Primary Key和Foreign Key。 #### 二、Check约束 Check约束用于验证数据列的值是否满足特定的条件,如数值范围、字符集等。这种...
通过以上内容的学习,我们可以了解到在Oracle数据库中如何创建表并为其添加各种约束,以及如何管理和使用序列。这些基础知识对于Oracle数据库的日常维护和开发都非常重要。在实际工作中,熟练掌握这些技能能够帮助...
age NUMBER CONSTRAINT chk_student_age_min CHECK (age > 10), -- 学生年龄设置check约束 gender VARCHAR2(6) CONSTRAINT chk_student_gender CHECK (gender IN ('男', '女')), -- 性别限制 deptno NUMBER ...
根据提供的信息,我们可以深入探讨Oracle系统表及其使用方法。这些系统表是Oracle数据库的重要组成部分,它们存储了关于数据库对象的元数据,例如用户、表空间、表、索引等的信息。接下来,我们将逐一分析这些系统表...
通过上述示例代码,我们了解了如何使用Oracle存储过程实现分页查询的功能。这种方法不仅提高了查询效率,而且使得代码更加清晰、易于维护。此外,还可以根据实际需求对存储过程进行扩展,例如添加更多参数或支持更...
ADD CONSTRAINT cust_f_name CHECK(REGEXP_LIKE(cust_first_name, '^[[:alpha:]]*$')) NOVALIDATE; ``` 这里使用`REGEXP_LIKE`函数配合正则表达式`^[[:alpha:]]*$`来检查字段是否只包含字母。 3. **正则表达式...
"sql.rar_oracle"这个压缩包文件可能包含了一系列关于如何在Oracle环境中使用SQL语句创建数据库表的教程或示例。以下是对Oracle数据库中SQL建表相关知识点的详细说明: 1. **SQL简介**:SQL是标准的数据库查询语言...
在 Oracle 中,数据完整性可以使用约束、触发器、应用程序(过程、函数)三种方法来实现。其中,约束是最为简洁高效的方法。 二、约束 约束是用于确保数据库数据满足特定的商业规则的。Oracle 中的约束包括: 1. ...
根据提供的信息,我们可以深入探讨与Oracle数据库相关的几个关键知识点,特别是关于如何使用`CREATE TABLE ... AS SELECT`语句以及在创建新表时如何处理约束、默认值等。 ### Oracle数据库中的`CREATE TABLE ... AS...
在上述示例中,我们看到Oracle支持在`CREATE TABLE`语句中添加存储参数、表空间选项和存储特性,如`PCTFREE`、`PCTUSED`、`TABLESPACE`等,以优化数据存储和访问性能。 数据查询: SQL的数据查询功能允许用户检索...
Oracle是世界上最广泛使用的数据库管理系统之一,它提供了丰富的功能来管理和处理数据。在面试中,对Oracle的掌握程度经常被用来评估候选人的技能水平。以下是一些Oracle中的关键知识点,包括PL/SQL的应用、视图的...