· 约束的作用
<1> 定义规则
<2> 确保数据的完整性
· 约束
<1> 非空约束
① 创建表时为字段添加非空约束
CREATE TABLE table_name (
column_name data_type NOT NULL, ... );
② 为已存在的表字段添加非空约束
ALTER TABLE table_name MODIFY column_name data_type NOT NULL;
③ 删除已存在的表字段的非空约束
ALTER TABLE table_name MODIFY column_name data_type NULL;
<2> 主键约束
作用: 确保表中每条记录的唯一性
设置为主键的字段必须非空,唯一,且一张表中只能有一个主键,但是一个主键也可以由多个字段组成,称为联合主键.
① 创建表时设置主键约束
CREATE TABLE table_name(
column_name data_type PRIMARY KEY, ... );
或
CREATE TABLE table_name(
column_name data_type , ...
CONSTRAINT constraint_name PRIMARY KEY(column_name1,column_name2....) );
P:第二种方式设置的约束称为表级约束,可以设置联合主键.
可以从数据字典user_constraints中查看某个表的约束信息.
② 在已存在的表中添加主键约束
ALTER TABLE table_name ADD CONSTRAINT constraint_name PRIMARY KEY (column_name1,column_name2 , ...);
(注意: 添加主键时,必须确保此字段下的数据都是非空且唯一的)
③ 修改主键约束的名称
ALTER TABLE table_name RENAME CONSTRAINT old_constraint_name TO new_constraint_name;
④ 删除主键约束
ALTER TABLE table_name DROP CONSTRAINT constraint_name ;
或
ALTER TABLE table_name DROP PRIMARY KEY [CASCADE] ;
P: 禁用/启用 约束
ALTER TABLE table_name DISABLE/ENABLE CONSTRAINT constraint_name ;
<3> 外键约束
① 创建表时设置外键约束
CREATE TABLE table1 (
column_name data_type REFERENCES table2 (column_name), ... );
P: 一般称table1为从表,table2为主表,
注意: 1. 设置外键时,引用的主表的字段必须是主键;
2. 主外键必须是同一个数据类型;
3. 外键字段的值必须来自对应的主键的值,或者为NULL;
或
CREATE TABLE table1(
column_name data_type , ...
CONSTRAINT constraint_name FOREIGN KEY (column_name) REFERENCES table2 (column_name) [ON DELETE CASCADE] );
② 在已存在的表中添加外键约束
ALTER TABLE table1 ADD CONSTRAINT constraint_name
FOREIGN KEY (column_name) REFERENCES table2(column_name) [ON DELETE CASCADE];
③ 删除外键约束
ALTER TABLE table_name DROP CONSTRAINT constraint_name ;
<4> 唯一约束
① 唯一约束与主键约束的区别:
1. 主键约束必须唯一且不能为NULL,唯一约束允许有一个NULL;
2. 一张表中主键约束只能有一个,而唯一约束可以有多个;
② 创建表时设置唯一约束
CREATE TABLE table_name(
column_name data_type UNIQUE , ... );
或
CREATE TABLE table_name(
column_name data_type , ...
CONSTRAINT constraint_name UNIQUE(column_name));
③ 在已存在的表中添加唯一约束
ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE (column_name);
④ 删除唯一约束
ALTER TABLE table_name DROP CONSTRAINT constraint_name ;
<5> 检查约束
作用: 使表中的值更具有实际意义
① 创建表时设置检查约束
CREATE TABLE table_name(
column_name data_type CHECK(expressions), ... );
或
CREATE TABLE table_name(
column_name data_type , ...
CONSTRAINT constraint_name CHECK(expressions));
② 在已存在的表中添加检查约束
ALTER TABLE table_name ADD CONSTRAINT constraint_name CHECK(expressions);
③ 删除检查约束
ALTER TABLE table_name DROP CONSTRAINT constraint_name ;
· 小结
<1> 主键约束一张表中只能有一个,但是一个主键可以由多个约束组成;
<2> 外键约束是唯一一个涉及两个表之间的约束;
<3> 只有非空约束只能在列级设置,不能再表级设置,且非空约束没有名称;
<4> 可以通过user_constraints数据字典查看约束的名称.