Простые запросы MySQL. Начало работы.

Mysql для начинающих

Эта заметка может оказаться полезной для тех, кто только начинает пользоваться СУБД MySQL. Всё бывает в первый раз. Например, вы устроились на работу, или захотели работать в проекте, где используется эта система.

Читать подробные мануалы, конечно, полезно. Но мне кажется, что отдача от чтения будет выше, если человек хотя бы в общих чертах будет представлять с чем имеет дело. Если он уже умеет написать пару запросов или команд, и знает, что из этого получится.

Ну а с чего начать? Вот перед нами окошко консоли (линуксовой или cmd в Windows). И мы знаем, что кто-то уже установил и настроил MySQL сервер, и даже положил туда разные базы и таблицы. И даже создал вам пользователя и сообщил пароль. Посмотрим, что там есть.

Сначала выполним подключение к mysql-серверу, запущенному на этом компьютере, откроем сеанс, так сказать:
mysql -u username --password=passwd
Здесь usename - имя вашего пользователя, passwd - пароль. Я это пишу всегда в таком сочетании: -u для имени пользователя и --password= для пароля. По идее, можно делать --user=username или -ppasswd, но тогда надо помнить, что пароль пишется без пробела после ключа -p. Можно и после ключа -u не делать пробел. В общем, вариантов много.

При вводе команд помним про ; в конце, иначе масик (так ласково называют MySQL) выведет значок ->, требуя продолжения банкета, т.е. команды. Если вы все же поторопились и нажали Enter, можете поставить знак препинания ; и после значка -> и снова нажать Enter.

Далее посмотрим, какие базы данных у нас имеются (вывод списка доступных баз данных на сервере).
show databases;
Этот запрос выведет список всех баз, доступных вашему пользователю вот в таком виде:

+-----------------+
| Database        |
+-----------------+
| db_test         |
| db_test_1       |
| db_not_test     |
+-----------------+

Выбрать базу данных mysql можно командой use db_test;. В ответ получим Database changed. Такой же командой можно сменить базу с текущей, на какую-то другую.

Пока не забыла, выбрать базу можно сразу при открытии сеанса, добавив в конце имя базы. Это будет выглядеть так:
mysql -u username --password=passwd db_test

Узнаем, какие таблицы есть в базе. Для чего запускаем show tables;. Эта команда выводит список таблиц в текущей базе данных mysql.

+--------------------+
| Tables_in_db_test  |
+--------------------+
| person             |
| address            |
| interests          |
+--------------------+

Посмотрим описание таблицы - какие в ней есть поля, какого они типа, какие из полей проиндексированы (для новичков: индексация означает, что операции вроде поиска по этим полям будут быстрее). Команда desc person; выведет нам информацию. Поле Key как раз и означает индексацию.

+------------+--------------+------+-----+---------------------+----------------+
| Field      | Type         | Null | Key | Default             | Extra          |
+------------+--------------+------+-----+---------------------+----------------+
| person_no  | int(7)       |      | PRI | NULL                | auto_increment |
| name       | varchar(25)  |      |     |                     |                |
| last name  | varchar(50)  |      |     |                     |                |
| age        | int(3)       |      |     | 0                   |                |
| address_no | int(7)       |      |     | 0                   |                |
+------------+--------------+------+-----+---------------------+----------------+

Теперь мы знаем, какие поля есть в наших таблицах и можем выполнять разные запросы. Дальше я приведу несколько примеров запросов с кратким пояснением:

1. Узнать количество записей в таблице mysql
SELECT count(*) FROM table_name;
2. Выбрать все записи из таблицы mysql
SELECT * FROM table_name;
3. Выбрать несколько записей из таблицы, например 5. Это полезно, когда надо узнать, как примерно выглядят данные в таблице.
SELECT * FROM table_name LIMIT 5;
4. Выбрать все записи из person, отсортированные в порядке возрастания номера person_no.
SELECT * FROM person ORDER BY person_no;
5. Выбрать все записи из person, отсортированные в порядке убывания номера person_no.
SELECT * FROM person ORDER BY person_no DESC;
6. Выбрать несколько(12) записей из person, отсортированные в порядке возрастания номера person_no.
SELECT * FROM person ORDER BY person_no LIMIT 12;
7. Выбрать из person все записи, где поле name равно Anna
SELECT * FROM person WHERE name='Anna';
8. Выбрать из person все записи, где поле name начинается с An
SELECT * FROM person WHERE name LIKE 'An%';
9. Выбрать все записи из person, упорядоченные по person_no, где поле name заканчивается на na
SELECT * FROM person WHERE name LIKE '%na' ORDER BY person_no;
10. Выбрать все встречающиеся пары name-last_name из таблицы.
SELECT name, last_name FROM person;
11. Выбрать все различные (уникальные) встречающиеся пары name-last_name из таблицы. Повторы будут выброшены из результатов.
SELECT DISTINCT name, last_name FROM person;

Эх, сколько всего можно спросить у масика. Думаю, этих запросов на первый раз будет достаточно для одной таблицы. А можно делать запросы по нескольким таблицам одновременно. Хотя бы один пример приведу. Вывести все уникальные фамилии людей, живущих в городе с названием на букву L. (предполагаем, что в таблице address есть поля address_no, city).
SELECT DISTINCT last_name FROM person p, address adr WHERE p.adress_no = adr.address_no AND city LIKE 'L%';

Если у двух таблиц есть столбцы с одинаковым именем, то MySQL не может угадать, из какой именно таблицы поле нам потребовалось. Можно явно указать имя таблицы, поставив его перед именем поля и соединив их точкой (address.address_no). А можно дать таблицам имена прямо в запросе, чтобы было покороче или попонятнее, (в примере это p для person и adr для address). Выбрать нужное поле можно, указав его так же через точку после короткого имени таблицы (adr.address_no).

Желаю всем успехов в постижении MySQL!

Теги: 

Добавить комментарий

Filtered HTML

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешённые HTML-теги: <a> <em> <i> <strong> <b> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd> <p> <br>
  • Строки и параграфы переносятся автоматически.

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.
CAPTCHA
CAPTCHA на основе изображений
Введите код с картинки