Заполнение и изменение таблиц

Имея таблицы person и favorite_food, можно приступить к изучению четырех SQL-выражений для работы с данными: insert, update, delete и select.

Вставка данных.

Поскольку пока что в наших таблицах person и favorite_food нет данных, из четырех SQL-выражений для работы с данными первым рассмотрим insert. В выражении insert три основных компонента:

• Имя таблицы, в которую должны быть добавлены данные.

• Имена тех столбцов таблицы, которые должны быть заполнены.

• Значения, которыми должны быть заполнены столбцы.

Таким образом, не обязательно предоставлять данные для всех столбцов таблицы (если только все столбцы таблицы не были определены как not null). В некоторых случаях столбцы, не включенные в исходное выражение insert, будут заполнены позже с помощью выражений update. Бывает, что столбец в какой-то строке вообще никогда не заполняется данными.

Формирование числовых ключей

Прежде чем заполнить таблицу person данными, полезно обсудить процесс формирования значений числовых первичных ключей. Кроме выбора числа «от фонаря» есть два варианта:

• Найти в таблице самое большое на данный момент значение первичного ключа и прибавить 1.

• Позволить серверу БД предоставить значение.

Хотя первый вариант и кажется допустимым, он становится проблематичным в многопользовательской среде, поскольку два пользователя могут одновременно работать с таблицей и сгенерировать одно и то же значение первичного ключа. Напротив, все серверы БД, присутствующие сегодня на рынке, обеспечивают более надежный, более устойчивый к ошибкам метод формирования числовых ключей. Иногда, например в Oracle Database, используется отдельный объект схемы (называемый последовательностью (sequence)). Однако в случае с MySQL надо просто включить для столбца первичного ключа свойство

Auto-increment (автоприращение).

Изменим описание существующей таблицы:

ALTER TABLE person MODIFY person_id SMALLINT UNSIGNED AUTO_INCREMENT;

Это выражение, по существу, переопределяет столбец person_id таблицы person.

При вводе данных в таблицу person просто задайте значение null для столбца person_id, и MySQL заполнит столбец следующим доступным числом (для столбцов с автоприращением MySQL по умолчанию начинает отсчет с 1).

Выражение insert

Следующее выражение создает в таблице person строку для Вильяма Тернера (William Turner):

INSERT INTO person

(person_id, fname, lname, gender, birth_date)

VALUES (null, 'William','Turner', 'M', '1975-05-27');

С помощью выражения select можно увидеть только что добавленные в таблицу данные:

SELECT person_id, fname, lname, birth_date

FROM person;

Как видите, сервер MySQL генерирует для первичного ключа значение 1.

Прежде чем двигаться дальше, сделаю несколько замечаний относительно предыдущего выражения insert:

• Не заданы значения ни для одного столбца адреса. Это нормально, поскольку для них допускается значение null. • Для столбца birth_date было предоставлено строковое значение. Поскольку строка соответствует формату преобразует ее для вас в дату.

• Количество и типы столбцов и предоставляемых значений должны совпадать. Если указывается семь столбцов и предоставляется только шесть значений, или если предоставленные значения не могут быть преобразованы в соответствующий тип данных для соответствующего столбца, вы получите ошибку.

Вильям также предоставил информацию о своих любимых блюдах. Вот три выражения вставки, позволяющих записать его кулинарные предпочтения:

INSERT INTO favorite_food (person_id, food)

VALUES (1, 'pizza');

INSERT INTO favorite_food (person_id, food)

VALUES (1, 'cookies');

INSERT INTO favorite_food (person_id, food)

VALUES (1, 'nachos');

Чтобы Вильям не скучал, можно выполнить еще одно выражение insert и добавить в таблицу person Сьюзен Смит (Susan Smith):

INSERT INTO person

(person_id, fname, lname, gender, birth_date)

VALUES (null, 'Susan','Smith', 'F', '1975-11-02');

Обновление данных

При первичном вводе информации в таблицу о Вильяме Тернере в выражение insert не были включены данные для различных столбцов адреса. Следующее выражение показывает, как заполнить эти столбцы с помощью выражения update:

UPDATE person

SET fname = 'Titres'

WHERE person_id = 1;

Одним выражением update можно изменять несколько столбцов. Одним выражением также можно изменять несколько строк в зависимости от условий блока where.

Удаление данных

Похоже, Вильям и Сьюзен не вполне ладят друг с другом, поэтому один из них должен уйти. Поскольку Вильям был первым, Сьюзен будет вежливо «выставлена» выражением delete:

DELETE FROM person

WHERE person_id = 2;

Опять же для выделения интересующей строки используется первичный ключ, поэтому из таблицы удаляется всего одна строка. Как и в случае выражения update, можно удалить и несколько строк. Все зависит от условий, заданных в блоке where. Если блок where опущен, будут удалены все строки.

Наши рекомендации