Comment quitter l'invite de commande MySQL?


37

J'ai installé MySQL. Maintenant, je suis coincé dans l'invite de commande MySQL. J'ai exécuté MySQL comme ceci:

C:\>mysql.exe
mysql>

Ensuite, je tape une commande non valide comme celle-ci:

mysql> /version
    ->

Et peu importe ce que je tape, je ne peux pas quitter la ligne de commande / terminal MySQL. Par exemple:

  • exit

  • CtrlC

  • CtrlD

  • quit

  • Ctrl\

  • CtrlZ

  • bye

Comment quitter le terminal MySQL vers le terminal par défaut?


1
Avez-vous essayé d'arrêter votre ordinateur? / s
VarunAgw

Réponses:


29

Pour ajouter à l'autre réponse, vous pouvez simplement terminer la requête non valide actuelle à l'aide d'un point-virgule:

mysql> /version
    -> ;
ERROR 1064 (42000): You have an error in your SQL syntax.........
mysql> exit
Bye

c:\mysql\bin>

Ou en utilisant \G(qui est censé afficher les lignes verticalement):

mysql> /version
    -> ;
ERROR 1064 (42000): You have an error in your SQL syntax.........
mysql> exit
Bye

c:\mysql\bin>

Bien sûr, les deux options supposent que vous n'avez pas de devis d'ouverture. Si vous le faites, vous devez d'abord le fermer avec un devis de fin.


Ce qui m'avait fait trébucher, c'était que je ne comprenais pas complètement comment le terminal mysql traite les entrées dans ses différents modes de devis tels que définis ici: dev.mysql.com/doc/refman/5.0/en/entering-queries.html Il y a 5 modes : ->, '>, ">, `>et /*> je l' ai testé à nouveau sur les dernières versions, et cela a fonctionné correctement. Cela ressemble donc à un bug corrigé.
Eric Leschinski

Le point-virgule ne fonctionne pas ... rien ne fonctionne. Si je fais \ G, il agit comme s'il avait quitté ce mode stupide ->, mais y revient après une autre commande. Pourquoi mysql est-il si stupide à ce sujet?
Amalgovinus

La vraie réponse est que le mysql cli de Windows est foutu et peut rester bloqué. La façon la plus simple sur Windows est simplement d'utiliser git bash
Amalgovinus

20

Pourquoi ctrl-c ne quitte-t-il pas le mode d'entrée mysql dans Windows?

Parce que vous avez dit à MySQL d'interpréter vos commandes de sortie comme une entrée valide.

Ce qui rend le terminal MySQL difficile à comprendre, c'est qu'il existe différents modes pour les guillemets simples, les guillemets doubles et le mode normal.

Donc, pour sortir du mode d'entrée mysql, vous devrez suivre ces étapes:

  1. Sortez du mode guillemet double.
  2. Sortez du mode devis simple.
  3. Sortez du mode mysql.
  4. Quittez mysql pour revenir au terminal par défaut.

Exemple le plus basique:

mysql> /version
    ->
    ->
    ->
    -> \c
mysql> exit
Bye

C:\>

Vous n'avez jamais quitté le mode par défaut dans l'exemple ci-dessus, les commandes de sortie fonctionnent donc correctement.

Exemple 2 (c'est ce qui vous fait trébucher).

mysql> hello
    ->
    -> look dash is on the left"
    "> In doublequote mode now, because doublequote above
    "> adding another doublequote breaks you out: "
    -> look a single quote ' here
    '> in single quote mode now.
    '> get out, in, then out again with three singlequotes: '''
    -> now it will listen to your escape code: \c
mysql> exit
Bye

C:\>

Tant que vous êtes en mode devis simple ou double, aucune séquence d'échappement n'est respectée. Même Ctrl-Cet Ctrl-Dsont ignorés dans ces modes.

Dans lequel des 26 univers Ctrl-C n'arrête-t-il pas un programme quel que soit le mode? Nous ne le saurons peut-être jamais. Bazinga.


1
Je suppose que les citations échappent aux choses, et son attente de plus d'entrée. En fait, cela a du sens lorsque vous pouvez stocker quelque chose comme "exit" dans une base de données
Journeyman Geek

@Eric, Bien que Ctrl-D ne fonctionne pas lorsque vous êtes en mode devis, Ctrl-C fonctionne toujours si vous utilisez des clients plus anciens comme mysql 5.5.43 et mysql 5.1.73. Testé sur victoire 8.1.
Pacerier

Ctrl-c ne me le laisse toujours pas. Je ne reçois jamais le message "bye". De plus, quand je suis en mode ->, la seule chose que je peux faire est Ctrl + C pour sortir? Absolument rien d'autre n'obtient une réponse de l'interprète. Mysql est intuitif dans la plupart des cas, mais ce n'est pas un tel cas.
Amalgovinus

Peut-être que votre émulateur de terminal engloutit vos codes Ctrl et envoie un code clé différent au processus qu'il interprète comme du texte. Je ressens votre douleur, à l'époque où j'ai écrit ce post en 2013, c'était pour ce problème et un million d'autres comme ça que mon ancienne machine Windows a été mise à nu et jetée à la poubelle pour contaminer mon PC, elle est assise dans une décharge quelque part . La seule façon que j'ai trouvée pour résoudre ce problème était de se débarrasser du système d'exploitation Windows et de migrer vers les idéologies Mac et Linux qui ne commettent pas ces crimes d'insertion d'intermédiaires pour empêcher votre Ctrl-C de fonctionner.
Eric Leschinski

1

SQL prend en charge les requêtes saisies sur plusieurs lignes. Ce n'est que lorsque vous entrez un point-virgule ;que la requête sera exécutée. Vous devez également avoir mis fin à toutes les chaînes de votre requête.

Méfiez-vous des copier et coller des requêtes avec des chaînes d'un package de traitement de texte - les citations peuvent avoir été remplacées par des `` citations intelligentes '' et cela gâchera votre requête.

Si vous avez entré une requête non terminée, elle ne s'exécute pas, et c'est pourquoi la saisie de exit ne fonctionne pas - MySQL pense que vous êtes toujours au milieu d'une requête. L'invite de commandes change pour montrer quelle entrée est nécessaire pour terminer la requête. Par exemple, un devis ou un double devis peut être requis. C'est puissant et l'invite de commande est utile mais je l'ai trouvé confus jusqu'à ce que je lise les réponses et les commentaires sur ce fil.

lire les spécifications ici

L'invite «de niveau supérieur» est:

mysql>

Si vous voyez cela, vous pouvez entrer une commande, la terminer avec; et appuyez sur Entrée.

Si vous voyez une invite comme celle-ci:

'>
">
->

Ensuite, MySQL vous attend pour terminer une chaîne avec un devis ou une requête avec un point-virgule.

Voici comment dire à MySQL d'annuler votre requête non terminée foireuse et de vous remettre à l'invite principale:

\c

Je pense que c'est plus sûr que de terminer et d'exécuter votre requête involontaire. Après cela, vous devriez être de retour à l'invite> et pouvez quitter avec:

exit


0

Vous pouvez essayer de vous échapper en utilisant Ctrl+ Shift+D


3
Il s'agit d'un artefact de l'émulateur de terminal spécifique que vous utilisez, il serait donc utile de savoir lequel est le vôtre. Le vôtre a apparemment remappé Ctrl-Shift-D en un code clé que le processus mysql interprète comme signifiant sortie. Si tel est le cas, vous devriez pouvoir remapper les codes clés dans votre émulateur de terminal afin de ne pas avoir à obtenir le canal carpien pour quitter un programme.
Eric Leschinski
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.