17.6.1.1 Создание таблиц InnoDB
Таблицы создаются с помощью оператора оператора CREATE TABLE; например:
CREATE TABLE t1 (a INT, b CHAR (20), PRIMARY KEY (a)) ENGINE=InnoDB;
Оператор ENGINE=InnoDB не требуется, когда InnoDB задан по умолчанию в качестве движка хранения, а по умолчанию он им является. Однако, оператор ENGINE полезен, если оператор CREATE TABLE нужно выполнить на другом экземпляре MySQL Server, где движок хранения по умолчанию не InnoDB или неизвестен. Вы можете определить движок хранения по умолчанию на экземпляре MySQL Server, выполнив следующий оператор:
mysql> SELECT @@default_storage_engine;
+--------------------------+
| @@default_storage_engine |
+--------------------------+
| InnoDB |
+--------------------------+
Таблицы InnoDB создаются в файловых табличных пространствах по умолчанию. Чтобы создать таблицу InnoDB в системном табличном пространстве InnoDB, отключите переменную innodb_file_per_table перед созданием таблицы. Чтобы создать таблицу InnoDB в общем табличном пространстве, используйте синтаксис оператора CREATE TABLE. Более подробная информация в разделе 17.6.3, «Табличные пространства».
Форматы строк
Формат строк таблицы InnoDB определяет, как её строки физически хранятся на диске. InnoDB поддерживает четыре формата строк, каждый с разными характеристиками хранения. Поддерживаемые форматы строк включают REDUNDANT, COMPACT, DYNAMIC и COMPRESSED. Формат DYNAMIC является по умолчанию. Подробная информация о характеристиках формата строк в разделе 17.10, «Форматы строк InnoDB».
Переменная innodb_default_row_format определяет формат строк по умолчанию. Формат строк таблицы также можно явно определить, используя опцию таблицы ROW_FORMAT в операторах CREATE
TABLE или ALTER TABLE. См. Определение формата строк таблицы.
Первичные ключи
Рекомендуется определять первичный ключ для каждой создаваемой таблицы. При выборе столбцов первичного ключа следует учитывать следующие характеристики:
Столбцы, которые используются в наиболее важных запросах.
Столбцы, которые никогда не оставляются пустыми.
Столбцы, которые никогда не содержат одинаковые значения.
Столбцы, значения которых редко или никогда не меняются после вставки.
Например, в таблице, содержащей информацию о людях, не следует создавать первичный ключ по столбцу (firstname,
lastname), так как несколько человек могут иметь одинаковое имя, столбец имени может быть пустым, и иногда люди меняют свои имена. Из-за таких ограничений, часто нет очевидного набора столбцов для использования в качестве первичного ключа, поэтому создается новый столбец с числовым идентификатором, который будет служить всем или частью первичного ключа. Вы можете объявить столбец так, чтобы возрастающие значения заполнялись автоматически при вставке строк:
# The value of ID can act like a pointer between related items in different tables.
CREATE TABLE t5 (id INT AUTO_INCREMENT, b CHAR (20), PRIMARY KEY (id));
# The primary key can consist of more than one column. Any autoinc column must come first.
CREATE TABLE t6 (id INT AUTO_INCREMENT, a INT, b CHAR (20), PRIMARY KEY (id,a));
Подробнее об автоинкрементных столбцах в разделе 17.6.1.6, «Обработка AUTO_INCREMENT в InnoDB».
Несмотря на то, что таблица работает и без определения первичного ключа, первичный ключ влияет на многие аспекты производительности и является важным элементом проектирования любой большой или часто используемой таблицы. Рекомендуется всегда указывать первичный ключ в операторе CREATE TABLE. Если создать таблицу, загрузить данные, а затем выполнить оператор ALTER TABLE для добавления первичного ключа позже, эта операция будет намного медленнее, чем определение первичного ключа при создании таблицы. Подробная информация о первичных ключах в разделе 17.6.2.1, «Кластеризованные и вспомогательные индексы».
Просмотр свойств таблиц InnoDB
Чтобы просмотреть свойства таблицы InnoDB, выполните оператор SHOW TABLE STATUS:
mysql> SHOW TABLE STATUS FROM test LIKE 't%' \G;
*************************** 1. row ***************************
Name: t1
Engine: InnoDB
Version: 10
Row_format: Dynamic
Rows: 0
Avg_row_length: 0
Data_length: 16384
Max_data_length: 0
Index_length: 0
Data_free: 0
Auto_increment: NULL
Create_time: 2021-02-18 12:18:28
Update_time: NULL
Check_time: NULL
Collation: utf8mb4_0900_ai_ci
Checksum: NULL
Create_options:
Comment:
Подробная информация о выводе оператора SHOW TABLE STATUS в разделе 15.7.7.38, «Оператор SHOW TABLE STATUS».
Вы также можете получить доступ к свойствам таблицы InnoDB, запросив таблицы системной схемы InnoDB Information Schema:
mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME='test/t1' \G
*************************** 1. row ***************************
TABLE_ID: 1144
NAME: test/t1
FLAG: 33
N_COLS: 5
SPACE: 30
ROW_FORMAT: Dynamic
ZIP_PAGE_SIZE: 0
SPACE_TYPE: Single
INSTANT_COLS: 0
Подробнее в разделе 17.15.3, «Таблицы схемы InnoDB INFORMATION_SCHEMA».
© 2025 Oracle
Licensed under the GPLv2 License.