Spec-Zone.ru › MySQL 5.7

3.2 Ввод запросов

Убедитесь, что вы подключены к серверу, как описано в предыдущем разделе. Это само по себе не выбирает базу данных для работы, но это нормально. На данном этапе важнее понять, как вводить запросы, чем сразу переходить к созданию таблиц, загрузке данных в них и извлечению данных из них. В этом разделе описываются основные принципы ввода запросов, используя несколько запросов, которые вы можете попробовать, чтобы ознакомиться с тем, как работает mysql.

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

mysql> SELECT VERSION(), CURRENT_DATE;
+--------------+--------------+
| VERSION()    | CURRENT_DATE |
+--------------+--------------+
| 5.7.1-m4-log | 2012-12-25   |
+--------------+--------------+
1 row in set (0.01 sec)
mysql>

Этот запрос иллюстрирует несколько моментов, касающихся mysql:

  • Запрос обычно состоит из оператора SQL, за которым следует точка с запятой. (Есть некоторые исключения, когда точка с запятой может быть опущена. QUIT, упомянутый ранее, является одним из них. Мы рассмотрим другие позже.)

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

  • mysql отображает выходные данные запроса в табличной форме (строки и столбцы). Первая строка содержит метки для столбцов. Следующие строки — результаты запроса. Обычно метки столбцов — это имена столбцов, которые вы извлекаете из таблиц базы данных. Если вы извлекаете значение выражения, а не столбец таблицы (как в только что показанном примере), mysql помещает в качестве метки столбца само это выражение.

  • mysql показывает, сколько строк было возвращено и сколько времени потребовалось на выполнение запроса, что дает вам общее представление о производительности сервера. Эти значения неточны, потому что они представляют время реальных часов (а не время ЦП или машины), и потому что на них влияют такие факторы, как нагрузка на сервер и задержка сети. (Для краткости, строка «“строки в наборе”» иногда не отображается в оставшихся примерах в этой главе.)

Ключевые слова можно вводить в любом регистре. Следующие запросы эквивалентны:

mysql> SELECT VERSION(), CURRENT_DATE;
mysql> select version(), current_date;
mysql> SeLeCt vErSiOn(), current_DATE;

Вот еще один запрос. Он демонстрирует, что вы можете использовать mysql как простой калькулятор:

mysql> SELECT SIN(PI()/4), (4+1)*5;
+------------------+---------+
| SIN(PI()/4)      | (4+1)*5 |
+------------------+---------+
| 0.70710678118655 |      25 |
+------------------+---------+
1 row in set (0.02 sec)

Показанные до сих пор запросы были относительно короткими, однострочными операторами. Вы даже можете вводить несколько операторов в одной строке. Просто завершайте каждый из них точкой с запятой:

mysql> SELECT VERSION(); SELECT NOW();
+------------------+
| VERSION()        |
+------------------+
| 5.7.10-ndb-7.5.1 |
+------------------+
1 row in set (0.00 sec)

+---------------------+
| NOW()               |
+---------------------+
| 2016-01-29 18:02:55 |
+---------------------+
1 row in set (0.00 sec)

Запрос не обязательно должен быть введен в одну строку, поэтому длинные запросы, требующие нескольких строк, не проблема. mysql определяет конец вашего оператора, обнаруживая завершающую точку с запятой, а не конец строки ввода. (Другими словами, mysql принимает ввод в свободном формате: он собирает строки ввода, но не выполняет их, пока не увидит точку с запятой.)

Вот простой оператор, состоящий из нескольких строк:

mysql> SELECT
    -> USER()
    -> ,
    -> CURRENT_DATE;
+---------------+--------------+
| USER()        | CURRENT_DATE |
+---------------+--------------+
| jon@localhost | 2010-08-06   |
+---------------+--------------+

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

Если вы решили не выполнять вводимый запрос, прервите его, набрав \c:

mysql> SELECT
    -> USER()
    -> \c
mysql>

Здесь тоже обратите внимание на приглашение. Оно возвращается к mysql> после ввода \c, предоставляя обратную связь, которая указывает, что mysql готов к новому запросу.

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

Приглашение Значение
mysql> Готов к новому запросу
-> Ожидает следующей строки многострочного запроса
'> Ожидает следующей строки, ожидая завершения строки, начатой одинарной кавычкой (')
"> Ожидает следующей строки, ожидая завершения строки, начатой двойной кавычкой (")
`> Ожидает следующей строки, ожидая завершения идентификатора, начатого обратной косой чертой (`)
/*> Ожидает следующей строки, ожидая завершения комментария, начатого /*

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

mysql> SELECT USER()
    ->

Если это происходит с вами (вы думаете, что ввели оператор, но единственным ответом является приглашение ->), скорее всего, mysql ожидает точку с запятой. Если вы не обратите внимание на то, что говорит вам приглашение, вы можете некоторое время сидеть и гадать, что нужно сделать. Введите точку с запятой, чтобы завершить оператор, и mysql выполнит его:

mysql> SELECT USER()
    -> ;
+---------------+
| USER()        |
+---------------+
| jon@localhost |
+---------------+

Приглашения '> и "> появляются во время сбора строк (другими словами, MySQL ожидает завершения строки). В MySQL вы можете записывать строки, заключённые в одинарные ' или двойные " кавычки (например, 'hello' или "goodbye"), и mysql позволяет вводить строки, занимающие несколько строк. Когда вы видите приглашение '> или ">, это означает, что вы ввели строку, содержащую строку, начинающуюся с ' или " символа кавычек, но ещё не ввели соответствующую кавычку, которая завершает строку. Это часто указывает на то, что вы случайно пропустили символ кавычки. Например:

mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
    '>

Если вы вводите этот SELECT оператор, затем нажимаете Enter и ждёте результата, ничего не происходит. Вместо того, чтобы гадать, почему этот запрос занимает так много времени, обратите внимание на подсказку, которую даёт приглашение '>. Оно говорит вам, что mysql ожидает увидеть остальную часть незавершенной строки. (Вы видите ошибку в операторе? Строке 'Smith не хватает второй одинарной кавычки.)

Что делать в этом случае? Самое простое — отменить запрос. Однако в данном случае вы не можете просто набрать \c, потому что mysql интерпретирует его как часть собираемой строки. Вместо этого введите закрывающий символ кавычек (чтобы mysql знал, что вы закончили строку), а затем введите \c:

mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
    '> '\c
mysql>

Приглашение меняется обратно на mysql>, что указывает на то, что mysql готов к новому запросу.

Приглашение `> аналогично приглашениям '> и ">, но указывает на то, что вы начали, но не завершили идентификатор в обратных кавычках.

Важно знать, что означают приглашения '>, "> и `>, потому что если вы ошибочно введёте незавершенную строку, все последующие вводимые вами строки, включая строку с QUIT, будут игнорироваться mysql. Это может быть довольно запутанно, особенно если вы не знаете, что вам необходимо предоставить закрывающую кавычку, прежде чем вы сможете отменить текущий запрос.

Примечание

Многострочные операторы с этого момента написаны без вторичных (-> или других) приглашений, чтобы упростить копирование и вставку операторов для самостоятельного тестирования.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/entering-queries.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API