约束描述:定义规则,保证数据的完整;
分类,非空约束 、检查约束 、主键约束 、唯一约束
创建表,设置非空约束
CREATE TABLE table_name(column_name datatype NOT NULL,....)
修改表时添加非空约束
alter table table_name modify column_name datatype not null
修改表的时候去除非空约束:
ALTER TABLE table_name MODIFY column_name datatype NULL;
主键约束(设置主键约束后自动变为非空)
查看约束的名字
desc user_constrain
查询表的主键名字和状态
select constrain_name,status from user_constrain where table_name="表名"
1.创建表的时候 数据类型+primary key
constraint(强制,限制,约束) constraint_name primary key(column...)
2.(1)修改表的时候设置(添加)主键约束
alter table table_name add constraint constraint_name primary key(cloumn...);
(2)修改主键约束的名字
alter table table_name rename constraint old_name to new_name
(3)删除主键约束
alter table table_name disable(禁用)/enable(启用) contraint contraint_name
彻底删除)alter table table_name drop constraint constriant_name
(彻底删除) alter table table_name drop primary key[cascade(外键)]
注意:主键约束的名称一般是:pk_name
外键约束(表示主从表之间的关系)
1、在创建表时设置外键约束(列级)
语法:CREATE TABLE table1(column_name datatype REFERENCES table2(column_name),...); --其中table2为主表,table1为从表
注:(1)设置外键约束时,主表字段必须为该表的主键字段
(2)主从表中相应的字段必须是同一个数据类型
(3)从表中外键字段的值必须来自主表中相应字段的值,或者为null值
在创建表时设置表级外键约束
CREATE TABLE table_name(
column_name1 datatype,...,
CONSTRAINT constraint_name FOERIGN KEY(column_name) REFERENCES table_name(column_name)[ON DELETE CASCADE]
on delete cascade --> 级联删除
修改表时添加外键约束
alter table table_name
add constraint constraint_name foreign key(column_name) references
table_name(column_name) [on delete cascade]
禁用外键约束
语法:ALTER TABLE table_name DISABLE|ENABLE CONSTRAINT fk_name;
删除外键约束
语法:ALTER TABLE table_name DROP CONSTRAINT pk_name;
查看约束
语法:select constrain_name,constraint_type,status from user_constraints
where table_name='XXXX';
status P代表主键 R代表外键
禁用外键约束:
alter table table_name
disable constraint constrain_name;
启用外键约束:
alter table table_name
enable constraint constrain_name;
删除外键约束:
alter table table_name
drop constraint constrain_name;
注意:外键约束的名称一般是:fk_name
唯一约束
唯一约束值唯一,主键约束的值也是唯一的,区别:主键约束的值不能为空,唯一约束的值可以为空;主键约束的只能有一个,唯一约束可以有多个。
创建表时设置唯一约束(列级设置比较简单,表级设置唯一约束):
创建表的最后加上一个语句:(创建多个唯一约束要分开写)
constraint constraint_name unique(table_column);
constraint constraint_name unique(table_column1);
修改表的过程中添加唯一约束:
alter table tabname add constraint un_id unique(typeid);
1.列级
create table table_name(
clumn_name datatype unique,...
);
2.表级
create table table_name(
clumn_name datatype ,....
constraint constraint_name unique(clumn_name)
);
删除表中的唯一约束:
1.禁用:同之前的约束禁用一样
alter table [table_name]
disable constraint constraint_name;
2. 彻底删除唯一约束:
alter table [table_name]
drop constraint constraint_name;
3.注意:唯一约束的名称一般是:u_name
检查约束
1、作用:让表中的值更具有实际意义。
注:检查约束在一张表中也是可以有多个的。
2、在创建表时设置检查约束(列级)
语法:CREATE TABLE table_name(column_name datatype CHECK(expressions),...);
注:expressions为条件表达式
3、在创建表时设置检查约束(表级)
语法:CREATE TABLE table_name(
column_name datatype,...,
CONSTRAINT c_name CHECK(expressions));
表级例子
SQL> create table userinfo_c1
2 (id varchar2(10) primary key,
3 username varchar2(20),
4 salary number(5,0),
5 constraint ck_salary check(salary>0));
修改表时添加检查约束
alter table userinfo_c3 add constraint ck_salary_new check(salary>0);
ALTER TABLE table_name
Disable(禁用) 或者enable(启用) constraint constraint_name
ALTER TABLE table_name
drop constraint constraint_name
.注意:唯一约束的名称一般是:ck_name
约束小结
1、五个中就主键约束是要求唯一的,而且可以由多个字段组成,也就是表级约束可以多个字段写在一起;
2、五个中只有外键约束是涉及两个表的;
3、五个中只有非空约束是没有表级约束,只有列级约束的;
4、在修改表的时候修改约束,也是非空约束不同,使用的是修改字段的语句:
alter table userinfo modify username varchar2(20) null;
其他的使用都是 alter table 表名
add constraint 约束名 check/primary key/unique(字段,检查的是字段条件); //外键:add constraint 外键名字 foreign key (从字段名)references 主表名(主表字段);
5、非空约束没有名字,其他都是可以改名字的
alter table 表名称 rename constraint 用来的约束名 to 新的约束名;
查询的时候使用数据字典:user_constraints
select constraint_name,constraint_type,status from user_constraints 2 where table_name='USERINFO_C3';
6、删除约束,非空约束也是使用修改字段的语句,其他的都是使用下面:
1.禁用约束
ALTER TABLE table_name
DISABLE|ENABLE CONSTRAINT constraint_name;
2.直接删除约束
>ALTER TABLE table_name
DROP CONSTRAINT constraint_name;
另外主键约束因为是唯一的,有一种特殊的删除方法:
drop primary key;