поддержку транзакций (транзакции мы рассматривали в главе 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 (Клиенты) можно задать, включив в команду создания таблицы параметрПрочие опциональные параметры таблицы либо используются в целях оптимизации (об оптимизации пойдет речь в главе 6), либо относятся к типам таблиц, которые в данной книге не рассматриваются. На этом мы завершаем изучение команды создания таблицы – CREATE TABLE. В следующем подразделе мы рассмотрим команду, с помощью которой можно изменить структуру уже существующей таблицы.
Изменение структуры таблицы
В этом подразделе будет описано, как изменить те параметры таблицы, которые мы обсуждали в предыдущем подразделе. Для модификации ранее созданной таблицы используется команда ALTER TABLE. Задавая различные параметры этой команды, вы можете внести в таблицу следующие изменения.
• Добавить столбец вы можете с помощью команды
В этой команде мы указываем имя таблицы, в которую добавляется столбец, а также имя и тип добавляемого столбца (о типах столбцов см. пункт «Типы данных в MySQL»). При необходимости можно также задать свойства добавляемого столбца (см. пункт «Свойства столбцов»). Кроме того, можно определить место нового столбца среди уже существующих: добавляемый столбец может стать первым (FIRST) или следовать после указанного предшествующего столбца (AFTER). Если место столбца не задано, он становится последним столбцом таблицы. Например, чтобы добавить в таблицу Products (Товары) столбец store (название склада, где хранится каждый вид товара), выполните команду
Примечани е
Добавить столбец со свойством AUTO_INCREMENT можно только с одновременным созданием индекса или ключа для этого столбца. Например, если бы столбец id не был включен в таблицу Products (Товары) при ее создании, мы могли бы добавить его с помощью команды
• Добавить первичный ключ вы можете с помощью команды
При добавлении в таблицу первичного ключа мы указываем имя таблицы, в которую нужно добавить ключ, и имена столбцов, которые будут образовывать первичный ключ (эти столбцы должны уже существовать в таблице). Более подробно о первичных ключах было сказано в пункте «Ключевые столбцы и индексы». Например, если бы первичный ключ не был определен при создании таблицы Orders (Заказы), мы могли бы добавить его с помощью команды
• Добавить внешний ключ вы можете с помощью команды
При добавлении в таблицу внешнего ключа мы указываем имя таблицы, в которую нужно добавить ключ, имена столбцов, которые будут образовывать внешний ключ (эти столбцы должны уже существовать в таблице), а также имя родительской таблицы (на которую будет ссылаться данная таблица) и имена столбцов, образующих первичный ключ в родительской таблице. В случае необходимости можно также задать имя создаваемого внешнего ключа, имя индекса, автоматически добавляемого для столбцов внешнего ключа, и правила поддержания целостности связи при удалении и изменении строк родительской таблицы. Например, если бы внешний ключ не был определен при создании таблицы Orders (Заказы), мы могли бы добавить его с помощью команды
Более подробно о внешних ключах говорилось в пункте «Ключевые столбцы и индексы». • Добавить в таблицу обычный индекс вы можете с помощью команды
Добавить уникальный индекс – с помощью команды
Добавить полнотекстовый индекс – с помощью команды ALTER TABLE <Имя таблицы>
При добавлении в таблицу индекса мы указываем имя таблицы, в которую нужно добавить индекс, и имена столбцов, включенных в индекс. В случае необходимости можно также задать имя индекса. Более подробно об индексах было сказано в пункте «Ключевые столбцы и индексы». Например, добавить индекс для столбца store (склад) таблицы Products (Товары) можно с помощью команды