数据库原理学习记录2

数据库原理学习记录2

问题1:You can’t specify target table ‘student’ for update in FROM clause

通过百度翻译:
不懂的英文就百度翻译

参考博客:
https://blog.csdn.net/qq_29672495/article/details/72668008

该文提出“将SELECT出的结果再通过中间表SELECT一遍

模仿尝试:

例1:

delete from student
where 姓名=any(
select student.姓名
from (select student.姓名
from student left join score
on student.学号=score.学号
where score.课号 is null) student
);
Query OK, 8 rows affected (0.01 sec)

例2:

mysql> delete from teacher      //失败
    -> where 工资<(
    -> select avg(工资)
    -> from teacher
    -> );
ERROR 1093 (HY000): You can't specify target table 'teacher' for update in FROM clause
mysql> delete from teacher          //失败
    -> where 工资<any(
    -> select avg(工资)
    -> from teacher
    -> );
ERROR 1093 (HY000): You can't specify target table 'teacher' for update in FROM clause
mysql> delete from teacher           //成功
    -> where 工资<(
    -> select avg(工资)
    -> from (select avg(工资) from teacher)teacher
    -> );
Query OK, 0 rows affected (0.00 sec)

老师提示:

“这个语句是完全正确的,但是在Mysql中会出问题,这是mysql的问题,mysql不准在下一级嵌套中使用同一名称的表。”

“注意我说了关键哦,下一级嵌套,仅仅是下一级嵌套,也就是其它级的嵌套是可以的,你品。”

问题2:Subquery returns more than 1 row

通过百度翻译:
不懂的英文就百度翻译
资料查找:
https://zhidao.baidu.com/question/327417776459413245.html

mysql> delete from student
    -> where 姓名=(
    -> select student.姓名
    -> from (select student.姓名
    -> from student left join score
    -> on student.学号=score.学号
    -> where score.课号 is null) student
    -> );
ERROR 1242 (21000): Subquery returns more than 1 row
mysql> delete from student
    -> where 姓名=any(        //此处添加 any
    -> select student.姓名
    -> from (select student.姓名
    -> from student left join score
    -> on student.学号=score.学号
    -> where score.课号 is null) student
    -> );
Query OK, 8 rows affected (0.01 sec)

问题3:Every derived table must have its own alias

通过百度翻译:每个派生表都必须有自己的别名
在解决问题1,进行再select时容易出现
解决方法:取别名

问题4:Cannot delete or update a parent row: a foreign key constraint fails

百度翻译:无法删除或更新父行:外键约束失败
原因:老师故意挖的坑
解决方法:取消外键,迅速删除,接上外键,一气呵成

参考博客:
https://blog.csdn.net/qq_39403545/article/details/86649026

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值