在调试SQL语句时,如果我在使用输出大量结果的mysql命令行时意外执行查询(即使查询本身在合理的时间内执行),我知道的唯一方法就是停止无休止的流输出是CTRL-C。
不幸的是,这让我回到shell中,迫使我登录并再次选择数据库。
为了避免这种情况,我开始使用 - sigint-ignore 选项运行mysql,以便忽略CTRL-C。
现在我想要一种中断这些长查询输出的方法。
是否有键盘快捷键可以执行此操作?
答案 0 :(得分:20)
不是键盘快捷键。
唯一的选择是打开另一个会话,使用SHOW PROCESSLIST,然后使用KILL QUERY您要终止的会话。
您还可以使用mysqladmin
命令行工具发出这些命令。
无论哪种方式,都需要您登录。因此,与按Ctrl-C相比,它没什么优势。
答案 1 :(得分:17)
您可以使用--pager
将输出传递给less
等寻呼机,以便您控制输出。不仅仅是杀死它,还有分页,搜索甚至存储输出比终端窗口更好。
还有--safe-updates
或-U
开关又名--i-am-a-dummy
,可以保护您免受无子update
和delete
的攻击,并且自动限制选择为1000(可以用select_limit修改。
默认情况下,~/.my.cnf
可以设置所有这些。
[mysql]
pager
safe-updates
答案 2 :(得分:12)
从当前的mysql文档:
从MySQL 5.1.10开始,键入Control-C 导致mysql试图杀死 目前的声明。如果这不可能 完成,或再次键入Control-C 在语句被杀之前,mysql 退出。以前,Control-C引起了 mysql在所有情况下退出。
由于我使用的是5.0.67版,似乎更新mysql将是最好的解决方案。然而,我接受了Schwern的答案,因为它很快实现并且像梦一样工作。
答案 3 :(得分:4)
有点晚,但也许我的回答会帮助别人。
通过命令行终止具体mysql查询的方法是:
答案 4 :(得分:2)
使用mysql --sigint-ignore
要清除一行,请使用 control + U