Spec-Zone.ru › MySQL 9.2

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

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

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

mysql> SELECT VERSION(), CURRENT_DATE;
+-----------+--------------+
| VERSION() | CURRENT_DATE |
+-----------+--------------+
| 8.4.0-tr  | 2024-01-25   |
+-----------+--------------+
1 row in set (0.00 sec)

mysql>

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

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

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

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

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

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

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() |
+-----------+
| 8.4.0-tr  |
+-----------+
1 row in set (0.00 sec)

+---------------------+
| NOW()               |
+---------------------+
| 2024-01-25 18:33:04 |
+---------------------+
1 row in set (0.00 sec)

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

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

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

В этом примере обратите внимание, как приглашение меняется с 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 готов к новому запросу.

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

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

Примечание

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

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

Spec-Zone.ru

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