Как выйти из командной строки MySQL?


37

Я установил MySQL. Теперь я застрял в командной строке MySQL. Я запускал MySQL вот так:

C:\>mysql.exe
mysql>

Затем я ввожу какую-то неверную команду, например:

mysql> /version
    ->

И независимо от того, что я печатаю, я не могу выйти из командной строки / терминала MySQL. Например:

  • exit

  • CtrlC

  • CtrlD

  • quit

  • Ctrl\

  • CtrlZ

  • bye

Как выйти из терминала MySQL в терминал по умолчанию?


1
Вы пытались выключить компьютер? / s
VarunAgw

Ответы:


29

Чтобы добавить другой ответ, вы можете просто завершить текущий неверный запрос, используя точку с запятой:

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

c:\mysql\bin>

Или используя \G(который должен заставить строки отображаться вертикально):

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

c:\mysql\bin>

Конечно, оба варианта предполагают, что у вас нет вступительной цитаты. Если вы это сделаете, вы должны сначала закрыть его конечной цитатой.


Что меня сбило с толку, так это то, что я не до конца понимал, как терминал mysql обрабатывает ввод в различных режимах цитат, как определено здесь: dev.mysql.com/doc/refman/5.0/en/entering-queries.html Существует 5 режимов. : ->, '>, ">, `>, и /*> я проверил его снова на последних версиях, и она работала правильно. Так что похоже на исправленную ошибку.
Эрик Лещинский

Точка с запятой не работает ... ничего не работает. Если я делаю \ G, он действует так, как если бы он вышел из этого глупого режима ->, но затем возвращается в него после другой команды. Почему MySQL так глупо об этом?
Амальговинус

Реальный ответ таков: mysql cli в Windows испорчен и может застрять. Самый простой способ для Windows - просто использовать git bash
Amalgovinus

20

Почему ctrl-c не выходит из режима ввода mysql в Windows?

Потому что вы сказали MySQL интерпретировать ваши команды выхода как допустимый ввод.

Что делает терминал MySQL трудным для понимания, так это то, что существуют разные режимы для одинарных, двойных и нормальных режимов.

Таким образом, чтобы выйти из режима ввода mysql, вам нужно будет выполнить следующие шаги:

  1. Выйти из режима двойных кавычек.
  2. Выйдите из режима одинарных кавычек.
  3. Выйти из режима MySQL.
  4. Выйдите из mysql обратно в терминал по умолчанию.

Самый простой пример:

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

C:\>

В приведенном выше примере вы никогда не выходили из режима по умолчанию, поэтому команды выхода работают правильно.

Пример 2 (это то, что вас сбивает с толку).

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:\>

Пока вы находитесь в режиме одинарных или двойных кавычек, escape-последовательности не соблюдаются. Даже Ctrl-Cи Ctrl-Dигнорируются в этих режимах.

В какой из 26 вселенных Ctrl-C не останавливает программу независимо от режима? Возможно, мы никогда не узнаем. Bazinga.


1
Я предполагаю, что кавычки избегают вещей, и это ждет большего ввода. Это действительно имеет смысл, когда вы можете хранить что-то вроде «выхода» в базе данных
Journeyman Geek

@Eric, хотя Ctrl-D не работает, когда вы находитесь в режиме цитирования, Ctrl-C по- прежнему работает, если вы используете более старые клиенты, такие как mysql 5.5.43 и mysql 5.1.73. Проверено на win 8.1.
Pacerier

Ctrl-c все еще не оставляет это для меня. Я никогда не получаю "пока" сообщение. Кроме того, когда я вхожу в режим ->, единственное, что я могу сделать, это Ctrl + C, чтобы выйти? Абсолютно ничто не получает ответ от переводчика. Mysql интуитивно понятен в большинстве случаев, но это не один из таких случаев.
Амальговинус

Возможно, ваш эмулятор терминала поглощает ваши Ctrl-коды и отправляет другой код ключа процессу, который он интерпретирует как текст. Я чувствую вашу боль. Когда я писал этот пост еще в 2013 году, именно для этой проблемы и для миллионов других людей, подобных моей бывшей машине с Windows, была взломана и выброшена в мусорное ведро за загрязнение моего ПК, она где-то на свалке , Единственный способ исправить это - избавиться от операционной системы Windows и перейти на идеологии Mac и Linux, которые не совершают этих преступлений, вставляя посредников для предотвращения работы вашего Ctrl-C.
Эрик Лещинский

1

SQL поддерживает запросы, введенные в несколько строк. Только когда вы введете точку с запятой ;, запрос будет выполнен. Вы также должны прекратить любые строки в вашем запросе.

Следите за тем, чтобы копировать и вставлять запросы со строками из пакета обработки текста - кавычки могли быть заменены «умными кавычками», и это испортит ваш запрос.

Если вы ввели незавершенный запрос, он не запускается, и поэтому ввод не работает - MySQL считает, что вы все еще находитесь в середине запроса. Изменения в командной строке показывают, какие данные необходимы для завершения запроса. Например, может потребоваться цитата или двойная цитата. Это мощное средство, и командная строка полезна, но я находил это непонятным, пока не прочитал ответы и комментарии в этой теме.

прочитайте спецификацию здесь

Приглашение «верхнего уровня»:

MySQL>

Если вы видите это, то вы можете ввести команду и завершить ее; и нажмите ввод.

Если вы видите приглашение, подобное этому:

'>
">
->

Затем MySQL ждет, когда вы завершите строку с кавычкой или запрос с точкой с запятой.

Вот как сказать MySQL отменить запутанный неопределенный запрос и вернуть вас в главное приглашение:

\c

Я думаю, что это безопаснее, чем завершать и запускать непреднамеренный запрос. После этого вы должны вернуться к приглашению> и можете выйти с помощью:

exit


0

Вы можете попытаться сбежать с помощью Ctrl+ Shift+D


3
Это артефакт конкретного используемого вами эмулятора терминала, поэтому было бы полезно узнать, какой из них ваш. Ваш, очевидно, переназначил Ctrl-Shift-D в код клавиши, который процесс mysql интерпретирует как выход. Если это так, вы должны иметь возможность переназначить коды клавиш в эмуляторе терминала, чтобы вам не нужно было получать запястный канал для выхода из программы.
Эрик Лещинский
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.