Comment effacer une requête MySQL non exécutée de la ligne de commande?


88

Supposons que vous tapiez une requête de ligne de commande dans une base de données MySQL et que vous deviez annuler et recommencer. Depuis un shell bash, vous pouvez simplement taper ctrl-c et obtenir une nouvelle invite. Dans MySQL, ctrl-c quitterait le client et vous renverrait au shell.

Par exemple, j'ai une instruction SELECT longue et complexe tapée mais je n'ai pas encore frappé return. Je me rends compte que je ne veux pas envoyer la commande mais que je veux avoir la commande à l'écran afin que je puisse l'utiliser comme référence. J'aimerais renflouer sans quitter MySQL. Des idées?

Point clé: la commande n'a pas encore été exécutée .


10
Juste à titre de référence, dans mysql 5.7, cela a été résolu. Vous pouvez maintenant faire ctrl-c pour faire exactement cela.
dkniffin

La pile LAMP est si ancienne et a une utilisation si répandue. Cela m'étonne de constater qu'il leur faut autant de temps pour réparer des choses que les gens auraient rencontrées jour après jour.
ahnbizcad

@dkniffin: Je sais que c'est une vieille question, mais elle est toujours classée première sur une recherche. Pourriez-vous ajouter votre commentaire en tant que réponse (c'est déjà une réponse) pour aider le trafic continu?
chapeau du

@hat bien, je l'ai ajouté comme réponse
dkniffin

Réponses:


114

Tapez \c.

Lorsque vous démarrez MySQL, vous verrez probablement ce message:

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

Le "tampon" auquel il fait référence est le tampon de commande / requête.


7
Juste un petit point: vous devez le faire avant tout terminateur point-virgule.
wulftone

La chose est belle, il ne fait pas clair qu'il; tout ce qui est tapé reste visible. (Honnêtement, je n'aurais pas deviné cela à partir du message, c'est pourquoi je n'ai jamais essayé.)
Michael Scheper

43

Tapez d'abord Ctrl+ a, puis Ctrl+ k.


4
Mais l'OP a spécifié: "Je veux avoir la commande à l'écran pour pouvoir l'utiliser comme référence."
ruakh

Fonctionne à partir de la version 5.5.40-0.
jusqu'au

1
Ne fonctionne pas avec 5.6.28 @Ubuntu. À côté de cela, il s'agit d'une séquence pour tuer la fenêtre d'écran actuelle.
Piohen

1
Eh bien, vous pouvez toujours définir cette séquence comme un raccourci pour ceci et cela. C'est la séquence par défaut dans emacs et bash.
jusqu'au

1
Cela ne fonctionne bien sûr pas pour mon cas d'utilisation le plus courant: j'ai oublié le point-virgule, appuyé sur Entrée et au lieu d'encombrer mon historique avec un deux lignes inutile, je préfère réécrire la commande correctement.
quazgar

18

Utilisez l'un des raccourcis suivants pour supprimer la ligne actuelle:

  • Tapez Ctrl+ upour tout supprimer du curseur au début de la ligne
  • Tapez Ctrl+ kpour tout supprimer du curseur à la fin de la ligne

Sinon, comme déjà indiqué, tapez \cà la fin de la ligne actuelle (un raccourci pour la clearcommande), puis appuyez sur Enter.


0

Si c'est une commande longue, je fais généralement une flèche vers le début de la commande et j'ajoute du charabia, donc elle ne s'exécutera pas, mais je peux faire une flèche vers le haut et y accéder sans avoir à le retaper. Sinon, si vous ne voulez pas l'exécuter, appuyez simplement sur la flèche vers le haut et il devrait vous faire défiler l'historique de vos commandes. Trouvez une commande courte, faites un retour arrière, puis tapez ce que vous voulez.


0

Dépend des raccourcis clavier de votre shell. Vous pouvez appuyer sur Accueil ou sur la séquence de touches que vous utilisez pour revenir au début, préfixez votre requête avec X ou quoi que ce soit pour la rendre syntaxiquement invalide, appuyez sur Entrée et vous êtes bon


0

Si vous êtes venu ici dans l'espoir de trouver la même réponse dans Transact-SQL, saisissez RESET


0

Dans mysql 5.7, cela a été résolu. Vous pouvez maintenant le faire ctrl-cpour quitter la ligne de commande SQL.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.