约束练习

57. 定义非空约束

	1). 非空约束只能定义在列级.
	
	2). 不指定约束名
	create table emp2 (
	name varchar2(30) not null, 
	age number(3)
	);
	
	3). 指定约束名	
	create table emp3(
	name varchar2(30) constraint name_not_null not null, 
	age number(3));
	
这里面的题目不多,主要是回顾一下我们这一节讲的主要内容,首先叫定义非空约束,你要注意的是,

我们这里约束一共讲了5个,我们这里给大家写一下,not null一个,然后定义unique,然后是主键,primary key,

然后叫外键,foreign key,然后就是check,一共是五个,然后这五个里面,每一个约束,正常来讲,我既可以给他定义在

列级上,也可以给他定义在表级上,唯一有一个特别的就是not null,他仅能定义在列级上,关于这个名字,你既可以给他

显示的指定,也可以使用系统默认的,当然建议大家自己去指定一个名字,这样你就能从名字上看到,哪个表里的关于哪一个列

给他相应的一个什么信息,这是非空约束

58. 唯一约束
	1). 列级定义
		
		①. 不指定约束名
		create table emp2 (
		name varchar2(30) unique, 
		age number(3)
		);
		
		②. 指定约束名
		create table emp3 (
		name varchar2(30) constraint name_uq unique, 
		age number(3)
		);
		
	2). 表级定义: 必须指定约束名
		①. 指定约束名
		create table emp3 (
		name varchar2(30), 
		age number(3), 
		constraint name_uq unique(name)
		);

58.1 主键约束:唯一确定一行记录。表明此属性:非空,唯一 

那么主键约束,我可以让声明为主键的列,能够唯一的确定一行记录,那就需要主键的约束同时具备非空和唯一这样

两个效果,我们在给大家做练习的时候也说到了

59. 外键约束
	1). 列级定义
		
		①. 不指定约束名
		create table emp2(
		       emp_id number(6), 
		       name varchar2(25), 
		       dept_id number(4) references dept2(dept_id))
		
		②. 指定约束名
		create table emp3(
		       emp_id number(6), 
		       name varchar2(25), 
		       dept_id number(4) constraint dept_fk3 references dept2(dept_id))
		
	2). 表级定义: 必须指定约束名

		①. 指定约束名
		create table emp4(
		       emp_id number(6), 
		       name varchar2(25), 
		       dept_id number(4),
		       constraint dept_fk2 foreign key(dept_id) references dept2(dept_id))

同样的可以在列级定义,也可以在表级上定义,指定约束名,当然我们建议是指定的,写法的话就是,在相应的列后面,

加一个constraint,外键的名字,references,哪个表里面的哪个列,这是我们在列级上,那么在表级约束的话,是写在

整个最后,这个比较特别一点,加上foregin key

60. 约束需要注意的地方

	1). ** 非空约束(not null)只能定义在列级

	2). ** 唯一约束(unique)的列值可以为空

	3). ** 外键(foreign key)引用的列起码要有一个唯一约束	

非空的只能是在列级,唯一的是可以为空的,而且是多条记录都为空,都没问题,外键引用的列起码要有一个唯一的约束,

61. 建立外键约束时的级联删除问题:
	1). 级联删除:
	
	create table emp2(
	       id number(3) primary key, 
	       name varchar2(25) unique, 
	       dept_id number(3) references dept2(dept_id) on delete cascade)
	
	2). 级联置空
	
	create table emp3(
	       id number(3) primary key, 
	       name varchar2(25) unique, 
	       dept_id number(3) references dept2(dept_id) on delete set null)

然后是关于外键约束的,级联删除和级联置空,就是在你最后加上一个on delete cacade,就叫级联删除,on delete set null,

叫级联置空,这就完了,然后我们看看word版的练习
有两个准备工作,实际上就是创建这两个表,第一个是依据employees表,创建了一个emp2,完成的是一个表的复制,

同时把一个表的数据给复制过来,这个是把departments表复制过来,那么这个两个操作我就不具体去写了,就是创建

表以后,看这个题目

1.	向表emp2的id列中添加PRIMARY KEY约束(my_emp_id_pk)
ALTER table emp2
ADD constraint my_emp_id_pk primary key(id);

这个表我们是不是都已经创建好了,那就不是在创建表的时候来创建这个约束,而是在你有了表以后,我来进行一个修改,

或者来进行一个添加,添加怎么写,我们叫alter,然后table,emp2,这个添加的时候我们说了,如果你是not null的约束,

用的是modify,除此之外添加的都是add,add constraint,给这个起一个名字,emp2的id的这样一个属性,primary key,

作用在哪个列上,作用在id上,我们就这样来定义即可,他指定这个名字,我们给他加上,这是我们这个题

alter table emp2

ADD constraint my_emp_id_pk primary key(id);

2.	向表dept2的id列中添加PRIMARY KEY约束(my_dept_id_pk)
ALTER table dept2
ADD constraint my_dept_id_pk primary key(id)

向这个表的一个列添加一个primary key,与这个题是类似的,再写一下,alter table,dept2,add constraint,叫

dept_id_pk primary key,作用在这个表的id这一列,都有id

3.	向表emp2中添加列dept_id,并在其中定义FOREIGN KEY约束,与之相关联的列是dept2表中的id列。
ALTER table emp2
ADD (dept_id number(10) constraint emp2_dept_id_fk references dept2(id));

向表emp2中添加一个列,一个外键,外键是与id相连接的,添加一个列,我们这个时候是不是需要用这个叫alter,

alter table emp2,添加一个列,或者添加一个约束,这个约束还是一个foreign key,都用的是这个add,add一个列先,

我直接来添加,加一个括号,dept_id,这个是一个number类型的,有10个长度,同时给他添加一个foreign key的约束,

这个约束直接添加在这个新列后面,有点类似于列级的约束,这个叫foreign key,constraint,起个名字,emp2,dept,id,

fk,然后让他references,dept2这个表里的,id这样一个列,那么我们这样定义,首先创建了新增加的一个列,然后同时呢

给这个列增加了一个约束,如果你想实现一个级联删除和级联置空,加上一个on delete set null,或者cascade即可,

这个题目没有这样要求,所以删除也行

alter table emp2

ADD (dept_id number(10) constraint emp2_dept_id_pk references dept2(id));

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值