ORACLE基础(4)约束

约束:控制你输入的具体值要满足的具体要求

约束的作用:定义规则 你创建的表之后,可以定义那些字段必须输入,那些字段必须输入在某一个范围内的值,什么样的值

确保数据的完整性:精确性,可靠性。防止错误信息和无效信息输入


非空约束:

创建表时设置:CREATE TABLE table_name(column_name datatype NOT NULL,...);

如果不想给非空插入之就需要设置默认值

在修改表时添加非空约束:ALTER TABLE table_name MODIFY column_name datatype NOT NULL;

注意:在修改非空约束之前,表当中不要有空数据

改回来就是NOT NULL 改成NULL


主键约束:

作用:确保表当中每一行数据的唯一性

必须  非空和唯一

在一张表中我们只能设置一个主键约束,但是这个主键约束可以由多个字段构成(联合主键或者复合组件)

创建表时设置主键约束:

CREATE TABLE table_name(column_name datatype PRIMARY KEY,...);

设置主键约束会自动加上非空约束

CONSTRANINT constraint_name PRIMARY KEY(column_name1,...)

可以再小括号中写多个字段构成联合组件

这个是子句放在所有字段写完之后,设置约束(表级约束)

例子:CREATE TABLE userinfo_p1(id number(6,0),username varchar2(20),userpwd varchar2(20),constraint pk_id_username PRIMARY KEY(id,username));

这两个字段都是非空


如果创建完约束之后忘记约束名字

我们可以在数据字典user_constraints里查

SELECT constrain_name from user_constraints WHERE table_name='USERINFO_P1';

查找到USERINFO_P1的主键约束


如果没有设置主键约束名称他的名称由系统自动生成例如:SYS_C0011635


修改表时添加主键约束:

ADD CONSTRAINT constraint_name PRIMARY KEY(column_name1,...)

例子:ALTER TABLE userinfo ADD CONSTRAINT pk_id PRIMARY KEY(id);

在设置主键约束前这个字段值必须是唯一非空

最好是没有任何数据的


更改约束的名称:

RENAME CONSTRAINT old_name TO new_name

例子:ALTER TABLE userinfo RENAME CONSTRAINT pk_id TO new_pk_id;

删除主键约束: 

DISABLE|ENABLE CONSTAINT constraint_name

DISALBE是暂时不想用了,以后可以还用,就是禁用

ENABLE就是启用

查看是否被禁用:SELECT constraint_name,status FROM user_constraint WHERE table_name='USERINFO';

删除主键约束:

    DROP CONSTRAINT constraint_name

DROP PRIMARY KEY[CASCADE],因为每张表只有一个主键约束所以可以直接去掉

[CASCADE]用于级联删除,比如外键约束的时候


外键约束

唯一涉及两个表当中字段关系的约束

创建表时设置:CREATE TABLE table1(column_name datatype REFERENCES tables(column_name),...);

REFERENCES后面的表称为   主表

CREATE TABLE后面的表称为 从表

因此我们将外键约束称为主从表关系

设置外键约束时,主表字段必须是主键

主从表中相应的字段必须是同一数据类型

从表中外键字段的值必须来自主表中的相应字段的值,或者为null值

CREATE TABLE typeinfo(typeid VARCHAR2(20) PRIMARY KEY,typename VARCHAR2(20));

CREATE TABLE userinfo_f(id VARHCHAR2(10) PRIMARY KEY,username VARCHAR2(20),typeid_new VARCHAR2(10) REFERENCE typeinfo(typeid));


在创建表时设置外键约束

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 VARCHAR2(20),typeid_new VARCHAR2(10),CONSTRAINT fk_typeid_new FOREIGN KEY(typeid_new)REFERENCES typeinfo(typeid));

注:约束名字必须是唯一的


修改表的时候添加外键约束:

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

加在ALTER TABEL table_name后面


删除外键约束

1.禁用外键约束 DISALBE|ENABLE CONSTRAINT constraint_name

可以通过数据字典查看

SELECT constraint_name,constraint_type,status FROM user_constraints WHERE TABLE table_name='USERINFO_F4';

ALTER TABEL userinfo_f4 DISABALE CONSTRAINT FK_TYPEID_ALTER;

换过来就是ENABLE

DROP CONSTRAINT constraint_name;


唯一约束:作用:保证字段值唯一性

唯一约束和主键约束的区别:主键约束必须非空,唯一约束可以有一个空值,唯一约束每张表可以有多个,主键约束智能有一个


创建表时唯一约束:

CREATE TABLE table_name(column_name datatype UNIQUE,...);

只需要在需要的字段名加上UNIQUE  这是列级


在表级设置唯一约束:CONSTRAINT constraint_name UNIQUE(column_name) 在创建表后所有字段定义之后

如果设置多个唯一约束,必须设置多个子句,不能逗号分开

举例:CREATE TABLE userinfo_ul(id VARCHAR2(10) PRIMARY KEY,username VARCHAR2(20),CONSTRAINT un_username UNIQUE(username));


修改表时添加唯一约束

ADD CONSTRAINT constraint_name UNIQUE(column_name)

删除唯一约束:

禁用和启用:DISABLE|ENALBE CONSTRAINT constraint_name

删除约束:DROP CONSTRAINT constraint_name;


检查约束:

作用:表中的值更具有实际意义

防止员工年龄出现1000,工资出现-50

让字段的值满足条件


在创建表时设置检查约束:(检查约束在一张表中可以有多个)

CREATE TABLE table_name(column_name datatype CHECK(expressions),...);

举例:CREATE TABLE userinfo_c(id VARCHAR2(10) PRIMARY KEY,username VARCHAR2(20),salary number(5,0) CHECK(salary>0));

在表级设置检查约束:CONSTRAINT constraint_name CHECK(expressions)

删除检查约束:

禁用和启用:DISABLE|ENALBE CONSTRAINT constraint_name

删除约束:DROP CONSTRAINT constraint_name;


猜你喜欢

转载自blog.csdn.net/jhkj_5154/article/details/80559715