Spec-Zone .ru
спецификации, руководства, описания, API

13.1.14. CREATE TABLE Синтаксис

13.1.14.1. CREATE TABLE ...SELECT Синтаксис
13.1.14.2. Используя FOREIGN KEY Ограничения
13.1.14.3. Тихие Изменения Спецификации Столбца
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name    (create_definition,...)    [table_options]    [partition_options]

Или:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name    [(create_definition,...)]    [table_options]    [partition_options]    select_statement

Или:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name    { LIKE old_tbl_name | (LIKE old_tbl_name) }
create_definition:    col_name column_definition  | [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...)      [index_option] ...  | {INDEX|KEY} [index_name] [index_type] (index_col_name,...)      [index_option] ...  | [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY]      [index_name] [index_type] (index_col_name,...)      [index_option] ...  | {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (index_col_name,...)      [index_option] ...  | [CONSTRAINT [symbol]] FOREIGN KEY      [index_name] (index_col_name,...) reference_definition  | CHECK (expr)column_definition:    data_type [NOT NULL | NULL] [DEFAULT default_value]      [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY]      [COMMENT 'string']      [COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}]      [reference_definition]data_type:    BIT[(length)]  | TINYINT[(length)] [UNSIGNED] [ZEROFILL]  | SMALLINT[(length)] [UNSIGNED] [ZEROFILL]  | MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL]  | INT[(length)] [UNSIGNED] [ZEROFILL]  | INTEGER[(length)] [UNSIGNED] [ZEROFILL]  | BIGINT[(length)] [UNSIGNED] [ZEROFILL]  | REAL[(length,decimals)] [UNSIGNED] [ZEROFILL]  | DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]  | FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]  | DECIMAL[(length[,decimals])] [UNSIGNED] [ZEROFILL]  | NUMERIC[(length[,decimals])] [UNSIGNED] [ZEROFILL]  | DATE  | TIME  | TIMESTAMP  | DATETIME  | YEAR  | CHAR[(length)]      [CHARACTER SET charset_name] [COLLATE collation_name]  | VARCHAR(length)      [CHARACTER SET charset_name] [COLLATE collation_name]  | BINARY[(length)]  | VARBINARY(length)  | TINYBLOB  | BLOB  | MEDIUMBLOB  | LONGBLOB  | TINYTEXT [BINARY]      [CHARACTER SET charset_name] [COLLATE collation_name]  | TEXT [BINARY]      [CHARACTER SET charset_name] [COLLATE collation_name]  | MEDIUMTEXT [BINARY]      [CHARACTER SET charset_name] [COLLATE collation_name]  | LONGTEXT [BINARY]      [CHARACTER SET charset_name] [COLLATE collation_name]  | ENUM(value1,value2,value3,...)      [CHARACTER SET charset_name] [COLLATE collation_name]  | SET(value1,value2,value3,...)      [CHARACTER SET charset_name] [COLLATE collation_name]  | spatial_typeindex_col_name:    col_name [(length)] [ASC | DESC]index_type:    USING {BTREE | HASH}index_option:    KEY_BLOCK_SIZE [=] value  | index_type  | WITH PARSER parser_name  | COMMENT 'string'reference_definition:    REFERENCES tbl_name (index_col_name,...)      [MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]      [ON DELETE reference_option]      [ON UPDATE reference_option]reference_option:    RESTRICT | CASCADE | SET NULL | NO ACTIONtable_options:    table_option [[,] table_option] ...table_option:    ENGINE [=] engine_name  | AUTO_INCREMENT [=] value  | AVG_ROW_LENGTH [=] value  | [DEFAULT] CHARACTER SET [=] charset_name  | CHECKSUM [=] {0 | 1}  | [DEFAULT] COLLATE [=] collation_name  | COMMENT [=] 'string'  | CONNECTION [=] 'connect_string'  | DATA DIRECTORY [=] 'absolute path to directory'  | DELAY_KEY_WRITE [=] {0 | 1}  | INDEX DIRECTORY [=] 'absolute path to directory'  | INSERT_METHOD [=] { NO | FIRST | LAST }  | KEY_BLOCK_SIZE [=] value  | MAX_ROWS [=] value  | MIN_ROWS [=] value  | PACK_KEYS [=] {0 | 1 | DEFAULT}  | PASSWORD [=] 'string'  | ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}  | STATS_AUTO_RECALC [=] {DEFAULT|0|1}  | STATS_PERSISTENT [=] {DEFAULT|0|1}  | UNION [=] (tbl_name[,tbl_name]...)partition_options:    PARTITION BY        { [LINEAR] HASH(expr)        | [LINEAR] KEY [ALGORITHM={1|2}] (column_list)        | RANGE{(expr) | COLUMNS(column_list)}        | LIST{(expr) | COLUMNS(column_list)} }    [PARTITIONS num]    [SUBPARTITION BY        { [LINEAR] HASH(expr)        | [LINEAR] KEY [ALGORITHM={1|2}] (column_list) }      [SUBPARTITIONS num]    ]    [(partition_definition [, partition_definition] ...)]partition_definition:    PARTITION partition_name        [VALUES             {LESS THAN {(expr | value_list) | MAXVALUE}             |             IN (value_list)}]        [[STORAGE] ENGINE [=] engine_name]        [COMMENT [=] 'comment_text' ]        [DATA DIRECTORY [=] 'data_dir']        [INDEX DIRECTORY [=] 'index_dir']        [MAX_ROWS [=] max_number_of_rows]        [MIN_ROWS [=] min_number_of_rows]        [(subpartition_definition [, subpartition_definition] ...)]subpartition_definition:    SUBPARTITION logical_name        [[STORAGE] ENGINE [=] engine_name]        [COMMENT [=] 'comment_text' ]        [DATA DIRECTORY [=] 'data_dir']        [INDEX DIRECTORY [=] 'index_dir']        [MAX_ROWS [=] max_number_of_rows]        [MIN_ROWS [=] min_number_of_rows]select_statement:    [IGNORE | REPLACE] [AS] SELECT ...   (Some valid select statement)

CREATE TABLE составляет таблицу с именем. Вы должны иметь CREATE полномочие для таблицы.

Правила для допустимых имен таблиц даются в Разделе 9.2, "Имена объектов Схемы". По умолчанию таблица составляется в базе данных значения по умолчанию, используя InnoDB механизм хранения. Ошибка происходит, если таблица существует, если нет никакой базы данных значения по умолчанию, или если база данных не существует.

Имя таблицы может быть определено как db_name.tbl_name составлять таблицу в определенной базе данных. Это работает независимо от того, есть ли база данных значения по умолчанию, предполагая, что база данных существует. Если Вы используете идентификаторы в кавычках, заключаете в кавычки имена базы данных и имена таблиц отдельно. Например, записать `mydb`.`mytbl`, нет `mydb.mytbl`.

Временные таблицы

Можно использовать TEMPORARY ключевое слово, составляя таблицу. A TEMPORARY таблица видима только к текущему соединению, и отбрасывается автоматически, когда соединение закрывается. Это означает, что два различных соединения могут использовать то же самое имя временной таблицы, не конфликтуя друг с другом или с существующим не -TEMPORARY таблица того же самого имени. (Существующая таблица скрывается, пока временная таблица не отбрасывается.) Чтобы создать временные таблицы, Вы должны иметь CREATE TEMPORARY TABLES полномочие.

Отметить

CREATE TABLE автоматически не фиксирует текущую активную транзакцию, если Вы используете TEMPORARY ключевое слово.

Существующая Таблица с Тем же самым Именем

Ключевые слова IF NOT EXISTS препятствуйте ошибке произойти, если таблица существует. Однако, нет никакой проверки, что у существующей таблицы есть структура, идентичная обозначенному CREATE TABLE оператор.

Физическое Представление

MySQL представляет каждую таблицу .frm формат таблицы (определение) файл в каталоге базы данных. Механизм хранения для таблицы мог бы создать другие файлы также.

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

Для MyISAM таблицы, механизм хранения создает файлы данных и индексные файлы. Таким образом, для каждого MyISAM таблица tbl_name, есть три дисковых файла.

Файл Цель
tbl_name.frm Формат таблицы (определение) файл
tbl_name.MYD Файл данных
tbl_name.MYI Индексный файл

Глава 14, Механизмы Хранения, описывает то, что регистрирует каждый механизм хранения, создает, чтобы представить таблицы. Если имя таблицы содержит специальные символы, имена для табличных файлов содержат закодированные версии тех символов как описано в Разделе 9.2.3, "Отображение Идентификаторов к Именам файлов".

Типы данных и Атрибуты для Столбцов

data_type представляет тип данных в определении столбца. spatial_type представляет пространственный тип данных. Показанный синтаксис типа данных является представительным только. Для полного описания синтаксиса, доступного для определения типов данных столбца, так же как информации о свойствах каждого типа, см. Главу 11, Типы данных, и Раздел 12.18, "Пространственные Расширения".

Некоторые атрибуты не применяются ко всем типам данных. AUTO_INCREMENT применяется только к целому числу и типам с плавающей точкой. DEFAULT не применяется к BLOB или TEXT типы.

Механизмы хранения

ENGINE табличная опция определяет механизм хранения для таблицы, используя одно из имен, показанных в следующей таблице. Имя механизма может закрыться кавычки или заключено в кавычки. Заключенное в кавычки имя 'DEFAULT' распознается, но игнорируется.

Механизм хранения Описание
InnoDB Безопасные от транзакции таблицы с блокировкой строки и внешними ключами. Механизм хранения значения по умолчанию для новых таблиц. См. Раздел 14.2," InnoDB Механизм хранения", и в определенном Разделе 14.2.1.1,"InnoDB как Механизм Хранения MySQL Default", если Вы имеете опыт MySQL, но плохо знакомы для InnoDB.
MyISAM Двоичный переносимый механизм хранения, который прежде всего используется для рабочих нагрузок чтения главным образом или только для чтения. См. Раздел 14.3," MyISAM Механизм хранения".
MEMORY Данные для этого механизма хранения хранятся только в памяти. См. Раздел 14.4," MEMORY Механизм хранения".
CSV Таблицы, которые хранят строки в разделенном от запятой формате значений. См. Раздел 14.5," CSV Механизм хранения".
ARCHIVE Механизм хранения архивирования. См. Раздел 14.6," ARCHIVE Механизм хранения".
EXAMPLE Механизм в качестве примера. См. Раздел 14.10," EXAMPLE Механизм хранения".
FEDERATED Механизм хранения это получает доступ к удаленным таблицам. См. Раздел 14.9," FEDERATED Механизм хранения".
HEAP Это - синоним для MEMORY.
MERGE Набор MyISAM таблицы, используемые в качестве одной таблицы. Также известный как MRG_MyISAM. SeeSection 14.8," MERGE Механизм хранения".

Если механизм хранения определяется, который не доступен, MySQL использует механизм значения по умолчанию вместо этого. Обычно, это MyISAM. Например, если табличное определение включает ENGINE=INNODB опция, но сервер MySQL не поддерживает INNODB таблицы, таблица составляется как a MyISAM таблица. Это позволяет иметь установку репликации, где у Вас есть транзакционные таблицы на ведущем устройстве, но таблицы, составленные на ведомом устройстве, являются нетранзакционными (чтобы получить больше скорости). В MySQL 5.7 происходит предупреждение, если спецификацию механизма хранения не соблюдают.

Заменой механизма может управлять установка NO_ENGINE_SUBSTITUTION Режим SQL, как описано в Разделе 5.1.7, "Режимы SQL Сервера".

Отметить

Более старое TYPE опция, которая была синонимична с ENGINE был удален в MySQL 5.5. Обновляя до MySQL 5.5 или позже, следует преобразовать существующие приложения, которые полагаются TYPE использовать ENGINE вместо этого.

Оптимизация Производительности

Другие табличные опции используются, чтобы оптимизировать поведение таблицы. В большинстве случаев Вы не должны определить ни одного из них. Эти опции применяются ко всем механизмам хранения если иначе не обозначено. Опции, которые не применяются к данному механизму хранения, могут быть приняты и помниться как часть табличного определения. Такие опции тогда применяются, если Вы позже используете ALTER TABLE преобразовать таблицу, чтобы использовать различный механизм хранения.

Разделение

partition_options может использоваться, чтобы управлять разделением таблицы, составленной с CREATE TABLE.

Важный

Не все варианты, показывавшие в синтаксисе для partition_options в начале этого раздела доступны для всех типов разделения. Пожалуйста, см. списки для следующих отдельных типов для информации, определенной для каждого типа, и см. Главу 17, Разделение, для более полной информации о работах и использовании для того, чтобы разделить в MySQL, так же как дополнительных примерах табличного создания и других операторов, касающихся разделения MySQL.

Если использующийся, a partition_options пункт начинается PARTITION BY. Этот пункт содержит функцию, которая используется, чтобы определить раздел; функция возвращает целочисленное значение в пределах от 1 к num, где num число разделов. (Максимальное количество определяемых пользователем разделов, которые может содержать таблица, 1024; число подразделов — обсужденный позже в этом разделе — включается в этот максимум.) Варианты, которые доступны для этой функции в MySQL 5.7, показывают в следующем списке:

Отметить

Выражение (expr) используемый в a PARTITION BY пункт не может отнестись ни к каким столбцам не в составленной таблице; такие ссылки определенно не разрешаются и заставляют оператор перестать работать с ошибкой. (Ошибка #29444)

Каждый раздел может быть индивидуально определен, используя a partition_definition пункт. Отдельные части, составляющие этот пункт, следующие:

Разделы могут быть изменены, объединены, добавлены к таблицам, и отброшены от таблиц. Для основной информации об операторах MySQL, чтобы выполнить эти задачи, см. Раздел 13.1.6,"ALTER TABLE Синтаксис". Для более подробных описаний и примеров, см. Раздел 17.3, "управление Разделом".

Важный

Оригинал CREATE TABLE оператор, включая все спецификации и табличные опции сохранен MySQL, когда таблица составляется. Информация сохраняется так, чтобы, если Вы изменяете механизмы хранения, сопоставления или другие настройки, используя ALTER TABLE оператор, исходные табличные определенные опции сохраняется. Это позволяет Вам измениться между InnoDB и MyISAM таблица вводит даже при том, что форматы строки, поддерживаемые этими двумя механизмами, отличаются.

Поскольку текст исходного оператора сохраняется, но из-за способа, которым могут быть тихо реконфигурированы определенные значения и опции (такой как ROW_FORMAT), активное табличное определение (доступный через DESCRIBE или с SHOW TABLE STATUS) и табличная строка создания (доступный через SHOW CREATE TABLE) сообщат различные значения.

Клонирование или Копирование Таблицы

Можно составить одну таблицу от другого, добавляя a SELECT оператор в конце CREATE TABLE оператор:

CREATE TABLE new_tbl SELECT * FROM orig_tbl;

Для получения дополнительной информации см. Раздел 13.1.14.1,"CREATE TABLE ... SELECT Синтаксис".

Использовать LIKE составлять пустую таблицу, основанную на определении другой таблицы, включая любой столбец, приписывает и индексирует определенный в исходной таблице:

CREATE TABLE new_tbl LIKE orig_tbl;

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

LIKE работы только для базовых таблиц, не для представлений.

Важный

Невозможно выполниться CREATE TABLE или CREATE TABLE ... LIKE в то время как a LOCK TABLES оператор в действительности.

CREATE TABLE ... LIKE осуществляет те же самые проверки как CREATE TABLE и не просто копирует .frm файл. Это означает, что, если текущий режим SQL отличается от режима в действительности, когда исходная таблица была составлена, табличное определение можно было бы считать недопустимым для нового режима, и оператор перестанет работать.

CREATE TABLE ... LIKE не сохраняет никого DATA DIRECTORY или INDEX DIRECTORY табличные опции, которые были определены для исходной таблицы, или любых определений внешнего ключа.

Если исходная таблица является a TEMPORARY таблица, CREATE TABLE ... LIKE не сохраняет TEMPORARY. Создать a TEMPORARY целевая таблица, использовать CREATE TEMPORARY TABLE ... LIKE.