日期:2014-05-16  浏览次数:20581 次

Oracle DB 约束概览
  • 包括约束条件
? 约束条件用于在表级别强制执行各种规则。
? 约束条件用于防止在存在相关性时删除表。
? 下列约束条件类型有效:
– NOT NULL :指定该列不能包含空值
– UNIQUE :定一个列或列组合的值对于表中的所有行必须是唯一的
– PRIMARY KEY :唯一地标识表中的每一行
– FOREIGN KEY :在该列和所引用表的列之间建立联系后强制实施引用完整性,这样其中一个表的值与另一个表中的值相匹配
– CHECK :指定必须为真的条件

Oracle Server 使用约束条件来防止将无效的数据输入到表中。
可以使用约束条件完成以下任务:
? 在表中插入、更新或删除某一行时,对表中的数据强制执行各种规则。必须满足约束条件,操作才会成功。
? 防止当某个表与其它表存在相关性时删除该表。
? 为Oracle 工具(例如Oracle Developer)提供规则。

  • 约束条件准则
? 可以为约束条件命名,也可以由Oracle Server 使用SYS_Cn格式生成一个名称。
? 可采用以下任何一种方式创建约束条件:
– 创建表的同时创建约束条件
– 创建表以后
? 可以在列或表级别定义约束条件。
? 可以在数据字典中查看约束条件。

所有约束条件都存储在数据字典中。如果为约束条件指定了一个有意义的名称,则引用时较为容易。约束条件名称必须遵循标准对象命名规则,但是该名称不能与同一用户的另一对象名称相同。如果你没有对约束条件命名,Oracle Server 就会按照SYS_Cn格式生成一个名称,其中n是一个整数,这样约束条件名称是唯一的。
既可以在创建表的同时定义约束条件,也可以在创建表之后定义约束条件。
你可以在列级别或表级别定义约束条件。从功能上来说,表级别约束条件与列级别约束条件的作用是相同的。

  • 定义约束条件
? 语法:
CREATE TABLE [schema.]table
(column datatype[DEFAULT expr] 
[column_constraint],
... 
[table_constraint][,...]);

? 列级别约束条件语法:
column[CONSTRAINT constraint_name] constraint_type,

? 表级别约束条件语法:
column,... 
[CONSTRAINT constraint_name] constraint_type
(column, ...),

示例给出了在创建表时定义约束条件的语法。你可以在列级别或表级别创建约束条件。
定义列时会包括在列级别定义的约束条件。在表定义结束时定义表级别约束条件,必须在一组括号中引用应用了约束条件的列或列组合。这二者主要在语法上有所不同;此外从功能上来说,列级别约束条件和表级别约束条件的作用是相同的。
必须在列级别定义NOT NULL约束条件。
必须在表级别定义适用于多个列的约束条件。
在该语法中:
schema :与所有者的姓名相同
table :是表名称
DEFAULT expr :指定当INSERT语句中省略了值时所使用的默认值
column: 是列名称
datatype :是列的数据类型和长度
column_constraint:是作为列定义一部分的完整性约束条件
table_constraint :是作为表定义一部分的完整性约束条件

? 列级别约束条件示例: