Эта заметка может оказаться полезной для тех, кто только начинает пользоваться СУБД 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 :)
Кстати на собеседованиях программистов частенько спрашивают такое..
Отправить комментарий