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.