Spec-Zone.ru › MySQL 8.4

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 ... TABLESPACE. Дополнительная информация приведена в Разделе 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.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/using-innodb-tables.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API