约束——完整性约束条件
前言
提示:这里可以添加本文要记录的大概内容:
约束就是保证数据库完整性的方法,数据库的完整性就是为了保证数据的正确性。
概念:在数据表上强制执行的一些数据校验规则。当执行增、删、改操作时,数据必须符合在相关字段上设置的校验规则
作用:保证数据的准确性
内容:非空、唯一、主键、外键和检查
分类:列级约束\表级约束
提示:以下是本篇文章正文内容,下面案例可供参考
一、约束
1.创建
约束条件是依附于表的,可以在建表时创建,也可以在建表后创建。
它是一种规则,和表一样存放在数据字典中。也需要命名,或者由系统自动命名。如果是用户命名,一般遵循以下格式:表名_列名_约束条件类型;而Oracle命名,则按照SYS_Cn的格式,其中n为一串数字。
2.语法
(1)建表时:直接加在列名后面
(2)建表后:
使用alter table 表名 add constraint 约束名 约束类型(字段名)
非空约束不能用这种方式
或使用修改方式添加约束
alter table 表名 modify 字段名 约束类型
二、约束——非空
含义:(not null)确保该字段值不为空。默认情况下,任何字段值都可以为空。
操作:
1.在建表时创建非空约束
create table book(bid number not null,bname varchar2(50),author varchar2(30));
insert into book values(null,‘aa’,‘bb’);//出现错误,无法插入
2.建表后创建约束
alter table book modify bname not null;//为该字段设置非空约束,只能用alter
alter table book modify(bname varchar(2) not null);
3.删除非空约束
alter table book modify bname null;
4.添加列时,也可以直接添加约束
alter table book add author varchar2(10) not null;
5.在数据字典中查询约束
desc user_constraints;
select owner,constraint_name,constraint_type,table_name from user_constraints where table_name=‘BOOK’;
注意:如果建表后为某列添加非空约束,并且表中该列数据已经存在null值,则向该列添加约束的行为将失败。这是因为列应用非空约束时,Oracle会检查表中所有的行,以验证所有行在对应列上是否存在空值。
三、约束——唯一
含义:(unique)保证字段或字段的组合不出现重复值。当给表的某个列定义了唯一约束条件时,该列的值不允许重复,但允许值是空值。
操作:
1.建表时创建唯一约束
create table stud(sid number constraint sid_u unique,sname varchar2(20),email varchar2(20),constraint se_u unique(sname,email));
(1)在定义字段的同时指定唯一约束
create table stud(sid number constraint sid_u unique);
(2)在定义完所有字段之后指定唯一约束
create table stud(sname varchar2(20),email varchar2(20),constraint se_u unique(sname,email));
2.建表后创建唯一约束
alter table student add constraint student_user_name uk unique(user_name);
insert into student values(1001,‘jone’,‘3245@qq.com’);
insert into student values(1001,‘nice’,‘3245@qq.com’);
定义唯一约束后,字段值不允许重复。 非空允许重复,所以第一个值没错。第三个值错了。
3.删除唯一约束
alter table stud drop unique(sid);
alter table stud drop constraint sid_u;
4.添加列时指定约束
alter table student add salary number(5,2) unique;
5.在数据字典中查看约束信息
select owner,constraint_name,constraint_type,table_name from user_constraints where table_name=‘STUDENT’;
四、约束——主键
含义:从功能上看相当于非空且唯一。主键字段可以是单字段或多字段组合,意味着在主键约束下的单字段或多字段组合上不允许有空值,也不允许有重复值。
主键可以用来在表中唯一确定一行数据。
在一个表上只允许建立一个主键,而其他约束条件则没有明确的个数限制。
操作:
1.建表同时创建列级主键约束,由系统自动赋予约束条件名称
create table student(sid number(4) primary key,user_name varchar2(10));
2.建表同时创建表级主键约束,自定义约束条件名称
drop table student;
create table student(sid number(4) primary key,user_name varchar2(10),constraint student_sid_pk priamry key(sid));
3.建表后创建表级主键约束,自定义约束条件名称
create table student1(sid number(4),user_name varchar2(10));
alter table student1 add constraint student1_sid_pk primary key(sid);
4.删除主键约束
alter table student1 drop constraint sid_pk;
五、约束——默认值
1.创建表时创建
create table table _name(column data_type default value);
2.修改表时创建
alter table table_name modify 字段名 default value;
六、约束——外键
1.含义:该条件定义在两个表的两个字段或一个表的两个字段上,用于保证相关两个字段的关系。简单来说,就是外键用于与另一张表的关联。
2.外键约束条件包括两个方面的数据约束:
(1)子表上定义的外键的列值,必须从主表被参照的列值中选取,或者为null
(2) 当主表参照列的值被子表参照时,主表的该行记录不允许被删除。
3.操作:
(1)创建外键约束
① 主表要有主键
② 子表上对应主表主键的列建立外键约束
③ 验证:
——不能删除主表上的值(如果子表使用了这个值)
——子表中也不能插入主表主键没有的值
——子表中可以插入空值(主表主键上对应的列)
(1)alter table dept2 add constraint dept2_deptno_pk primary key(deptno);
(2)alter table employee add constraint employee_deptno_fk foreign key(deptno) references dept2(deptno);
(2)在数据字典中查询
select constraint_name,constraint_type from user_constraints where table_name=‘EMPLOYEE’;
(3)删除操作中关键字on的使用
——在创建约束时指定
① 禁止删除,这是Oracle默认的。
② on delete cascade:用于指定级联删除选项。
③ on delete set null:用于删除主表时,将从表的外键列的值设置为null
七、约束——检查
含义:强制在字段上的每个值都要满足check中定义的条件。当定义了check约束的列新增或修改数据时,数据必须符合check约束中定义的条件。
操作:
1.建表时创建
create table usertable1(userid number(3),username varchar2(10),salary number(7,2) check(salary>800));
2.建表后创建
alter table usertable add constraint usertable_salary check(salary>800);
3.验证
insert into usertable values(101,‘rowd’,897);//执行成功
insert into usertable values(102,‘rtyu’,798);//执行失败
八、设置数据表的字段值自动增加
create table ss(sid number generated by default as identity);
九、约束的激活(启用)和禁用
1.约束的状态
表的完整性约束可以处于如下两种状态:
(1)启用状态(ENABLE):启用状态下,约束将对表的插入或更新操作进行检查,与约束规则发生冲突的操作将被禁止。
(2)禁用状态(DISABLE):禁止状态下,约束不再起作用,与约束规则发生冲突的表的插入或更新操作也能够成功执行。
2.作用及意义
禁用约束是指让约束暂时失效,比如需要批量导入数据时,为了避免约束检查影响导入速度,可以先将约束禁用,导入完成后再将约束启用。
3.语法
alter table 表名 disable|enable constraint constraint_name [cascade]
4.操作
(1)先查看约束
select table_name,constraint_name from user_constraints;
(2)禁用
alter table student disable constraint 约束名
(3)验证
(4)重新启用
alter table student enable constraint student_sid_pk;
十、修改、删除约束
1.修改约束
alter table 表名 rename constraint 旧名 to 新名
2.删除约束
——alter table 表名 drop constraint 约束名
——alter table 表名 drop primary key
——alter table 表名 drop unique(字段名)
——alter table 表名 modify 字段名 数据类型 null