约束的定义
约束是指一定的规则,规则就一定是不允许被违反的。
Oracle中有以下五种约束:
- NOT NULL(非空约束)只能定义在列级
- UNIQUE(唯一值约束)允许多个空值
- PRIMARY KEY(主键约束)不允许空值,且唯一
- FOREIGN KEY(外键约束)只能添加子表已有的数据
- CHECK(检查约束)
约束可以在建表时创建约束,也可以在建表后追加创建。
注意:
约束是表一级的限制,如果存在依赖关系,约束可以防止错误的删除数据。
非空约束(NOT NULL)
限制列值允许、不允许为空。
修改列为非空
ALTER TABLE 表名
MODIFY(
列名 NOT NULL
);
取消非空约束
ALTER TABLE 表名
MODIFY(
列名 NULL
);
创建表时列为非空
CREATE TABLE 表名(
列名 类型(范围) NOT NULL
);
唯一值约束(UNIQUE)
限制列的值唯一,一个表中可以有多个列为唯一值约束。
设置唯一值约束
ALTER TABLE 表名
ADD CONSTRAINTS 约束名
UNIQUE(列名);
注意:
唯一值约束也可以复合,也就是说多列共享一个唯一值约束,删除约束也是一样的。
主键约束(PRIMARY KEY)
注意:
一张表只能有一个主键,否则会出问题。
设置主键约束
ALTER TABLE 表名
ADD CONSTRAINTS 主键名
PRIMARY KEY(列名);
删除主键约束
ALTER TABLE 表名
DROP CONSTRAINTS 主键名;
复合主键
多列组成一个主键
ALTER TABLE 表名
ADD CONSTRAINTS 主键名
PRIMARY KEY(列名,列名···);
外键约束(FOREIGN KEY)
限制外键列值必须是引用的主表中的主键列存在的值,不限制空值。
注意:
引用的主表中的主键必须已经设置主键约束。
示例
--部门表(设置主键)
ALTER TABLE test_depts
ADD CONSTRAINTS dept_pk
PRIMARY KEY(department_id);
--员工表(设置外键)
ALTER TABLE test_ecmps
ADD CONSTRAINTS ecmp_fk
FOREIGN KEY(dept_id)
REFERENCES test_depts(department_id);
级联删除
级联删除是指当主表中的一条记录被删除,那么子表中所关联的记录也相应的自动删除。
ALTER TABLE test_ecmps
ADD CONSTRAINTS ecmp_deptid_fk
FOREIGN KEY(dept_id)
REFERENCES test_depts(department_id)
ON DELETE CASCADE;
创建表时添加级联删除
CREATE TABLE table_name
(
column1 datatype null/not null,
column2 datatype null/not null,
...
CONSTRAINT fk_column
FOREIGN KEY (column1, column2, ... column_n)
REFERENCES parent_table (column1, column2, ... column_n)
ON DELETE CASCADE
);
级联置空
级联置空同级联删除一样,只是不删除,只清空。
ALTER TABLE test_ecmps
ADD CONSTRAINTS ecmp_deptid_fk
FOREIGN KEY(dept_id)
REFERENCES test_depts(department_id)
ON DELETE SET NULL;
检查约束(CHECK)
限制自定义条件,忽略空值。
--限制员工工资不能低于400
ALTER TABLE test_ecmps
ADD CONSTRAINTS ecmp_sal_chk
CHECK(salary >= 400);
自定义约束
添加自定义约束
ALTER TABLE 表名
ADD CONSTRAINTS 约束名
约束类型(列名);
创建表时添加自定义约束
CREATE TABLE 表名(
列名 类型(取值范围)
CONSTRAINTS 约束名
约束类型(列名)
);