约束的概念和原则
约束的作用:来防止无效数据输入到表中
几种常用的约束:
not null 指定列不能包含空值
unique 指定列的值或者列的组合的值对于表中所有的行必须是唯一的
primary key 表中每行唯一性标识
check 指定一个必须为真的条件
所有的约束存储在数据字典中。
定义约束
定义约束的方法有两种:
在创建表时定义约束
在创建表后添加约束
约束可以针对单列或多列
单列约束直接在列后定义
约束通常在创建表的同时被创建,在表创建后约束也能被添加,并且约束可以被临时禁用。
约束可以在两个级别上定义:列、表
列:只涉及一个单个的列
表:涉及一个或多个列
几种常见的约束
not null 确保列无空值,默认情况下列是可以包含空值的
unique 在表中指定的列或列组合中的每个值是唯一的,unique约束允许输入空值,除非你对相同的列指定not null约束,unique约束既可以在列级别定义也可以在表级别定义,如:
create table employees (
employee_id number(6),
last name varchar2(20) no null,
email varchar2(25),
salary number(10),
constraint emp_email_uk unique(email));
注意:用unique约束到employees表的email列,约束的名字叫emp_email_uk(名字是任意的)。
primary key 它的用法和unique一样,只是primary key不支持空值。primary key也同样支持表级别的定义,其命令语法和unique一样。
注意:一个表只能有一个primary key约束,但是可以有多个unique约束。对于一个primary key列其unique索引被自动创建
check 定义每行必须满足的条件,该条件可以用和查询条件一样的结构,一个列上能够定义的check的约束的数目无限制,可以有多个。同样check约束也能够被定义在列级别和表级别。
范例:
create table jocky (
....................
salary number(8),
constraint emp_salary_min check (salary>100));
管理约束
对于约束的管理有:添加、删除、禁用、启用
添加约束语法:
ALTER TABLE table ADD [CONSTRAINT constraint] type (column);
table---表名
constraint---约束的名字
type---约束的类型
column---受影响的列名
范例:
SQL> alter table employees add constraint jocky check (employee_id > 0);
Table altered.
SQL> alter table employees modify employee_name constraint sunboy not null;
Table altered.
上面这个范例中的constraint sunboy也可以不要
SQL> alter table employees modify employee_name constraint own primary key;
Table altered.
删除约束语法:
对于约束的查询我们可以到user_constraints和user_cons_columns数据字典视图里面进行查询。
语法:
ALTER TABLE table
DROP PRIMARY KEY | UNIQUE (column) |
CONSTRAINT constraint [cascade]
table 是表的名字
column 是受约束的列的名字
constraint 是约束的名字
范例:
alter table employees
drop constraint jocky;
注意:如果删除表中列的约束的同时还想删除相关联表中列的约束我们则可以在后面加上一个cascade。
如:alter table employees drop constraint jocky cascade;
禁用和启用约束
ALTER TABLE table DISABLE CONSTRAINT constraint [cascade];
cascade子句用来禁用相依赖的完整性约束
当想启用一个约束时,你就可以使用enable子句
如果启用一个约束,约束将应用于表中所有的数据,所有在表中的数据都必须适合该约束
查看约束
为了查看表上所有的约束,我们可以查询user_constraints表。那些没有被表的所有者命令的约束将收到系统指定的约束名
在约束类型中:c代表check,p代表primary key,u代表unique,r代表引用完整性
其中not null约束实际上是check约束
可以用user_cons_columns数据字典视图查看与约束相关的列名
阅读(2079) | 评论(0) | 转发(0) |