从MySQL 5.5.3开始,如果不选择数据库,则无法使用别名引用删除?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了从MySQL 5.5.3开始,如果不选择数据库,则无法使用别名引用删除?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2406字,纯文字阅读大概需要4分钟。
内容图文
我以前做过这样复杂的多表DELETE:
DELETE db1.t1 FROM db1.table1 AS t1, db1.table2 AS t2...
现在升级到MySQL 5.5.5之后不再起作用,因为根据文档,因为5.5.3别名不允许在DELETE语句中使用db name进行限定.
所以我应该这样做:
DELETE t1 FROM db1.table1 AS t1, db1.table2 AS t2...
由于bug #61376不起作用,并给出ERROR 1046(3D000):没有选择数据库.
我不使用数据库,因为我的代码应该可以在未知环境中集成,并且选择db可能会破坏现有代码.
我是否应该假设在没有选择数据库的情况下不能选择数据库的DELETE语句,因为MySQL 5.5.3和我应该开始寻找一个肮脏的黑客,或者你知道一个干净的解决方案吗?
更新:
当没有选择数据库时,在此查询之前添加USE db1(Bill Karwin的建议):
DELETE t1 FROM db1.table1 AS t1, db1.table2 AS t2...
使它在5.5.5中工作,但在4.1和5.1中它都给出了这个错误:
ERROR 1109 (42S02): Unknown table 't1' in MULTI DELETE
我想现在我将完全放弃使用别名,而是在任何地方使用完整的db.table名称,这使得查询变得大而且不可读但我想不出任何更好的解决方案.
解决方法:
我只准备一个默认数据库.不幸的是,它是必要的,但是与访问表的任何实际查询相比,USE db1实际上不是一个重量级语句.
您不必为每个DELETE执行两个查询.错误报告中显示的SELECT DATABASE()不是必需的,它只显示没有选择默认数据库.
您只需要为每个会话准备一次默认数据库,例如在你连接之后,而不是在每个声明之前.
你的评论:
如果你正在使用另一个数据库,那么错误就会消失.只有当您没有数据库作为默认值时,才会出现别名错误.您不一定要准备db1从中删除.
我现在没有时间测试所有排列,所以部分原因是基于假设.
重新更新:
多年来,MySQL已经改变了几次行为.我建议你建议升级5.1之前的任何MySQL,并确保你使用的是InnoDB插件.它不仅可以简化您的开发,还可以获得近年来的可扩展性改进.
MySQL 4.1 / 5.0 / 5.1说:
As of MySQL 4.1.2, aliases can be used, but for alias references in the list of tables from which to delete rows, the default database is used unless one is specified explicitly.
To correctly match an alias that refers to a table outside the default database, you must explicitly qualify the reference with the name of the proper database:
DELETE a1, db2.a2 FROM db1.t1 AS a1 INNER JOIN db2.t2 AS a2
WHERE a1.id=a2.id;
MySQL 5.5说:
As of MySQL 5.5.3, alias resolution does not require qualification and alias references should not be qualified with the database name. Qualified names are interpreted as referring to tables, not aliases.
所以你是对的,你不能在跨越多个数据库的多表删除中使用别名,并且对于4.1 / 5.0 / 5.1而不是5.5具有相同的代码.解决方法是跳过别名并提供由数据库限定的表的全名.
这应该有效,除非您有一个涉及自连接和跨数据库连接的多表DELETE.
内容总结
以上是互联网集市为您收集整理的从MySQL 5.5.3开始,如果不选择数据库,则无法使用别名引用删除?全部内容,希望文章能够帮你解决从MySQL 5.5.3开始,如果不选择数据库,则无法使用别名引用删除?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。