(4)Oracle约束

来源:互联网 发布:淘宝外卖网址 编辑:程序博客网 时间:2024/06/05 05:48

1.约束概述

约束用来控制你输入的值要满足一些你设定好的要求。本节课我们会讲约束的作用,以及约束的种类:非空约束,主键约束,外键约束,唯一约束以及检查约束。
约束的作用:

  • 定义规则
  • 确保数据的完整性,指精确性和可靠性。

2.Oracle 非空约束

本节要学习的是在创建表时设置非空约束,以及在修改表时添加非空约束,还有在修改表时去除非空约束。
在创建表时设置非空约束,默认情况下字段都是允许为空的。

CREAYE TABLE table_name(column_name datatype NOT NULL,...)

在修改表时添加非空约束,在修改设置之前,最好表中是没有数据的,如果有空值再定义成非空,则会报错,就需要删除数据再定义了。

ALTER TABLE table_name MODIFY column_name datatype NOT NULL;

在修改表时去除非空约束,去掉NOT

ALTER TABLE table_name MODIFY column_name datatype NULL;

3.主键约束

在表中一般是必不可少的,它的作用:确保表当中每一行数据的唯一性。设置主键约束的字段它必须是非空的,并且要求这个字段的值是唯一的,一张表只能设置一个主键约束,主键约束可以由多个字段来构成,由多个字段来构成的主键我们称之为联合主键或复合主键。主键约束的名字一般以pk开头,取关键字的首字母。本节我们会学到如何在创建表时设置主键约束,在修改表时添加主键约束,更改约束的名称,删除主键约束。
在创建表时设置主键约束
第一种方法CREATE TABLE table_name(column_name datatype PRIMARY KEY,...)
第二种方法构成联合主键,这个句子放在所有的字段都创建完之后,这种约束方式我们称之为表级约束。CONSTRAINT constraint_name PRIMARY KEY(column_name1,...)
假如说我们创建了约束又忘了它的名字,可以在数据字典user_constraints中查,在这个数据字典中就有约束的名字,约束的类型,表的名字。
SELECT constarint_name from user_constraints where table_name='USERINFO_P1';
在给id设置主键时,第一种方法我们并没有设置名称,这个名称系统会自动写一个的,也可以自己用上面的办法查一下。

4.Oracle 在修改表时添加主键约束

在修改表时添加主键约束
ALTER TABLE table_name ADD CONSTRAINT constraint_name PRIMARY KEY(column_name1,...);
主键约束的名字通常都是以pk_开头的,还需要注意的是,修改时如果该字段里已经存放了值,那么值必须是唯一的且不能为空。
更改约束的名称
ALTER TABLE table_name RENAME CONSTRAINT old_name TO new_name;
删除主键约束
如果这个约束我只是暂时不想用了,以后还会想用,这是采用禁用约束的方式。disable代表禁用,enable启用。
ALTER TABLE table_name DISABLE|ENABLE CONSTRAINT constraint_name;
如何查看一个约束是否被禁用,也可以在之前的数据字典里user_constraints查看。
SELECT constarint_name,status from user_constraints where table_name='USERINFO';
如果是根本不想要的约束,可以用ALTER TABLE table_name DROP CONSTATINT constraint_name;
还有另外一种删除约束的方法:ALTER TABLE table_name DROP PRIMARY KEY[CASCADE];
因为每张表只有一个主键约束,所以直接写关键字也可以删除。可选项是用于级联的删除,我们后面可能会用到设置外键约束的时候,才会用到这个,如果两张表存在外键约束,那么我们再用cascade,这样就把其他表引用我们这个字段的地方,也将它的约束进行删掉。

5.Oracle 在创建表时添加外键约束(上)

外键约束是唯一一个涉及两个表当中字段关系的约束。那么看一下这部分会讲解的主要内容:

  • 在创建表时设置外键约束
  • 在修改表时添加外键约束
  • 删除外键约束

在创建表时设置外键约束,主键约束可以在列级和表级设置,外键约束也一样。先看一下如何列级约束使用。CREATE TABLE table1 (column_name datatype REFERNCES table2(column_name),...)在references后面的表我们称之为主表,create table这个表我们称之为从表。
注意:设置外键约束的时候,主表的字段必须是主键,
主从表中相应的字段必须是同一个数据类型,
从表中外键字段的值必须来自主表中的响应字段的值,或者为null值。

6. Oracle 在创建表时设置外键约束(下)

创建完表后在所有字段定义完之后,添加该子句完成外键约束的创建。中括号里的是级联删除的意思,主表当中的一条数据被删除以后,我们在从表当中使用了这条数据的字段所在的行也会被我们一起删除掉,这样就确保了主从表数据的完整性。

CONSTRAINT constraint_name FOREIGN KEY(column_name)REFERENCES table_name(column_name)[ ON DELETE CASCADE]

例子:

CREATE TABLE userinfo_f2(id varchar2(10) primary key,username varchar(20),typeid_new varchar2(10),CONSTRAINT fk_typeid_new foreign key (tepeid_new) referencestypeinfo(typeid) ON DELETE CASCADE;)

7. Oracle 在修改表时添加外键约束

ALTER TABLE table_name ADD CONSTRAINT constraint_name FOREIGN KEY(column_name) REFERENCES table_name(column_name) [ON DELETE CASCADE];

8.Oracle删除外键约束

删除外键约束,也是两种一种是禁用,另一种是彻底删除。
ALTER TABLE table_name disable|enable constraint constraint_name
ALTER TABLE table_name DROP constraint c onstraintname
status,状态,enabled 可用的, disabled 不可用,禁用后如果想再用换成enable就可以了。

9.Oracle 在创建表时设置唯一约束

唯一约束的作用,设置了唯一约束的字段保证该字段值的唯一性。这里主键约束也是可以保证值的唯一性,那么两者有什么区别呢?主键字段值必须是非空的,唯一约束允许有一个空值。主键在每张表中只能有一个,而唯一约束可以有多个。
本节会讲三个内容,在创建表时设置唯一约束,修改时设置唯一约束以及删除唯一约束。
在创建表时设置唯一约束
列级CREATE TABLE table_name (column_name dayatype UNIQUE,....);
我们知道id我们设置成主键约束了,往往用户名也是不能重复的,此时就必须要用到唯一约束了。
表级CONSTRAINT constraint_name UNIQUE(column_name)放在创建表时所有字段定义完成之后。注意,每一个唯一约束都有它约束的名字,不能直接在UNIQUE后面直接写多个字段,如果要将多个字段设置唯一约束,就需要去写多个这样的子句。一般情况下唯一约束都设置成un_开头。
例子:

CREATE TABLE...CONSTRAINT un_username unique(username));

10. Oracle 在修改表时添加唯一约束

ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE(column_name);

alter table userinfo_u2 add constraint un_unsername_new unique(username);

11.Oracle 删除唯一约束

禁用和删除唯一约束,和之前的方法一样
ALTER TABLE table_name disable|enable constraint constraint_name
ALTER TABLE table_name DROP constraint c onstraintname

12.Oracle 在创建表时设置检查约束

检查约束,作用让表中的值更具有实际意义。比如说我们有一个oa的系统,要录入员工的每个人的个人信息,包括年龄工资以及电话号码等等内容,比如说年龄输入1000 工资-50就不符合实际意义,检查约束的意思就是让值具有实际意义。
在创建表时设置检查约束,一个表中可以有多个检查约束,check就是检查约束的关键字,expressions就是条件,比如说工资>0,如果输入的数小于0,就会提示违反检查条件,列级约束系统会自动设置一个约束名。
列级:

(columnname datatype check(expressions),...);

表级

CONSTRAINT constraint_name CHECK(expressions);

13.Oracle 在修改表时添加检查约束

ALTER TABLE table_name ADD CONSTRAINT constraint_name CHECK(expressions);

检查约束可以以ck_来开头

14.删除检查约束

禁用和删除检查约束,和之前的方法一样
ALTER TABLE table_name disable|enable constraint constraint_name;
ALTER TABLE table_name DROP constraint c onstraintname;

15.总结

1、五个中就主键约束是要求唯一的,而且可以由多个字段组成,也就是表级约束可以多个字段写在一起;
2、五个中只有外键约束是涉及两个表的;
3、五个中只有非空约束是没有表级约束,只有列级约束的;非空约束是没有名字的。
4、在修改表的时候修改约束,也是非空约束不同,使用的是修改字段的语句:
alter table userinfo modify username varchar2(20) not 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 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;

原创粉丝点击