16.4 Управление данными SQL (Managing SQL Data)¶
Для сдачи экзамена Linux+/LPIC-1 необходимо уметь управлять данными внутри базы данных SQL. Внедрение и администрирование баз данных SQL — огромная тема, значительно выходящая за рамки этой книги. Тем не менее ниже приведены основные шаги по установке, а также показано, как добавлять информацию в базу данных и извлекать её. В этой части главы рассматриваются следующие темы:
- Принципы работы баз данных
- Установка MySQL
- Управление данными на SQL-сервере
Начнём с обсуждения того, как работают базы данных SQL.
Принципы работы баз данных¶
База данных (database) — это набор информации, организованной таким образом, чтобы данные можно было быстро выбирать и извлекать по заданному поисковому запросу. За последние 20 лет базы данных стали основой торговли, коммуникаций и государственного управления во всём мире. Вместо огромных хранилищ бумажных документов базы данных позволяют хранить колоссальные объёмы информации в ничтожно малом физическом пространстве.
Службы баз данных работают по модели клиент/сервер. Как правило, клиентская и серверная части устанавливаются на одном сервере баз данных. Клиентское программное обеспечение затем устанавливается на клиентских системах, с которых необходимо обращаться к информации в базе данных. В Linux широко применяются две службы баз данных:
- MySQL
- PostgreSQL
Установив одну из этих служб, вы получаете всё необходимое для запуска, эксплуатации и администрирования базы данных с помощью языка SQL (Structured Query Language — язык структурированных запросов), являющегося стандартным языком доступа к базам данных и управления ими. SQL определяет операторы для выборки и обновления данных в базе — такие как SELECT, UPDATE, DELETE, INSERT и WHERE.
Обе указанные службы реализуют реляционные базы данных (relational databases), организованные иерархически. Реляционные базы данных специализированы для организации и хранения огромных объёмов данных, а также рассчитаны на высокую масштабируемость — способность расти вместе с потребностями организации.
Реляционная база данных организована с помощью полей, записей и таблиц. Поле (field) — это единичная единица информации. Запись (record) — полный набор полей, а таблица (table) — набор записей. Каждая таблица идентифицируется именем, например Customers. Каждая таблица содержит записи (каждая — отдельная строка), которые содержат одно или несколько полей, хранящих непосредственно данные базы. Например, предположим, что определена таблица Customers со следующими тремя записями:
Last First Address City State Zip
Tracy Leah 1234 W. Longfellow Bone Idaho 83401
Morgan Ken 3456 W. 100 S. Rigby Idaho 83442
С помощью языка SQL можно создавать запросы, выбирающие и извлекающие конкретные данные из базы. Например, следующий запрос:
вернёт такие данные:
Для управления данными в базе данных SQL можно использовать следующие команды:
SELECT— извлекает информацию из таблицыUPDATE— изменяет информацию в таблицеDELETE— удаляет информацию из таблицыINSERT INTO— добавляет новые данные в таблицуCREATE TABLE— создаёт новую таблицуALTER TABLE— изменяет существующую таблицуDROP TABLE— удаляет существующую таблицу
Ключевая особенность реляционных баз данных состоит в возможности создавать связи между таблицами, что позволяет формировать взаимосвязанные наборы данных.
Рассмотрев эти основы, перейдём к установке базы данных SQL на вашу Linux-систему.
Установка MySQL¶
Несмотря на то что для Linux существует несколько различных служб баз данных SQL, в этой главе рассматривается использование MySQL Community Server. MySQL — это SQL-сервер баз данных с открытым исходным кодом, входящий в состав установочных носителей большинства дистрибутивов. Он также сравнительно прост в установке и быстром создании баз данных.
MySQL может быть установлен по умолчанию на вашем дистрибутиве Linux, а может и отсутствовать. Если MySQL не установлен, используйте предпочитаемую утилиту управления пакетами для установки следующих пакетов:
mysql-community-servermysql-community-server-clientmysql-community-server-tools
Примечание
Конкретные устанавливаемые пакеты зависят от используемого дистрибутива Linux и версии MySQL.
После установки пакетов MySQL необходимо настроить таблицы привилегий (grant tables) сервера MySQL. Всё управление доступом в MySQL осуществляется внутри самой службы MySQL. Важно понимать, что MySQL имеет собственный уникальный набор учётных записей пользователей, определённых в таблицах привилегий: она не использует учётные записи, определённые в вашей Linux-системе. В базе данных MySQL для этого реализованы пять таблиц:
user— определяет, разрешено ли пользователю подключаться к серверу MySQLdb— определяет, к каким базам данных пользователь имеет доступhost— определяет, с каких хостов разрешён доступ к конкретной базе данныхtables_priv— определяет привилегии доступа для заданной таблицыcolumns_priv— определяет привилегии доступа к конкретным столбцам данных заданной таблицы
Перед использованием MySQL эти таблицы необходимо инициализировать. Для этого перейдите в каталог /usr/bin и выполните в командной строке оболочки команду mysql_install_db. После этого таблицы привилегий готовы к работе. Команду mysql_install_db достаточно выполнить один раз — сразу после первоначальной установки MySQL. Она создаёт две учётные записи пользователей MySQL: root и анонимного пользователя.
После создания таблиц привилегий необходимо запустить службу базы данных. Если в вашем дистрибутиве используется init, можно воспользоваться сценарием mysql init, расположенным в каталоге сценариев init. Затем с помощью команды insserv или chkconfig обеспечьте запуск службы базы данных при каждой загрузке системы. Если в вашем дистрибутиве используется systemd, применяйте команду systemctl для включения и запуска службы mysql.
Чтобы убедиться, что сервер запущен, введите в командной строке оболочки mysqladmin version. Вы должны увидеть вывод, подобный следующему:
openSUSE:/usr/bin # mysqladmin version
mysqladmin Ver 8.42 Distrib 5.6.12, for Linux on i686
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective owners.
Server version 5.6.12
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/run/mysql/mysql.sock
Uptime: 40 sec
Threads: 1 Questions: 2 Slow queries: 0 Opens: 70 Flush tables: 1
Open tables: 63 Queries per second avg: 0.050
После запуска службы можно выполнить несколько тестов для проверки корректной работы сервера MySQL. Например, просмотреть базы данных, существующие на сервере, можно командой mysqlshow в командной строке. Вы должны увидеть базы данных, как показано здесь:
openSUSE:~ # mysqlshow
+--------------------+
| Databases |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
Таблицы внутри любой из отображаемых баз данных можно также просматривать с помощью команды mysqlshow имя_таблицы.
Убедившись в нормальной работе MySQL, необходимо назначить пароли учётным записям пользователей MySQL. После выполнения mysql_install_db учётная запись базы данных root создана, но пароль ей не назначен. Чтобы исправить это, введите в командной строке оболочки mysqladmin –u root password 'ваш_новый_пароль'. Затем ограничьте доступ root к системе, на которой запущен MySQL, введя в командной строке оболочки mysqladmin –u root –h имя_хоста password пароль_root_mysql.
На этом сервер MySQL настроен и готов к работе. Теперь можно управлять данными SQL!
Управление данными на SQL-сервере¶
Для управления данными на сервере MySQL необходимо подключиться к нему с помощью какого-либо SQL-клиента. Существует большое разнообразие клиентов. Однако для сдачи экзамена Linux+/LPIC-1 лучше всего разобраться с клиентом MySQL для командной строки. Умея манипулировать данными SQL-сервера с помощью этой утилиты, вы легко освоите любые другие клиенты.
Клиент MySQL для командной строки запускается вводом mysql в командной строке оболочки. Синтаксис: mysql –h имя_хоста –u имя_пользователя –p. Например, для подключения к службе MySQL, запущенной на локальной Linux-системе от имени пользователя root, введите mysql –h localhost –u root –p. Это показано ниже:
openSUSE:/usr/bin # mysql -h localhost -u root –p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.6.12 openSUSE package
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
После подключения к базе данных вы можете выполнять любые поддерживаемые конструкции SQL-команд. Попрактикуемся в этом в следующем упражнении.
Упражнение 16-3. Управление данными SQL
В этом упражнении вы создадите новую базу данных customers и заполните её данными. Упражнение можно выполнить на виртуальной машине, прилагаемой к этой книге. Запустите снимок 16-3 для получения корректно настроенной среды.
Видео
Посмотрите видео «Упражнение 16-3» с демонстрацией выполнения этого задания.
Выполните следующие шаги (точки с запятой в командах должны оставаться):
- Переключитесь на root с помощью команды
su–. - Настройте таблицы привилегий сервера MySQL: перейдите в каталог
/usr/binи выполните командуmysql_install_dbв командной строке оболочки. - Запустите службу MySQL, введя в командной строке оболочки
servicectl start mysql. - Убедитесь в запуске сервера, введя команду
mysqladmin versionв командной строке оболочки. - Назначьте пароль учётной записи root MySQL, введя в командной строке оболочки
mysqladmin –u root password 'ваш_новый_пароль'. - Подключитесь к серверу MySQL из командной строки, введя
mysql –h localhost –u root –p. По запросу введите только что заданный пароль root. - В приглашении
mysql>введитеCREATE DATABASE customers;. Должно появиться подтверждение создания базы данных. - Для работы с новой базой данных введите в приглашении
mysql>командуUSE customers;. -
firstlastphonelastcontact
Чтобы просмотреть таблицы, определённые по умолчанию в новой базе данных, введите в приглашении
mysql>командуSHOW TABLES;. Таблицы не должны быть определены. На этом этапе задача несколько усложняется. Для создания таблицы необходимо использовать командуCREATE TABLE, при этом нужно также определить столбцы таблицы в самой команде. Поэтому сначала следует определить поля для каждой записи таблицы. Также необходимо решить, какой тип данных будет храниться в каждом поле и какова будет длина таблицы. В создаваемой таблице потребуется четыре столбца:Поля
firstиlastбудут содержать буквенные символы переменной длины. Полеphoneбудет содержать десять цифр с двумя дефисами (код_региона-префикс-номер). Столбецlastcontactбудет содержать дату последней покупки каждого клиента. -
Создайте новую таблицу в базе данных, введя в приглашении
mysql>команду: -
Убедитесь в корректном создании таблицы и столбцов, введя в приглашении
mysql>командуDESCRIBE active;. Должна отобразиться созданная таблицаactiveс её полями:mysql> DESCRIBE active; +-------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+-------------+------+-----+---------+-------+ | first | varchar(15) | YES | | NULL | | | last | varchar(15) | YES | | NULL | | | phone | char(12) | YES | | NULL | | | lastcontact | date | YES | | NULL | | +-------------+-------------+------+-----+---------+-------+ 4 rows in set (0.01 sec)Теперь, когда таблица определена, в неё можно вставлять данные.
-
Чтобы добавить запись для клиента Robb Tracy, введите
INSERT INTO active VALUES ('Robb','Tracy','801-756-5555','2015-07-01');. -
Для просмотра только что добавленных данных используется следующий синтаксис:
Например, чтобы просмотреть все данные в таблице
active, введите в приглашенииmysql>командуSELECT * FROM active;. Вы должны увидеть следующие данные:
Можно также ввести SELECT first,phone FROM active;, чтобы просмотреть только определённые поля каждой записи. Другой пример: SELECT * FROM active WHERE last='Tracy'; — для просмотра только записей, содержащих строку "Tracy" в поле last.
Данные из таблицы также можно удалять. Синтаксис:
Например, чтобы удалить запись Robb Tracy из таблицы, введите в приглашении mysql> команду DELETE FROM active WHERE last='Tracy';. Однако перед удалением рекомендуется сначала выполнить эквивалентную команду SELECT, чтобы точно увидеть, что именно будет удалено. Например, сначала выполните SELECT FROM active WHERE last='Tracy';, а затем DELETE FROM active WHERE last='Tracy';.
Изменять существующие данные можно с помощью команды UPDATE. Синтаксис:
Для объединения результатов запроса SELECT по одному или нескольким столбцам можно использовать оператор GROUP BY. Он часто применяется совместно с функцией SUM(). Например, предположим, что таблица active содержит два дополнительных столбца quantity и custid и используется для регистрации отдельных заказов. В такой ситуации у каждого клиента может быть несколько записей в таблице — по одной для каждого заказа. Команда SELECT custid,SUM(quantity) AS "Total" FROM active GROUP BY custid; объединит по одному результату для каждого уникального идентификатора клиента, отображая суммарное приобретённое количество для каждого (в новом столбце с именем "Total").
Совет
Для объединения полей из двух разных таблиц можно также использовать команду JOIN.