Spec-Zone .ru
спецификации, руководства, описания, API

3.2. Ввод Запросов

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

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

mysql> SELECT VERSION(),
        CURRENT_DATE;+--------------+--------------+| VERSION()    | CURRENT_DATE |+--------------+--------------+| 5.6.1-m4-log | 2010-08-06   |+--------------+--------------+1 row in set (0.01 sec)mysql>

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

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

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.6.1-m4-log |+--------------+1 row in set (0.00 sec)+---------------------+| NOW()               |+---------------------+| 2010-08-06 12:17:13 |+---------------------+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()    -> \cmysql>

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

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

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

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

mysql> SELECT USER()    ->

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

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

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

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

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

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

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

Подсказка возвращается к mysql>, указание, что mysql готов к новой команде.

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

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