Oracle学习——约束

约束

定义:约束是ORACLE提供的自动保持数据库完整性的一种方法,它通过限制字段中数据、记录中数据和表之间的数据来保证数据的完整性。

分类:
a.列级约束:列级约束必须在列的定义后面
b.表级约束:表级约束不与列一起,而是单独定义的

完整性约束的基本语法格式:
[CONSTRAINT constraint_name(约束名)]<约束类型>、
说明:约束不指定名称时,系统会给定一个名称。

主键约束(primary key constraint)

用于定义基本表的主键,它是唯一确定表中每一条记录的标识符,其值不能为null也不能重复,以此来保证实体的完整性。表中主键只能有一个,但可以由多个列构成。

a.创建表时添加主键约束

Create table stuent(
	Sid number(8,0),
	Name varchar2(20),
	Sex char(2), 
	Birthday date,
	Addess varchar2(50),
	Constraint sid_pk primary key(sid)
);	

b.修改表时添加主键约束

alter table studet
		add constraint sid_pk primary key(sid);

c.删除主键约束的方式

DROP PRIMARY KEY;

唯一性约束(unique constraint)

用于指定一个或者多个列的组合值具有唯一性,以防止在列中输入重复的值

注意事项:
a.使用唯一性约束的列允许为空值
b.一个表中可以允许有多个唯一性约束
c.可以把唯一性约束定义在多个列上

a.创建表时设置唯一性约束

Create table stuent(
	Sid number(8,0),
	Name varchar2(20),
	Sex char(2), 
	Birthday date,
	Addess varchar2(50),
	Email varchar2(50) unique, //直接设置唯一性约束  会有一个默认名
	Cardid varcha2(18), 
	Constraint uk_cardid unique(cardid)  //设置唯一性约束并命名
);	

b.修改表时添加唯一性约束

Alter table studnt
		Add constraint uk_cardid unique(cardid);

默认约束(default constraint)

 Create table stuent(
    	Sid number(8,0),
    	Name varchar2(20),
    	Cname varchar2(20) default "吴亦凡" //这里就是默认约束
    	Sex char(2), 
    	Birthday date,
    );	

非空约束(not null consraint)

用于确保列不能为null,如果列定义了NOT NULL约束,那么当插入数据时,必须为该列提供数据;当更新列数据时,不能将其值设置为NULL。

非空(not null)属于列级约束

a.创建表时添加非空约束

Create table stuent(
	Sid number(8,0),
	Name varchar2(20) not null,     //直接非空约束,会给一个默认名
	Sex char(2) cnstraint nn_sex not null,  //添加非空约束并命名为nn_sex
	Birthday date,
	Addess varchar2(50)
);	

b.修改表时添加非空约束:(与其他约束有所不同)

修改其他约束语法格式:
		ALTER TABLE table_name
			ADD[CONSTRAINT constraint_name] constraint_type(column);
添加非空约束时语法格式:使用MODIFY语句
		ALTER TABLE table_name
			MODIFY (column_name datatype NOT ULL)
删除非空约束的方式
		ALTER TABLE table_name
			MODIFY column_name datatype NULL;

删除约束:

将约束无效化或激活(暂时性删除)
	  DISABLE | ENABLE CONSTRAINT constraint_name
将约束彻底删除
	  DROP CONSTRAINT constraint_name
删除主键约束的方式
	  DROP PRIMARY KEY;
删除非空约束的方式
		ALTER TABLE table_name
		MODIFY column_name datatype NULL;

检查约束(check constraint)

用于对输入列或者整个表中的值设置检查条件。以限制输入值,保证数据库的完整性。(如对性别的要求)

a.创建表时设置检查约束

Create table stuent(
	Sid number(8,0),
	Name varchar2(20),
	Sex char(2) check(sex=’男’ or sex=’女’),
	Birthday date,
	Addess varchar2(50),
);	
或者
Create table stuent(
	Sid number(8,0),
	Name varchar2(20),
	Sex char(2), 
	Birthday date,
	Addess varchar2(50),
	Constraint ck_sex check(sex=’男’ or sex=’女’)
);	

b.修改表时添加检查约束

Alter table stdentt
		Add constraint ck_sex check(sex=’男’ or sex=’女’);

c.删除检查约束

禁用:alter table student disable constraint ck_sex;
	彻底删除:alter table student drop constraint ck_sex;

外部键约束(foreign key constraint)

用于建立和加强两个表数据之间的链接的一列或多列。外间约束是唯一涉及两个表关系的约束

先创建的表叫主表 后创建的表叫从表 有一列的内容是相同的作为外键

设置外键约束的语法格式

a.列级约束

CREATE TABLE 从表
	(column_name datatype REFERENCES
主表(column_name datatype)[ON DELETE CASCADE],...);
						//这里的 ON DELETE CASCADE代表着是否级联删除

什么是级联删除?

删除包含主键值的行的操作,该值由其它表的现有行中的外键列引用。在级联删除中,还删除其外键值引用删除的主键值的所有行。

例如员工表中一项数据是部门ID,部门ID是部门表的主键,如果是级联删除,当删除了部门A的时候,会把所有属于部门A的员工都给删除。

b.表级约束(创建的是从表)
在表加入
CONSTRAINT constraint_name FOREIGN KEY(column_name)
REFERENCES 主表(column_name)[ON DELETE CASCADE]

创建表时设置外面约束(方法1)

主表:
				Create table department(
					Depid varchar2(10) primary key,
					Depname varchar2(30)
);
			从表:
		Create table stuent(
			Sid number(8,0),
			Name varchar2(20),
			Sex char(2), 
			Birthday date,
			Addess varchar2(50),
			Depid varchar2(10) references department(depid)
);	


//Depid varchar2(10) references department(depid)
//Constraint fk_depid foreign key(depid)
//References department(depid)
//On delete cascade

创建表时设置外面键约束(方法2)

			主表:
				Create table department(
					Depid varchar2(10) primary key,
					Depname varchar2(30)
);
			从表:
		Create table stuent(
			Sid number(8,0),
			Name varchar2(20),
			Sex char(2), 
			Birthday date,
			Addess varchar2(50),
			constraint fk_depid foreign key(depid)
			references department(depid)
			on delete cascade
);	

外键约束注意事项:
a.设置外键约束时,主表的字段必须时主键列(或唯一列)
b.主从表中相应字段必须是同一数据类型
c.从表中外键字段的值必须来自主表中的相应字段的值,或者为null

修改表时添加外键约束

	Alter table student
		Add constraint fk_depid foreign key(depid)
		References department(depid)
		On delete cascad
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值