PHP скрипты

MySQL

Apache

phpMyADmin

2.3: Ввод запросов в MySQL

Главная Страница » Книги по PHP » MySQL уроки для начинающих с нуля » Ввод запросов в MySQL

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

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

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

mysql> SELECT VERSION(), CURRENT_DATE;
+-------------+--------------+
| version()   | CURRENT_DATE |
+-------------+--------------+
| 4.1.20a-log | 2004-07-19   |
+-------------+--------------+
1 row in set (0.01 sec)
mysql>

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

  • команда обычно состоит из инструкции SQL, сопровождаемой точкой с запятой. Имеются некоторые исключительные ситуации, где точка с запятой не требуется, например, упомянутая выше команда QUIT. Мы доберемся до других позже;
  • когда вы выдаете команду, mysql посылает ее серверу для выполнения и отображает результаты, затем печатает другую подсказку mysql>, чтобы указать, что готов для приема следующей команды;
  • mysql отображает вывод запроса как таблицу (строки и столбцы). Первая строка содержит метки для столбцов. Следующие строки задают результаты запроса. Обычно, метки столбца представляют собой имена столбцов, которые вы выбираете из таблиц базы данных. Если вы получаете значение выражения, а не столбец таблицы, mysql маркирует столбец, используя выражение непосредственно;
  • mysql показывает, сколько строк было возвращено и как долго обрабатывался запрос, что дает вам общие данные относительно эффективности сервера. Эти значения неточны, потому что они представляют не машинное время или затраты времени процессора, а рамки выполнения запроса. На эти данные действуют, например задержки в сетевом канале. Для краткости строка rows in set не показывается в оставшихся примерах из этой главы, поскольку не имеет сейчас никакого значения;
  • ключевое слово SELECT является одной из важнейших конструкций языка SQL. Она предписывает найти то, что определено выражением после этого слова.

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

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

Рекомендуется вводить ключевые слова языка SQL БОЛЬШИМИ буквами, а все прочие элементы запроса маленькими. Так вам будет проще разобраться в сложном запросе, отделить в нем команды от данных.

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

mysql> SELECT SIN(PI ()/4), (4 + 1)*5;
+------+------+
| SIN(PI ()/4) | (4+1) *5 |
+------+------+
| 0.707107 | 25 |
+------+------+

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

mysql> SELECT VERSION(); SELECT NOW();
+------+------+
| version() |
+------+------+
| 3.22.20a-log |
+------+------+
+------+--------+
| NOW() |
+------+--------+
| 1999-03-19 00:15:33 |
+------+--------+

Однако команды бывают и длинными. Язык SQL известен как раз своими длинными инструкциями. Но длинные команды, которые требуют нескольких строк, - не проблема. Клиент mysql определяет конец оператора, ища точку с запятой, а не конец строки. Другими словами, mysql принимает ввод свободного формата: он собирает вводимые строки в одну, но не выполняет их до тех пор, пока не увидит точку с запятой.

Имеется простая инструкция с длинной строкой:

mysql> SELECT
    -> USER()
    -> ,
    -> CURRENT_DATE;
+----------+-------+
| USER() | CURRENT_DATE |
+----------+-------+
| evgenievich.andrei@yandex.ru | 2004-03-18 |
+----------+-------+

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

Если вы решаете, что не хотите выполнять команду, но находитесь в процессе ввода, отмените ее вводом:

mysql> SELECT
    -> USER()
    ->
mysql>

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

Следующая таблица 2.1 показывает все подсказки и обобщает их смысл:

Таблица 2.1. Смысл подсказок клиентской программы:

Подсказка Смысл
mysql> Ожидание новой команды
-> Ожидание следующей отроки многострочной команды
"> Ожидание следующей строки при сборе строки, которая начинается с одиночной кавычки (")
«> Ожидание следующей строки при сборе строки, которая начинается с двойной кавычки («)

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

mysql> SELECT USER ()
     >

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

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

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

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

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

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

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

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

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

Вот тут нужно быть предельно внимательным. Дело в том, что строка может быть ограничена кавычками двух типов: " и «. Они взаимозаменяемы, но надо соблюдать парность. То есть, если вы начали строку с какой-то кавычки, закончить строку должны точно такой же кавычкой.

Поделиться с друзьями