如何从命令行清除未执行的MySQL查询?


88

假设您要在MySQL数据库中键入命令行查询,则需要取消并重新开始。在bash shell中,您可以键入ctrl-c并获得新的提示。在MySQL中,ctrl-c会退出客户端并返回到Shell。

例如,我输入了一个长而复杂的SELECT语句,但是还没有按回车键。我意识到我不想发送该命令,但是我想在屏幕上显示该命令,因此可以将其用作参考。我想在不退出MySQL的情况下纾困。有任何想法吗?

关键点:命令尚未执行


10
作为参考,在mysql 5.7中,此问题已解决。现在,您可以执行ctrl-c来做到这一点。
dkniffin 2014年

LAMP堆栈是如此古老,并且具有如此广泛的用途。让我感到困惑的是,他们花了这么长时间来修复人们日复一日地会遇到的问题。
ahnbizcad

@dkniffin:我知道这是一个老问题,但是在搜索中仍然排名第一。您能否将评论添加为答案(已经是答案)以帮助持续访问?
帽子

@hat好的,我把它添加为答案
dkniffin

Answers:


113

输入\c

启动MySQL时,您可能会看到以下消息:

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

它所指的“缓冲区”是命令/查询缓冲区。


7
只是一点:您必须任何分号终止符之前执行此操作。
wulftone '16

令人高兴的是,它实际上并没有清除它。键入的内容仍然可见。(老实说,我不会从消息中猜测到这一点,这就是为什么我从未尝试过。)
Michael Scheper

43

首先输入Ctrl+ a,然后输入Ctrl+ k


4
但是OP指定:“我希望在屏幕上显示该命令,以便可以将其用作参考。”
ruakh 2014年

从5.5.40-0版本开始工作。
直到

1
不适用于5.6.28 @Ubuntu。除此之外,这是杀死当前屏幕窗口的顺序。
Piohen '16

1
好吧,您始终可以将此序列设置为该序列的快捷方式。这是emacs和bash中的默认序列。
直到

1
当然,在我最常用的情况下不起作用:我忘记了分号,按Enter键,而不是用不必要的两行代码使我的历史混乱,我宁愿正确地重写命令。
quazgar

18

使用以下快捷方式之一删除当前行:

  • 键入Ctrl+u删除从光标回到行首的所有内容
  • 键入Ctrl+k删除从光标到行尾的所有内容

否则,如已经指出的那样\c,在当前行的末尾键入(clear命令的快捷方式),然后按Enter


0

如果是长命令,我通常会箭头指向该命令的开头并添加乱码,因此它不会执行,但是我可以向上箭头获取访问权限而不必重新键入。否则,如果您不想执行它,只需按向上箭头,它会在您的命令历史记录中滚动。查找一个短命令,退格,然后键入任何您想要的。


0

取决于您的外壳的键绑定。您可以按home键或使用什么键序列来重新开始,用X前缀查询,或使用任何使它在语法上无效的键,按Enter键就可以了。



0

在mysql 5.7中,此问题已解决。现在,您可以ctrl-c退出SQL命令行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.