oracle 更新,查询语句 与约束问题



SQL> select * from Pos;


PNO        PNAME      PDESCRIPE
---------- ---------- ------------------------------------------
2001       教师       负责教学科研工作
2004       保安       负责安全工作
2007       实验教师   负责实验室管理维护工作
2008       图书管理员 负责图书馆的管理


SQL> update Pos set Pno = '2009' where Pno = '2001';
update Pos set Pno = '2009' where Pno = '2001'
*
第 1 行出现错误:

ORA-02292: 违反完整约束条件 (SYS.SYS_C009913) - 已找到子记录

update 和where是怎样进行逻辑判断的?  


难道可以理解成这样:where后面的条件就相当于if(Pno=2001)

然后是这样:if(Pno=2001){Pno=2009};这样看似乎是可以,并且逻辑上是合理的。


但是从select的角度看

如scott 表中, select * from emp where dept=10; 10号部分有的不止是一个人,查询的结果是显示很多条数据的。

如果where deptno =10理解成if(deptno=10) 那么语句只执行一次,结果也只能显示一组数据。

 难道可以理解成

while(deptno=10),这样就可以循环的输出多条语句,上面 update Pos set Pno = '2009' where Pno = '2001';在执行该语句时,

如果一直循环的查Pno=2001,找到后就将Pno修改为2009,然后继续循环的查找,这时候查找条件已经变为Pno=2009,也就是set语句也执行了。

如果再继续执行下去

就变成了 update Pos set Pno = '2009' where Pno = '2009';,而set已经执行过了,逻辑好乱.....

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Caldremch

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值