поддержку транзакций (транзакции мы рассматривали в главе 1, когда обсуждали понятие целостности данных) и блокировок отдельных строк, благодаря которым обеспечивается высокая производительность операций изменения данных в многопользовательском режиме.

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

Таблицы MyISAM не поддерживают объединение нескольких операций в единую транзакцию, поэтому, в частности, невозможно автоматическое поддержание целостности связей между такими таблицами. Однако таблицы MyISAM также часто используются: их преимуществом является высокая скорость выполнения поисковых запросов и меньшая нагрузка на системные ресурсы. Если при настройке сервера MySQL (о ней вы узнали из главы 1) вы выбрали в качестве типа базы данных вариант Multifunctional Database (Многофункциональная база данных) или Transactional Database Only (Транзакционная база данных), либо если вы настраивали сервер в стандартном режиме (в этом случае тип базы данных был задан автоматически), то по умолчанию применяется тип таблиц InnoDB. В этом случае, если требуется создать таблицу с типом MyISAM, добавим в команду создания таблицы выражение ENGINE MyISAM. Если же при настройке вы предпочли вариант Non-Transactional Database Only (Нетранзакционная база данных), то по умолчанию применяется тип таблиц MyISAM, а таблицы типа InnoDB не поддерживаются.

Все таблицы нашего примера (см. листинги 2.2–2.4) были созданы с параметром ENGINE InnoDB. Это дало нам возможность настроить внешние ключи в таблице Orders (Заказы) для поддержания целостности связей этой таблицы с таблицами Customers (Клиенты) и Products (Товары). Вместо ключевого слова ENGINE можно использовать его синоним – слово TYPE.

• AUTO_INCREMENT <Начальное значение>.

Задание этого свойства для таблицы, в которой есть столбец со свойством AUTO_INCREMENT, позволяет начать нумерацию в этом столбце не с единицы, а с указанного вами значения. Например, если номера заказов должны начинаться с 1000, нужно в команду создания таблицы Orders (см. листинг 2.4) включить параметр AUTO_INCREMENT 1000.

• CHARACTER SET <Имя кодировки>.

Данный параметр определяет кодировку по умолчанию для символьных столбцов таблицы.

Все таблицы нашего примера (см. листинги 2.2–2.4) были созданы с параметром CHARACTER SET utf8. Поэтому все данные о клиентах и товарах будут храниться в этой кодировке.

Если не задана кодировка для таблицы, то по умолчанию используется кодировка, установленная для базы данных. Если и для базы данных кодировка не была указана, то используется кодировка, установленная по умолчанию при настройке MySQL. Подробнее о кодировках и правилах сравнения символьных значений было сказано в разделе «Создание базы данных».

• COLLATE <Имя правила сравнения>.

Данный параметр определяет правило сравнения значений, используемое по умолчанию для символьных столбцов таблицы.

Если не задано правило сравнения для таблицы, то по умолчанию используется правило, установленное для базы данных.

• CHECKSUM 1.

Данный параметр включает проверку контрольной суммы для строк таблицы типа MyISAM, что позволяет быстро обнаруживать поврежденные таблицы.

• COMMENT 'Текст комментария'.

Произвольное текстовое описание таблицы длиной до 60 символов. Например, описание для таблицы Customers (Клиенты) можно задать, включив в команду создания таблицы параметр

COMMENT 'Сведения о клиентах'

Прочие опциональные параметры таблицы либо используются в целях оптимизации (об оптимизации пойдет речь в главе 6), либо относятся к типам таблиц, которые в данной книге не рассматриваются. На этом мы завершаем изучение команды создания таблицы – CREATE TABLE. В следующем подразделе мы рассмотрим команду, с помощью которой можно изменить структуру уже существующей таблицы.

Изменение структуры таблицы

В этом подразделе будет описано, как изменить те параметры таблицы, которые мы обсуждали в предыдущем подразделе. Для модификации ранее созданной таблицы используется команда ALTER TABLE. Задавая различные параметры этой команды, вы можете внести в таблицу следующие изменения.

• Добавить столбец вы можете с помощью команды

ALTER TABLE <Имя таблицы>

ADD <Имя столбца> <Тип столбца> [<Свойства столбца>]

[FIRST или AFTER <Имя предшествующего столбца>];

В этой команде мы указываем имя таблицы, в которую добавляется столбец, а также имя и тип добавляемого столбца (о типах столбцов см. пункт «Типы данных в MySQL»). При необходимости можно также задать свойства добавляемого столбца (см. пункт «Свойства столбцов»). Кроме того, можно определить место нового столбца среди уже существующих: добавляемый столбец может стать первым (FIRST) или следовать после указанного предшествующего столбца (AFTER). Если место столбца не задано, он становится последним столбцом таблицы. Например, чтобы добавить в таблицу Products (Товары) столбец store (название склада, где хранится каждый вид товара), выполните команду

ALTER TABLE Products ADD store VARCHAR(100) AFTER details;

...

Примечани е

Добавить столбец со свойством AUTO_INCREMENT можно только с одновременным созданием индекса или ключа для этого столбца. Например, если бы столбец id не был включен в таблицу Products (Товары) при ее создании, мы могли бы добавить его с помощью команды

ALTER TABLE Products

ADD id BIGINT AUTO_INCREMENT, ADD PRIMARY KEY (id);

• Добавить первичный ключ вы можете с помощью команды

ALTER TABLE <Имя таблицы>

ADD [CONSTRAINT <Имя ключа>]

PRIMARY KEY (<Список столбцов>);

При добавлении в таблицу первичного ключа мы указываем имя таблицы, в которую нужно добавить ключ, и имена столбцов, которые будут образовывать первичный ключ (эти столбцы должны уже существовать в таблице). Более подробно о первичных ключах было сказано в пункте «Ключевые столбцы и индексы». Например, если бы первичный ключ не был определен при создании таблицы Orders (Заказы), мы могли бы добавить его с помощью команды

ALTER TABLE Orders ADD PRIMARY KEY (id);

• Добавить внешний ключ вы можете с помощью команды

ALTER TABLE <Имя таблицы>

ADD [CONSTRAINT <Имя внешнего ключа>]

FOREIGN KEY [<Имя индекса>] (<Список столбцов>)

REFERENCES <Имя родительской таблицы>

(<Список столбцов первичного ключа родительской таблицы>)

[<Правила поддержания целостности связи>];

При добавлении в таблицу внешнего ключа мы указываем имя таблицы, в которую нужно добавить ключ, имена столбцов, которые будут образовывать внешний ключ (эти столбцы должны уже существовать в таблице), а также имя родительской таблицы (на которую будет ссылаться данная таблица) и имена столбцов, образующих первичный ключ в родительской таблице. В случае необходимости можно также задать имя создаваемого внешнего ключа, имя индекса, автоматически добавляемого для столбцов внешнего ключа, и правила поддержания целостности связи при удалении и изменении строк родительской таблицы. Например, если бы внешний ключ не был определен при создании таблицы Orders (Заказы), мы могли бы добавить его с помощью команды

ALTER TABLE Orders

ADD FOREIGN KEY (customer_id) REFERENCES Customers (id)

ON DELETE RESTRICT ON UPDATE CASCADE);

Более подробно о внешних ключах говорилось в пункте «Ключевые столбцы и индексы». • Добавить в таблицу обычный индекс вы можете с помощью команды

ALTER TABLE <Имя таблицы> ADD INDEX [<Имя индекса>] (<Список столбцов>);

Добавить уникальный индекс – с помощью команды

ALTER TABLE <Имя таблицы>

ADD [CONSTRAINT <Имя ограничения>]

UNIQUE (<Список столбцов>);

Добавить полнотекстовый индекс – с помощью команды ALTER TABLE <Имя таблицы>

ALTER TABLE <Имя таблицы> ADD FULLTEXT [<Имя индекса>] (<Список столбцов>);

При добавлении в таблицу индекса мы указываем имя таблицы, в которую нужно добавить индекс, и имена столбцов, включенных в индекс. В случае необходимости можно также задать имя индекса. Более подробно об индексах было сказано в пункте «Ключевые столбцы и индексы». Например, добавить индекс для столбца store (склад) таблицы Products (Товары) можно с помощью команды

ALTER TABLE Products ADD INDEX (store);

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату