SQL

MySQL

MySQL

В случае если данные с которыми работает программа отличаются сложной логикой взаимодействия, простых текстовых файлов XML или JASON уже недостаточно. Приходится использовать специальные программы-сервера — системы управления базами данных (СУБД). Здесь мы рассмотрим язык SQL (structured query language) на котором эти системы (сервера баз данных) общаются с пользователями и прикладными (клиентскими) программами. Для примера будем использовать популярную реляционную СУБД MySQL.
Из теории нам пока будет достаточно минимальных представлений. Будем считать, что база данных это множество таблиц. Таблица состоит из строк (записей). Колонки (столбцы, поля) таблицы имеют определенное имя и тип.

Установка СУБД MySQL

  • На koding.com достаточно
    Но в учебных целях лучше воспользоваться общей процедурой для Ubuntu linux из следующего пункта.
  • В Ubuntu linux:
    1. Обновить списки пакетов
    2. Установить клиент, сервер и общие файлы СУБД MySQL
    3. Придумать и ввести пароль для главного пользователя root
  • Если планируется дальнейшее программирование на PHP, то возможно придется установить соответствующее расширение и перезапустить Web-сервер
  • Запустить консоль MySQL и ввести тот же пароль
  • Для выхода из клиента MySQL необходимо нажать комбинацию клавиш Ctrl+D

Детальнее с процессом установки можно познакомиться в этом подробном руководстве.

Создание базы данных

  • Для просмотра существующих баз show databases;. Сейчас скорее всего существует только служебная база (или несколько) с инфраструктурой системы.
  • Создадим базу данных для экспериментов test_base:
  • Удобнее сразу сообщить, что дальнейшие команды будут работать именно с этой базой данных. use test_base;

Создание пользователя

После запуска клиентской консоли можно давать СУБД различные команды от имени главного пользователя root. Но лучше создать контролируемого пользователя и без необходимости не использовать привилегированный доступ.

  1. Создадим на той машине, на которой запущена консоль нового пользователя со входом по паролю . Имя пользователя и пароль лучше выбрать другими.
  2. Созданный пользователь не обладает никакими правами — в некоторых системах он не может даже входить. Пользователю нужно предоставить необходимые права для работы в системе. Старайтесь делать это по минимуму: Здесь мы предоставили пользователю stud полный доступ к файлам базы test_base на сервере localhost.
  3. Чтобы войти в СУБД с этим новым логином необходимо закрыть клиентскую консоль Ctrl+D и снова запустить ее под другим пользователем: сообщив пароль.

Создание таблиц

Вставка записей (строк) в таблицу

  • insert into A values (1, 'Pushkin', True);
  • insert into A values (2, 'Safo', False);
  • Просмотреть список таблиц, чтобы убедиться, что таблица создана успешно

Простые запросы информации

  • Получить значения всех полей всех строк
  • Получить значения ID и NAME из строк со значением true в поле GENDER

Ключи

Если выполнить команду вставки несколько раз, то в нашей таблице появится несколько абсолютно одинаковых строк. Обычно это не желательно. Хотелось бы иметь возможность однозначно идентифицировать нужную строку по значению какого-либо поля. В нашем случае таким полем будет ID. Чтобы поручить СУБД следить за уникальностью значений этого поля и использовать эти значения как уникальные ключи строк при создании таблицы следует использовать модификатор PRIMARY KEY. Например, мы могли создать таблицу A так:

Теперь попытка создать две строки с одинаковыми ID приведет к ошибке.

Поскольку у нас уже имеется таблица А, мы можем просто модифицировать ее добавив первичный ключ командой alter table:

<

blockquote>Детальнее с работой в MySQL можно познакомиться <a href=http://www.mysql.ru/docs/mysql-man-4.0-ru/tutorial.html» target=»_blank»>в этом подробном руководстве.

Связанные таблицы

Связывать таблицы друг с другом приходится практически всегда. Это делается при помощи FOREIGN KEY. Связывание проводят в тех случаях когда одна таблица ссылается на информацию из другой. Например, в таблице студентов в поле ВУЗ логично указать ссылку на таблицу ВУЗов. Делается это так:

  1. Создадим простую таблицу ВУЗов:
    Обратите внимание на наличие в этой таблице PRIMARY KEY. Это необходимо, иначе ссылаться на строки таблицы будет невозможно. Лучше было бы внести небольшую автоматизацию и поручить СУБД самой выбирать последовательные числа для идентификаторов строк при помощи модификатора AUTO_INCREMENT. Заодно запретим оставлять это поле пустым:
  2. Вставим несколько записей в таблицу: Обратите внимание, что поскольку мы вводим значения не во все поля, синтаксис команды несколько изменился. Сравните с предыдущим вариантом вставки строк в таблицу.
  3. Убедимся, что все хорошо. Команда
    должна показать все три строки таблицы. Обратите внимание на автоматически созданные значения в поле ID.
  4. Теперь создадим таблицу студентов, которая будет ссылаться на таблицу ВУЗов при помощи «чужого ключа» (FOREIGN KEY): Обратите внимание на то, что тип поля University в этой таблице должен совпадать с типом поля ID в таблице Universities.
  5. Добавим несколько студентов в таблицу:
  6. Посмотрим, как согласуется информация в таблицах:

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

Теперь попробуйте разобраться в этом переводе с простым и понятным примером.

Достаточно полное описание синтаксиса команд SQL в редакции MySQL можно найти здесь.

Работа из программ на С++

Составим простой код для соединения с нашей базой данных

[/crayon]

}

Здесь мы предполагаем, что пароль пользователя root просто 123.
Для компиляции этой программы нужно предварительно установить библиотеки разработчика MySQL:

Потом при компиляции нужно будет указывать будет указывать путь к заголовочным файлам и библиотекам MySQL:

Подробнее о функциях mysql.h можно почитать здесь. Также можно почитать и полное руководство по MySQL, но лучше это отложить на потом.

Если еще остались силы, давайте разберем самый сложный пример — распечатка результатов работы SQL запроса:

Надеюсь все помнят, что запускать откомпилированные программы нужно как-то так

Мазурок Игорь Евгеньевич

Мазурок Игорь Евгеньевич

Разработчик программного и информационного обеспечения.
Доцент Одесского национального университета имени И.И.Мечникова
Учёный в области защиты и противодейтствия в интеллектуальных информационных системах
Мазурок Игорь Евгеньевич

Latest posts by Мазурок Игорь Евгеньевич (see all)