概述
1. 约束的作用:(1)定义规则(2)确保完整性(精确性和可靠性)
2.五个重要的约束:非空约束、主键约束、外键约束、检查约束、唯一约束。
非空约束
1.在创建表时设置非空约束
CREATE TABLE table_name(
column_name datatype NOT NULL,…
);
2.在修改表时设置非空约束
ALTER TABLE table_name
MODIFY column_name datatype NOT NULL;
3.在修改表时去除非空约束
ALTER TABLE table_name
MODIFY column_name datatype NULL;
主键约束
1.作用:确保表当中每一行数据的唯一性(非空唯一)
一张表只能设计一个主键约束
主键约束可以有多个字段构成(联合主键或复合主键)
2.在创建表时设置主键约束
CREATE TABLE table_name(
column_name datatype PRIMARY KEY,…
);
CREATE TABLE table_name(
column_name1 datatype,…
CONSTRAINT constraint_name
PRIMARY KEY(column_name1,…);
);
查看约束名称的数据字典user_constraints
查看约束的语句select constraint_name from user_constraintswhere table_name=’表名’;
3.在修改表时添加主键约束
ALTER TABLE table_name
ADD CONSTRAINT constraint_name
PRIMARY KEY(column_name1,…);
4.更改约束的名称
ALTER TABLE table_name
RENAME CONSTRAINT old_name
TO new_name;
5.删除主键约束
禁用约束与启用约束:ALTER TABLE table_name
DISABLE|ENABLE CONSTRAINT constraint_name;
查看约束状态:select constraint_name,status fromuser_constraints where table_name=’表名’;
删除约束:ALTER TABLE table_name
DROP CONSTRAINT constraint_name;
删除约束(主键专用):ALTER TABLE table_name
DROP PRIMARY KEY[CASCADE]; cascade级联
外键约束
1.在创建表时设置外键约束
在列级:CREATE TABLE table_1(从表)
(column_name datatype REFERENCES
table2(主表)(column_name),…);
注意:主从表中相应的字段必须是同一个数据类型,从表中外键字段的值必须来自主表中的相应字段的值,或者为null值。
在表级:CONSTRAINT constraint_name FOREIGNKEY(column_name)REFERENCES
table_name(column_name)[ON DELETE CASCADE](级联删除);
2.在修改表时添加外键约束
ALTER TABLE table_name
ADD CONSTRAINT constraint_name FOREIGN
KEY(column_name)REFERENCES
table_name(column_name)[ON DELETE CASCADE];
3.删除外键约束
禁用|启用约束:ALTER TABLE table_name
DISABLE|ENABLE CONSTRAINT constraint_name;
查看约束名类型和状态:selectconstraint_name,constraint_type,status from user_constraints wheretable_name='USERINFO_F4';
删除约束:ALTER TABLE table_name
DROP CONSTRAINT constraint_name;
唯一约束
1.基本概念
作用:保证字段值的唯一性
唯一约束和主键约束的区别:主键字段值必须是非空的,唯一约束允许有一个空值,主键在每张表中只能有一个,唯一约束在每张表中可以有多个。
2.在创建表时设置唯一约束
列级:CREATE TABLE table_name
(column_name datatype UNIQUE,…);
表级:CREATE TABLE table_name
(column_name datatype,…
CONSTRAINT constraint_name
UNIQUE(column_name) );
3.在修改表时添加唯一约束
ALTER TABLE table_name
ADD CONSTRAINT constraint_name
UNIQUE(column_name);
4.删除唯一约束
禁用|启用约束:ALTER TABLE table_name
DISABLE|ENABLE CONSTRAINT constraint_name;
删除唯一约束ALTER TABLE table_name
DROP CONSTRAINT constraint_name;
检查约束
1.基本概念
作用:表中的值更具有实际意义
2.在创建表时设置检查约束
列级:CREATE TABLE table_name
(column_name datatype CHECK(expressions),…);
表级:CREATE TABLE table_name
(column_name datatype,…
CONSTRAINT constraint_name
CHECK(expressions));
3.在修改表时添加检查约束
ALTER TABLET table_name
ADD CONSTRAINT constraint_name
CHECK(expressions);
4.删除检查约束
禁用|启用约束:ALTER TABLE table_name
DISABLE|ENABLE CONSTRAINT constraint_name;
删除约束:ALTER TABLE table_name
DROP CONSTRAINT constraint_name;
总结(非空约束,主键约束,外键约束,唯一约束,检查约束):
1.主键约束,每张表中只能有一个,可以由多个字段构成
2.外键约束,唯一一个涉及两张表之间关系的一个约束
3.在创建表时设置约束,只有非空约束只能在列级设置,不能在表级设置,其他约束既可以在列级设置也可以在表级设置,而且非空约束是没有名字的
4.在修改表时添加约束,唯一一个和其他约束不同的约束即非空约束,通过修改字段实现
5.更改约束的名称,由于非空约束没有名称,所以不涉及更改名称,其他都可以,数据字典(user_constraints) RENAME CONSTRIANT old_name TO new_name
6.删除约束,非空约束特殊(修改字段,经NOT NULL改成NULL即可,MODIFY关键字),其他都可以通过两种方式分别禁用和删除约束
注意:除非空约束没有约束名以外,其他约束都有约束名,并尽量自定义约束名便于记忆与辨识。不论是否在同一张表,约束都不允许重名,这一点跟MySQL,SQL Server不同。