约束
建表时为每个字段设置一个数据类型,控制输入值的格式,约束的是控制输入的具体的值满足设置的具体要求的。
1 查看表的约束 [数据字典user_constraints]
desc constraints
select constraint_name from user_constraints where table_name='xxx';
2 约束的作用:
定义规则(是否必须输入值,输入值的范围和格式)
确保完整性,避免输入错误和无效的值(数据的精确性和可靠性)
3 约束的分类
3.1、非空约束(非空约束没有约束名)
1、在创建表时设置非空约束
CREATE TABLE table_name(column_name datatypeNOT NULL,...);
2、在修改表时添加非空约束(在添加非空约束之前表中应该没有数据)
ALTER TABLE table_name MODIFY column_name datatype NOT NULL;
3、在修改表时删除非空约束
ALTER TABLE table_name MODIFY column_name datatype NULL;
3.2、主键约束
一张表只能设计一个主键约束,主键约束可以由多个字段构成(联合主
键或复合主键),作用是确保表中每一行数据的唯一性(主键默认非空)。
1、在创建表时设置主键约束
1、列级设置约束
CREATE TABLE table_name(column_name datatypePRIMARY KEY,....);
2、表级设置约束,在所有的字段写完后设置约束,多个字段为联合主键。
CONSTRAINT constraint_name PRIMARYKEY(column_name1,..)
eg:
CREATE TABLE table_name(
column_name1 datatype,
column_name2 datatype,
column_name3 datatype,
CONSTRAINT constraint_name PRIMARY KEY(column_name1,
column_name2,……));
2、在修改表时添加主键约束(设置为主键之前,字段中的值必须是唯一非空的)
ALTER TABLE table_name
ADD CONSTRAINT constraint_namePRIMARY KEY(column_name1,...);
3、更改约束名称
ALTER TABLE table_name
RENAME CONSTRAINT old_name TOnew_name;
4、删除主键约束 通过user_constraints 数据字典查看STATUS状态信息
1、禁用和启用约束
ALTER TABLE table_nameDISABLE|ENABLE CONSTRAINT constraint_name;
2、删除约束
ALTER TABLE table_name DROPCONSTRAINT constraint_name;
3、可选级联约束删除(一个表只有一个主键约束,可以直接删除。)
DROP PRIMARY KEY [CASCADE]
3.3、外键约束(主从表关系)
1、创建表时创建外键约束
1、 列级设置约束(table2为引用表[主表],table1为从表),设置外键约束时,
主表的字段必须为主键,主从表中相应的字段必须是同一数据类型的,从表中外键字段的值必须来自主表中相应字段的值,或者为null值。
CREATE TABLE table1(column_namedatatype REFERENCES
table2(column_name),……);
2、 表级设置约束:[ON DELETE CASCADE]表示级联删除,当主表一条数据
删除后,从表中使用该数据的行也被删除,确保数据的完整性。约束名一般以fk开头,约束名唯一。
CONSTRAINT constraint_name FOREIGN KEY(column_name) REFERENCES
table_name(column_name) [ON DELETECASCADE];
eg:
CREATE TABLE table1 (
column_name1 datatype,
column_name2 datatype,
column_name3 datatype,
column_name4 datatype,
CONSTRAINT constraint_name FOREIGN KEY(column_name)
REFERENCES table2(column_name) ON DELETE CASCADE);
2、修改表时添加外键约束
ALTER TABLE table_name
ADD CONSTRAINTconstraint_name FOREIGN KEY(column_name)
REFERENCES table_name(column_name)[ON DELETE CASCADE];
3、删除外键约束
1、禁用和启用约束
ALTER TABLE table_name DISABLE | ENABLE
CONSTRAINT constraint_name;
2、删除约束
ALTER TABLE table_name DROPCONSTRAINT constraint_name;
3.4、唯一约束(设置唯一约束的字段值保证其唯一性)
与主键约束的区别,唯一约束允许空值,主键约束每张表只有一个,唯一约束
可设置多个。
1、创建表时设置唯一约束(约束名一般以un开头)
列级设置唯一约束:
CREATE TABLEtable_name(column_name datatype UNIQUE,...)
表级设置唯一约束
CONSTRAINT constraint_nameUNIQUE(column_name)
eg:
CREATE TABLE table_name(
column_name1 datatype;
column_name2 datatype;
column_name3 datatype;
CONSTRAINTconstraint_name UNIQUE(column_name)
);
2、修改表时添加唯一约束
ALTER TABLE table_name
ADD CONSTRAINT consraint_nameUNIQUE(column_name);
3、删除唯一约束
1、禁止和启用唯一约束
ALTER TABLE table_nameDISABLE|ENABLE CONSTRAINT constraint_name;
2、删除约束
ALTER TABLE table_name DROPCONSTRAINT constraint_name;
3.5、检查约束:使表中字段值更有意义满足实际的条件,一张表可有多个检查约束
1、创建表时设置检查约束
1、列级设置检查约束(系统自动生成检查约束名)
CREATE TABLEtable_name(column_name datatype CHECK(expressions),...)
2、表级设置检查约束(检查约束名一般为ck开头)
CREATE TABLE table_name(
column_name1datatype,
column_name2datatype,
column_name3datatype,
CONSTRAINTconstraint_name CHECK(expressions)
2、修改表时添加检查约束
ALTER TABLE table_name
ADD CONSTRAINTconstraint_name CHECK(expressions);
3、删除检查约束
1、禁用和启用检查约束
ALTER TABLE table_nameDISABLE|ENABLE CONSTRAINT constraint_name;
2、删除检查约束
ALTER TABLE table_name DROPCONSTRAINT constraint_name;