如果在TRUNCATE和SELECT INTO之间发送查询,则没有数据.使用MySQL innoDB
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如果在TRUNCATE和SELECT INTO之间发送查询,则没有数据.使用MySQL innoDB,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1045字,纯文字阅读大概需要2分钟。
内容图文
![如果在TRUNCATE和SELECT INTO之间发送查询,则没有数据.使用MySQL innoDB](/upload/InfoBanner/zyjiaocheng/881/5a738bad6f4e4a62ba9e999db826accf.jpg)
使用MySQL DB,我在创建的存储过程和事件计时器上遇到了麻烦.
我制作了一个空表,该表通过SELECT INTO填充了另一个表中的数据.
在填充之前,我会截断当前数据.它仅用于跟踪自当前日期起2个月内发生的日志条目.
这将一个350k的日志表变成大约750个,这确实加快了报告查询的速度.
问题在于,如果客户端恰好在TRUNCATE语句和SELECT INTO语句之间发送查询(考虑到将EVENT设置为每1分钟运行一次,则该可能性很高),查询将不返回任何行.
运行此过程时,我已经研究过锁定表上的读取,但是在存储过程中不允许进行锁定.
任何人都可以提出一种(最好)不需要重新设计的解决方法吗?
我确实需要在这里指出正确的方向.
谢谢,
马克斯
解决方法:
我建议一种替代方法,而不是截断表格,然后选择表格…
您可以改为将新数据集选择到新表中.接下来,使用单个RENAME命令,将新表重命名为现有表,并将现有表重命名为某些备份名称.
RENAME TABLE existing_table TO backup_table, new_table TO existing_table;
这是一个单一的原子操作…因此,客户端在清空数据之后但在重新填充数据之前,不可能从数据中读取数据.
或者,您可以将TRUNCATE更改为DELETE FROM,然后将其与SELECT INTO一起包装在事务中:
START TRANSACTION
DELETE FROM YourTable;
SELECT INTO YourTable...;
COMMIT
内容总结
以上是互联网集市为您收集整理的如果在TRUNCATE和SELECT INTO之间发送查询,则没有数据.使用MySQL innoDB全部内容,希望文章能够帮你解决如果在TRUNCATE和SELECT INTO之间发送查询,则没有数据.使用MySQL innoDB所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。