Эта заметка может оказаться полезной для тех, кто только начинает пользоваться СУБД 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 | +-----------------+
Выберем базу командой use db_test;. В ответ получим Database changed. Такой же командой можно сменить базу с текущей, на какую-то другую.
Пока не забыла, выбрать базу можно сразу при открытии сеанса, добавив в конце имя базы. Это будет выглядеть так:
mysql -u username --password=passwd db_test
Узнаем, какие таблицы есть в базе. Для чего запускаем show tables;
+--------------------+ | 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 | | +------------+--------------+------+-----+---------------------+----------------+
Теперь мы знаем, какие поля есть в наших таблицах и можем выполнять разные запросы. Дальше я приведу несколько примеров запросов с кратким пояснением:
Эх, сколько всего можно спросить у масика. Думаю, этих запросов на первый раз будет достаточно для одной таблицы. А можно делать запросы по нескольким таблицам одновременно. Хотя бы один пример приведу. Вывести все уникальные фамилии людей, живущих в городе с названием на букву 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!
Комментарии
Хорошая подборка..так держать ,но хочется продолжения ,особенно со сложной выборкой из нескольких таблиц.....именно конструкции с синтаксисом....
Да, она находится в планах. Как только скомпоную -- отпишусь здесь.
ну и гдеже? =)
Вот интересная статья http://alt-f4.ru/mysql-calendar :)
Кстати на собеседованиях программистов частенько спрашивают такое..
Спасибо,пригодилось
При переносе сайта DLE на другой домен не показывают картинки. Подскажите пожалуйста как исправить? Какой нужно сделать запрос?
Полезные запросы, пригодились.
Хочу тоже сделать свой вклад, если админ не против.
http://sitear.ru/material/mysql-zaprosy - тоже подборочка простых и сложных mysql запросов.