oracle语句的级联问题,这个语句e.mgr=m.empno(+) 谁可以给我讲讲这个是什么意思还带有(+)详细解答哦!

oracle语句的级联问题,这个语句e.mgr=m.empno(+) 谁可以给我讲讲这个是什么意思还带有(+)详细解答哦!,第1张

(+)是外连接,表示当前条件等号左侧的表为主表,如果等号条件成立,查询中如果有等号右侧表中的字段,按照关联条件查询出数据,如果右侧没有条件符合,那么查询中补空。

举个例子,假设emp和dept表数据如下:

emp: emp_id, emp_name, dept_id

001 张三 10

002 李四 10

003 王五 20

004 赵六 30

dept: dept_id dept_name

10 部门1

20 部门2

查询语句:select emp_id, emp_name, dept_name

from emp, dept

where empdept_id = deptdept_id(+);

从上面两表能看出来,emp表中的最后一行数据,dept_id为30,在dept表没有对应的数据,使用直连(即不带加号)只能查询到前三行数据,可是使用外连,以emp为主表,那么emp表的数据就都可以查到。结果如下:

emp_id emp_name dept_name

001 张三 部门1

002 李四 部门1

003 王五 部门2

004 赵六 NULL(空,没有数据)

级联删除你可以把它认为是一个触发器,也就是你删除主表中的数据,那么从表中的相关联的也就一起删除了。。。看个例子:======================create table a

(

id varchar(20) primary key,

password varchar(20) not null

)

create table b

(

id int identity(1,1) primary key,

name varchar(50) not null,

userId varchar(20),

foreign key (userId) references a(id) on delete cascade

)

表B创建了外码userId 对应A的主码ID,声明了级联删除

测试数据:

insert a values ('11','aaa')

insert a values('23','aaa')

insert b values('da','11')

insert b values('das','11')

insert b values('ww','23')

删除A表内id为‘11’的数据,发现B表内userId 为“11”也被数据库自动删除了,这就是级联删除

delete a where id='11'=============================================================级联更新也大同小异。。只是关键字为:on update希望回答对你有所帮助

按照你现在这两个表的设计来看,最简单的改法就是,把SmallClassID表中的BigClassName和EnBigClassName这两个字段去掉,换成BigClassID这个字段,存放它上级目录的ID,设置成外键字段,指向BigClass表中的主键。

然后你在代码里面生成目录的时候,先生成一级目录,例如:

Select

from

BigClass

这样就可以把一级节点都生成,然后再对每个一级节点生成其下级节点,比个给产品分类这个节点生成下级节点,可以用:

Select

from

SmallClass

where

BigClassID

=

46(即取当前节点对应的ID)

这样就可以查到它的子节点了。

这个是对你改动最小的,但是最好的实现方法是只用一张表去实现,设置一个ParentID的字段,存储其父节点的ID,也就是一个指向自己这张表的外键,然后用递归算法去生成目录,这样就比较灵活,不管有几级的目录都可以。

无 *** 作:当在删除或更新主键表的数据时,将显示一条错误信息,告知用户不允许执行该删除或更新 *** 作,删除或更新 *** 作将会被回滚。

层叠:删除或更新包含外键关系中所涉及的数据的所有行。

说明:“层叠”在SQL Server 2000中又叫“级联”。

设置空:这是SQL Server 2005新增的功能。如果表的所有外键列都可以接受空值,则将该值设置为空。

说明:要将外键的删除规则和更新规则设为“设置空”,则该外键必须是可以为空的字段。

设置默认值:这是SQL Server 2005新增的功能。如果表的所有外键列都已定义了默认值,则将该值设置为该列定义的默认值。

说明:要将外键的删除规则和更新规则设置为“设置默认值”,该外键必须是有默认值的字段。

--我也是初学者,共同研究下,你最好一段一段执行,要不就没意义了

use school

drop table teacher1

drop table student1

go

create table teacher1

(

t_id int primary key,

t_name nvarchar(10) not null

)

go

insert into teacher1 values(1347,'张三')

insert into teacher1 values(2680,'李四')

insert into teacher1 values(6379,'王五')

go

create table student1

(

s_id int primary key,

t_id int

)

go

alter table student1

add constraint FK foreign key(t_id) references teacher1(t_id) on update cascade

insert into student1 values(1,2680)

insert into student1 values(2,6379)

insert into student1 values(3,1347)

insert into student1 values(4,6379)

insert into student1 values(5,1347)

--两个表建好了,大概按照你的意思,不知道是不是这种情况

go

select from student1;

select from teacher1; --查询所有数据

go

--在student1表(外键表)中加入一组数据

insert into student1 values(6,1234) --失败了,因为外键表中外键的值必须是引用主键表中关联的主键的值

--也就是外键约束,或称参照完整性

--外键约束是约束外键的数据的取值的

insert into teacher1 values(1234,'童川') --然后在teacher1表(主键表)中加一组数据

--成功,外键约束对主键表被引用的主键无影响

insert into student1 values(6,1234) --成功,验证了失败的原因

go

select from student1;

select from teacher1; --再次查询所有数据

--on update cascade 这个东西我也没学过,百度了一下,大概明白了

go

update teacher1 set t_id = t_id + 10000

where t_name in('童川') --成功

update student1 set t_id = t_id + 10000 --提示与外键约束发生冲突

go

select from student1;

select from teacher1; --看到了么学生表中引用'童川'老师的数据的一列数据中t_id的值也随之改变

--我想这就是on update cascade的作用

可以通过在数据库中设置外键约束来实现级联更新相关字段,具体步骤如下:

1 在两个表中分别创建外键字段,并且设置外键约束;

2 在外键约束中设置级联更新,即当主表中的数据发生更新时,从表中相关字段也会自动更新;

3 保存设置,完成级联更新设置。

以上就是关于oracle语句的级联问题,这个语句e.mgr=m.empno(+) 谁可以给我讲讲这个是什么意思还带有(+)详细解答哦!全部的内容,包括:oracle语句的级联问题,这个语句e.mgr=m.empno(+) 谁可以给我讲讲这个是什么意思还带有(+)详细解答哦!、sql中级联删除,级联更新是怎么理解的、数据库级联二级目录怎么实现等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10182418.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存