Spec-Zone .ru
спецификации, руководства, описания, API
|
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
{ LIKEold_tbl_name
| (LIKEold_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] [DEFAULTdefault_value
] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] [COMMENT 'string
'] [COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}] [STORAGE {DISK|MEMORY|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 SETcharset_name
] [COLLATEcollation_name
] | VARCHAR(length
) [CHARACTER SETcharset_name
] [COLLATEcollation_name
] | BINARY[(length
)] | VARBINARY(length
) | TINYBLOB | BLOB | MEDIUMBLOB | LONGBLOB | TINYTEXT [BINARY] [CHARACTER SETcharset_name
] [COLLATEcollation_name
] | TEXT [BINARY] [CHARACTER SETcharset_name
] [COLLATEcollation_name
] | MEDIUMTEXT [BINARY] [CHARACTER SETcharset_name
] [COLLATEcollation_name
] | LONGTEXT [BINARY] [CHARACTER SETcharset_name
] [COLLATEcollation_name
] | ENUM(value1
,value2
,value3
,...) [CHARACTER SETcharset_name
] [COLLATEcollation_name
] | SET(value1
,value2
,value3
,...) [CHARACTER SETcharset_name
] [COLLATEcollation_name
] |spatial_type
index_col_name
:col_name
[(length
)] [ASC | DESC]index_type
: USING {BTREE | HASH}index_option
: KEY_BLOCK_SIZE [=]value
|index_type
| WITH PARSERparser_name
| COMMENT 'string
'reference_definition
: REFERENCEStbl_name
(index_col_name
,...) [MATCH FULL | MATCH PARTIAL | MATCH SIMPLE] [ON DELETEreference_option
] [ON UPDATEreference_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} | TABLESPACEtablespace_name
[STORAGE {DISK|MEMORY|DEFAULT}] | 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
)} } [PARTITIONSnum
] [SUBPARTITION BY { [LINEAR] HASH(expr
) | [LINEAR] KEY [ALGORITHM={1|2}] (column_list
) } [SUBPARTITIONSnum
] ] [(partition_definition
[,partition_definition
] ...)]partition_definition
: PARTITIONpartition_name
[VALUES {LESS THAN {(expr
|value_list
) |MAXVALUE
} | IN (value_list
)}] [[STORAGE] ENGINE [=]engine_name
] [COMMENT [=]'comment_text'
] [DATA DIRECTORY [=] ''] [INDEX DIRECTORY [=] '
data_dir
'] [MAX_ROWS [=]
index_dir
max_number_of_rows
] [MIN_ROWS [=]min_number_of_rows
] [TABLESPACE [=]tablespace_name
] [NODEGROUP [=]node_group_id
] [(subpartition_definition
[,subpartition_definition
] ...)]subpartition_definition
: SUBPARTITIONlogical_name
[[STORAGE] ENGINE [=]engine_name
] [COMMENT [=]'comment_text'
] [DATA DIRECTORY [=] ''] [INDEX DIRECTORY [=] '
data_dir
'] [MAX_ROWS [=]
index_dir
max_number_of_rows
] [MIN_ROWS [=]min_number_of_rows
] [TABLESPACE [=]tablespace_name
] [NODEGROUP [=]node_group_id
]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
, есть три дисковых файла.
Файл | Цель |
---|---|
|
Формат таблицы (определение) файл |
|
Файл данных |
|
Индексный файл |
Глава 14, Механизмы Хранения, описывает то, что регистрирует каждый механизм хранения, создает, чтобы представить таблицы. Если имя таблицы содержит специальные символы, имена для табличных файлов содержат закодированные версии тех символов как описано в Разделе 9.2.3, "Отображение Идентификаторов к Именам файлов".
data_type
представляет тип данных в определении столбца. spatial_type
представляет пространственный тип данных. Показанный
синтаксис типа данных является представительным только. Для полного описания синтаксиса, доступного для
определения типов данных столбца, так же как информации о свойствах каждого типа, см. Главу
11, Типы данных, и Раздел 12.18, "Пространственные
Расширения".
Некоторые атрибуты не применяются ко всем типам данных. AUTO_INCREMENT
применяется
только к целому числу и типам с плавающей точкой. DEFAULT
не применяется к BLOB
или TEXT
типы.
Если ни один NULL
ни NOT
NULL
определяется, столбец обрабатывается как если бы NULL
был
определен.
У целочисленного или столбца с плавающей точкой может быть дополнительный атрибут
AUTO_INCREMENT
. Когда Вы вставляете значение NULL
(рекомендуемый) или 0
в индексированный
AUTO_INCREMENT
столбец, столбец устанавливается в следующее значение
последовательности. Обычно это
, где value
+1value
самое большое значение для столбца в настоящий
момент в таблице. AUTO_INCREMENT
последовательности начинаются 1
.
Получать AUTO_INCREMENT
значение после вставки строки, используйте LAST_INSERT_ID()
Функция SQL или mysql_insert_id()
C API-функция. См. Раздел
12.14, "информационные Функции", и Раздел
22.8.7.37,"mysql_insert_id()
".
Если NO_AUTO_VALUE_ON_ZERO
Режим SQL включается, можно сохранить 0
в AUTO_INCREMENT
столбцы как 0
не генерируя новое значение последовательности. См. Раздел
5.1.7, "Режимы SQL Сервера".
Может быть только один AUTO_INCREMENT
столбец на таблицу,
это должно быть индексировано, и у этого не может быть a DEFAULT
значение. AUTO_INCREMENT
столбец работает должным образом, только
если он содержит только положительные значения. Вставка отрицательного числа расценивается как
вставка очень большого положительного числа. Это делается, чтобы избежать проблем точности,
когда числа "переносятся" от
положительного до отрицательного и также гарантировать, что Вы случайно не добираетесь AUTO_INCREMENT
столбец, который содержит 0
.
Для MyISAM
таблицы, можно определить AUTO_INCREMENT
вторичный столбец в ключе многократного столбца. См. Раздел
3.6.9, "Используя AUTO_INCREMENT
".
Чтобы сделать MySQL совместимым с некоторыми приложениями ODBC, можно найти AUTO_INCREMENT
значение для последней вставленной строки со следующим запросом:
SELECT * FROMtbl_name
WHEREauto_col
IS NULL
Для получения информации о InnoDB
и AUTO_INCREMENT
,
см. Раздел 5.4.4,"AUTO_INCREMENT
Обработка в InnoDB
". Для получения информации о AUTO_INCREMENT
и MySQL Replication, см. Раздел
16.4.1.1, "Репликация и AUTO_INCREMENT
".
Символьные типы данных (CHAR
, VARCHAR
, TEXT
) может включать CHARACTER SET
и COLLATE
атрибуты, чтобы определить набор символов и сопоставление для
столбца. Для получения дополнительной информации см. Раздел 10.1,
"Поддержка Набора символов". CHARSET
синоним для CHARACTER SET
. Пример:
CREATE TABLE t (c CHAR(20) CHARACTER SET utf8 COLLATE utf8_bin);
MySQL 5.6 интерпретирует спецификации длины в символьных определениях столбца в символах. (Версии
перед MySQL 4.1, интерпретируемым их в байтах.) Длины для BINARY
и VARBINARY
находятся в байтах.
DEFAULT
пункт определяет значение по умолчанию для столбца. С одним
исключением значение по умолчанию должно быть константой; это не может быть функция или выражение. Это
означает, например, что невозможно установить значение по умолчанию для столбца даты, чтобы быть
значением функции такой как NOW()
или CURRENT_DATE
. Исключение - то, что можно определить CURRENT_TIMESTAMP
как значение по умолчанию для a TIMESTAMP
или (с MySQL 5.6.5) DATETIME
столбец. См. Раздел
11.3.5, "Автоматическая Инициализация и Обновляющий для TIMESTAMP
и DATETIME
".
Если определение столбца включает не явный DEFAULT
значение, MySQL
определяет значение по умолчанию как описано в Разделе
11.5, "Значения по умолчанию Типа данных".
BLOB
и TEXT
столбцы не могут быть присвоены значение по умолчанию.
Если NO_ZERO_DATE
или NO_ZERO_IN_DATE
Режим SQL включается, и оцененное дате значение по умолчанию не корректно согласно тому режиму, CREATE TABLE
производит предупреждение, если строгий режим SQL не
включается и ошибка, если строгий режим включается. Например, с NO_ZERO_IN_DATE
включенный, c1 DATE DEFAULT
'2010-00-00'
производит предупреждение. (Прежде, чем MySQL 5.6.6, оператор произведет
ошибку, даже если строгий режим не включается.)
Комментарий для столбца может быть
определен с COMMENT
опция, до 1024 символов долго. Комментарий выводится на
экран SHOW CREATE TABLE
и SHOW FULL COLUMNS
операторы.
В MySQL Cluster также возможно
определить формат хранения данных для отдельных столбцов NDB
табличное использование COLUMN_FORMAT
. Допустимые форматы столбца FIXED
, DYNAMIC
, и DEFAULT
.
FIXED
используется, чтобы определить фиксированное-width хранение, DYNAMIC
разрешает столбцу быть переменным-width, и DEFAULT
заставляет столбец использовать фиксированное-width или переменное-width хранение как определено типом
данных столбца (возможно переопределенный a ROW_FORMAT
спецификатор).
Для NDB
таблицы, значение по умолчанию для COLUMN_FORMAT
DEFAULT
.
COLUMN_FORMAT
в настоящий момент не имеет никакого эффекта на столбцы
таблиц, используя механизмы хранения кроме NDB
. COLUMN_FORMAT
ключевое слово
поддерживается только в создавании из mysqld, который предоставляется MySQL Cluster;
это не распознается ни в какой другой версии MySQL, где попытка использовать COLUMN_FORMAT
вызывает синтаксическую ошибку.
Для NDB
таблицы, также возможно определить, сохранен ли столбец на диске или
в памяти при использовании a STORAGE
пункт. STORAGE
DISK
заставляет столбец быть сохраненным на диске, и STORAGE
MEMORY
память причин, которая будет использоваться. CREATE TABLE
используемый оператор должен все еще включать a TABLESPACE
пункт:
mysql>CREATE TABLE t1 (
->c1 INT STORAGE DISK,
->c2 INT STORAGE MEMORY
->) ENGINE NDB;
ERROR 1005 (HY000): Can't create table 'c.t1' (errno: 140)mysql>CREATE TABLE t1 (
->c1 INT STORAGE DISK,
->c2 INT STORAGE MEMORY
->) TABLESPACE ts_1 ENGINE NDB;
Query OK, 0 rows affected (1.06 sec)
Для NDB
таблицы, STORAGE DEFAULT
эквивалентно STORAGE MEMORY
.
STORAGE
пункт не имеет никакого эффекта на таблицы, используя механизмы
хранения кроме NDB
.
STORAGE
ключевое слово поддерживается только в создавании из mysqld, который предоставляется MySQL Cluster;
это не распознается ни в какой другой версии MySQL, где никакая попытка использовать STORAGE
ключевое слово вызывает синтаксическую ошибку.
KEY
обычно синоним для INDEX
. Ключевой атрибут PRIMARY KEY
может также
быть определен как только KEY
когда дано в определении столбца. Это было
реализовано для совместимости с другими системами баз данных.
A UNIQUE
индексируйте создает ограничение так, что,
все значения в индексировании должны быть отличными. Ошибка происходит, если Вы пытаетесь добавить новую
строку со значением ключа, которое соответствует существующую строку. Для всех механизмов, a UNIQUE
индексируйте многократные разрешения NULL
значения для столбцов, которые могут содержать NULL
.
A PRIMARY
KEY
уникальный индекс, где все ключевые столбцы должны быть определены как NOT
NULL
. Если они явно не объявляются как NOT NULL
, MySQL объявляет их
так неявно (и тихо). У таблицы может быть только один PRIMARY KEY
. Имя a
PRIMARY KEY
всегда PRIMARY
, который таким
образом не может использоваться, поскольку имя для любого другого отчасти индексирует.
Если у Вас нет a PRIMARY KEY
и приложение просит PRIMARY
KEY
в Ваших таблицах MySQL возвращает первое UNIQUE
индексируйте, который имеет нет NULL
столбцы как PRIMARY
KEY
.
В InnoDB
таблицы, сохраните PRIMARY KEY
короткий, чтобы минимизировать издержки хранения для вторичного индексирует. Каждый вторичный
элемент индекса содержит копию столбцов первичного ключа для соответствующей строки. (См. Раздел 14.2.3.12,"InnoDB
Таблица и Индексирует Структуры".)
В составленной таблице, a PRIMARY KEY
помещается
сначала, сопровождается всеми UNIQUE
индексирует, и затем групповое
индексирует. Это помогает оптимизатору MySQL расположить по приоритетам, которые индексируют, чтобы
использовать и также более быстро обнаружить дублированный UNIQUE
ключи.
A PRIMARY KEY
может быть многократный столбец,
индексируют. Однако, невозможно создать многократный столбец, индексируют использование PRIMARY KEY
ключевой атрибут в спецификации столбца. Выполнение так
только метки, что единственный столбец как основной. Следует использовать отдельное PRIMARY KEY(
пункт. index_col_name
,
...)
Если a PRIMARY
KEY
или UNIQUE
индексируйте состоит только из одного столбца, у
которого есть целочисленный тип, можно также обратиться к столбцу как _rowid
в SELECT
операторы.
В MySQL, имени a PRIMARY KEY
PRIMARY
.
Поскольку другой индексирует, если Вы не присваиваете имя, индексирование присваивается то же самое имя
как первый индексированный столбец с дополнительным суффиксом (_2
, _3
, ...
) сделать это уникальным. Можно
видеть имена индексов для табличного использования SHOW INDEX FROM
. См. Раздел
13.7.5.23,"tbl_name
SHOW INDEX
Синтаксис".
Некоторые механизмы хранения разрешают Вам определять индексировать тип, создавая
индексирование. Синтаксис для index_type
спецификатор USING
. type_name
Пример:
CREATE TABLE lookup (id INT, INDEX USING BTREE (id)) ENGINE = MEMORY;
Привилегированная позиция для USING
после индексировать списка
столбцов. Это может быть дано перед списком столбцов, но поддержка использования опции в той позиции
осуждается и будет удалена в будущем выпуске MySQL.
index_option
значения определяют дополнительные опции для
индексирования. USING
одна такая опция. Для получения дополнительной
информации о допустимом index_option
значения, см. Раздел
13.1.13,"CREATE INDEX
Синтаксис".
Для получения дополнительной информации об индексирует, см. Раздел 8.3.1, "Использование MySQL How Индексирует".
В MySQL 5.6,
только InnoDB
, MyISAM
, и MEMORY
поддержка механизмов хранения индексирует на столбцах, которые
могут иметь NULL
значения. В других случаях следует объявить
индексированные столбцы как NOT NULL
или ошибка заканчивается.
Для CHAR
,
VARCHAR
, BINARY
, и VARBINARY
столбцы, индексирует, может быть создан, которые используют
только ведущую роль значений столбцов, используя
синтаксис, чтобы определить индексировать
длину префикса. col_name
(length
)BLOB
и TEXT
столбцы также могут быть индексированы, но длина префикса должна быть дана. Длины префикса даются в символах для типов
недвоичной строки и в байтах для типов двоичной строки. Таким образом, элементы индекса состоят из
первого length
символы каждого значения столбца для CHAR
, VARCHAR
, и TEXT
столбцы, и первое length
байты каждого значения столбца для BINARY
, VARBINARY
, и BLOB
столбцы. Индексация только префикса значений столбцов как это
может сделать индексный файл намного меньшим. См. Раздел 8.3.4, "Столбец
Индексирует".
Только InnoDB
и MyISAM
индексация
поддержки механизмов хранения на BLOB
и TEXT
столбцы. Например:
CREATE TABLE test (blob_col BLOB, INDEX(blob_col(10)));
Префиксы могут быть 1000 байтов длиной (767 байтов для InnoDB
таблицы).
Отметьте, что префиксные пределы измеряются в байтах, тогда как длина префикса в CREATE TABLE
операторы интерпретируются как число символов для
недвоичных типов данных (CHAR
, VARCHAR
, TEXT
). Примите это во внимание, определяя длину префикса для
столбца, который использует многобайтовый набор символов.
index_col_name
спецификация может
закончиться ASC
или DESC
. Эти ключевые слова
разрешаются для будущих расширений для того, чтобы определить, что возрастание или убывание индексируют
хранение значения. В настоящий момент они анализируются, но игнорируются; индексируйте значения, всегда
сохранены в порядке возрастания.
Когда Вы используете ORDER BY
или GROUP BY
на столбце в a SELECT
, значения видов сервера, используя только начальное число байтов,
обозначенных max_sort_length
системная переменная.
Можно создать особенный FULLTEXT
индексирует, которые
используются для полнотекстовых поисков. Только InnoDB
и MyISAM
поддержка механизмов хранения FULLTEXT
индексирует. Они могут быть созданы только из CHAR
, VARCHAR
, и TEXT
столбцы. Индексация всегда происходит по всему столбцу;
индексация префикса столбца не поддерживается, и любая длина префикса игнорируется если определено. См.
Раздел
12.9, "Полнотекстовые Функции Поиска", для деталей работы. A WITH
PARSER
пункт может быть определен как index_option
значение, чтобы связать плагин синтаксического анализатора с индексированием, если полнотекстовая
индексация и поиск операций нуждаются в специальной обработке. Этот пункт допустим только для FULLTEXT
индексирует. См. Раздел
23.2, "API MySQL Plugin", для деталей о создании плагинов.
Можно создать SPATIAL
индексирует на пространственных
типах данных. Пространственные типы поддерживаются только для MyISAM
таблицы и индексированные столбцы должны быть объявлены как NOT NULL
. См.
Раздел 12.18,
"Пространственные Расширения".
В MySQL 5.6 индексируйте определения, может включать дополнительный комментарий до 1024 символов.
InnoDB
и
NDB
табличная проверка поддержки ограничений внешнего ключа. Столбцы
таблицы, на которую ссылаются, нужно всегда явно называть. Оба ON DELETE
и
ON UPDATE
действия на внешних ключах поддерживаются. Для более подробной
информации и примеров, см. Раздел 13.1.17.2, "Используя
FOREIGN KEY
Ограничения". Для получения информации
определенный для внешних ключей в InnoDB
, см. Раздел
5.4.5,"InnoDB
и FOREIGN KEY
Ограничения".
Для других механизмов хранения MySQL Server анализирует и игнорирует FOREIGN
KEY
и REFERENCES
синтаксис в CREATE TABLE
операторы. CHECK
пункт
анализируется, но игнорируется всеми механизмами хранения. См. Раздел
1.8.5.4, "Различия во Внешнем ключе".
Для пользователей, знакомых со Стандартом SQL ANSI/ISO, пожалуйста, отметьте что
никакой механизм хранения, включая InnoDB
, распознает или
осуществляет MATCH
пункт используется в ограничительных
определениях ссылочной целостности. Использование явного MATCH
пункт не будет иметь указанного эффекта, и также вызывает ON DELETE
и ON UPDATE
пункты, которые будут проигнорированы. По этим
причинам, определяя MATCH
должен избежаться.
MATCH
пункт в стандарте SQL управляет как NULL
значения в составном объекте (многократный столбец) внешний ключ
обрабатываются, сравниваясь с первичным ключом. InnoDB
по существу
реализует семантику, определенную MATCH SIMPLE
, которые разрешают
внешнему ключу быть всеми или частично NULL
. В этом случае
(дочерняя таблица) строке, содержащей такой внешний ключ, разрешают быть вставленной, и не
соответствует строки в (родительской) таблице, на которую ссылаются. Возможно реализовать другую
семантику, используя триггеры.
Дополнительно, MySQL требует, чтобы столбцы, на которые ссылаются, были индексированы
для производительности. Однако, это не осуществляет требования что столбцы, на которые
ссылаются, быть объявленным UNIQUE
или NOT
NULL
. Обработка ссылок внешнего ключа на групповые ключи или ключи, которые содержат
NULL
значения не четко определены для операций такой как UPDATE
или DELETE CASCADE
. Вам
советуют использовать внешние ключи, что ссылка только ключи, которые являются обоими UNIQUE
(или PRIMARY
) и NOT NULL
.
MySQL не распознает или поддерживает "встроенный REFERENCES
спецификации" (как определено в
стандарте SQL), где ссылки определяются как часть спецификации столбца. MySQL принимает REFERENCES
пункты только когда определено как часть отдельного
FOREIGN KEY
спецификация.
Разделенные таблицы, использующие InnoDB
механизм хранения не поддерживает внешние ключи. NDB
таблицы, которые делятся KEY
или
LINEAR KEY
не влияются этим ограничением. См. Раздел
18.6, "Ограничения и Ограничения на Разделение", для получения дополнительной
информации.
Есть жесткий предел 4096 столбцов за таблицу, но эффективный максимум может быть меньше для данной таблицы и зависит от факторов, обсужденных в Разделе E.10.4, "Пределы на Столбце таблицы граф и Размер Строки".
TABLESPACE
и STORAGE
табличные опции используются
только с NDB
таблицы. Табличную область называют tablespace_name
должно быть, уже был создан, используя CREATE
TABLESPACE
. STORAGE
определяет тип используемого хранения (диск или
память), и может быть один из DISK
, MEMORY
, или DEFAULT
.
TABLESPACE ... STORAGE DISK
присваивает таблицу табличной области MySQL Cluster Disk
Data. См. Раздел 17.5.12, "MySQL Cluster Disk Data
Tables", для получения дополнительной информации.
A STORAGE
пункт не может использоваться в a CREATE TABLE
оператор без a TABLESPACE
пункт.
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 . См. Раздел
14.8," MERGE Механизм хранения".
|
NDB |
Кластеризируемые, отказоустойчивые, основанные на памяти таблицы, поддерживая транзакции и внешние
ключи. Также известный как NDBCLUSTER .
SeeChapter 17,
MySQL Cluster NDB 7.3.
|
Если механизм хранения определяется, который не доступен, MySQL использует механизм значения по умолчанию вместо
этого. Обычно, это MyISAM
. Например, если табличное определение включает ENGINE=INNODB
опция, но сервер MySQL не поддерживает INNODB
таблицы, таблица составляется как a MyISAM
таблица. Это позволяет иметь установку репликации, где у Вас есть транзакционные таблицы на ведущем устройстве,
но таблицы, составленные на ведомом устройстве, являются нетранзакционными (чтобы получить больше скорости). В
MySQL 5.6 происходит предупреждение, если спецификацию механизма хранения не соблюдают.
Заменой механизма может управлять установка NO_ENGINE_SUBSTITUTION
Режим SQL, как описано в Разделе
5.1.7, "Режимы SQL Сервера".
Более старое TYPE
опция, которая была синонимична с ENGINE
был удален в MySQL 5.5. Обновляя до MySQL 5.5
или позже, следует преобразовать существующие приложения, которые полагаются TYPE
использовать ENGINE
вместо
этого.
Другие табличные опции используются, чтобы оптимизировать поведение таблицы. В большинстве случаев Вы не должны
определить ни одного из них. Эти опции применяются ко всем механизмам хранения если иначе не обозначено. Опции,
которые не применяются к данному механизму хранения, могут быть приняты и помниться как часть табличного
определения. Такие опции тогда применяются, если Вы позже используете ALTER TABLE
преобразовать таблицу, чтобы использовать различный механизм
хранения.
AUTO_INCREMENT
Начальная буква AUTO_INCREMENT
значение для таблицы. В MySQL 5.6 это
работает на MyISAM
, MEMORY
, InnoDB
, и ARCHIVE
таблицы. Установить
первое автоинкрементное значение для механизмов, которые не поддерживают AUTO_INCREMENT
табличная опция, вставьте "фиктивную" строку со значением меньше чем требуемое
значение после составления таблицы, и затем удалите фиктивную строку.
Для механизмов, которые поддерживают AUTO_INCREMENT
табличная опция в
CREATE TABLE
операторы, можно также использовать ALTER TABLE
сбрасывать tbl_name
AUTO_INCREMENT = N
AUTO_INCREMENT
значение. Значение не может быть установлено ниже чем
максимальное значение в настоящий момент в столбце.
AVG_ROW_LENGTH
Приближение средней длины строки для Вашей таблицы. Вы должны установить это только для больших таблиц со строками переменного размера.
Когда Вы создаете a MyISAM
таблица, MySQL использует продукт MAX_ROWS
и AVG_ROW_LENGTH
опции, чтобы
решить, насколько большой получающаяся таблица. Если Вы не определяете ни одну опцию, максимальный
размер для MyISAM
файлы данных и индексные файлы 256TB по умолчанию.
(Если Ваша операционная система не поддерживает файлы, что большой, табличные размеры ограничиваются
пределом размера файла.), Если Вы хотите подавить размеры указателя, чтобы сделать индексирование
меньшего и быстрее и Вы действительно не нуждаетесь в больших файлах, можно уменьшить размер
указателя значения по умолчанию, устанавливая myisam_data_pointer_size
системная переменная. (См. Раздел 5.1.4, "Системные Переменные Сервера".),
Если Вы хотите, чтобы все Ваши таблицы были в состоянии вырасти выше значения по умолчанию,
ограничивают и готовы иметь Ваши таблицы, немного медленнее и больше чем необходимый, можно
увеличить размер указателя значения по умолчанию, устанавливая эту переменную. Установка значения к
7 табличным размерам разрешений до 65,536TB.
[DEFAULT] CHARACTER SET
Определите набор символов значения по умолчанию для таблицы. CHARSET
синоним для CHARACTER SET
. Если имя набора символов DEFAULT
, набор символов базы данных используется.
CHECKSUM
Установите это в 1, если Вы хотите, чтобы MySQL поддержал живую контрольную сумму для всех строк (то
есть, контрольная сумма, которую MySQL обновляет автоматически, поскольку таблица изменяется). Это
делает таблицу немного медленнее, чтобы обновить, но также и облегчает находить поврежденные
таблицы. CHECKSUM TABLE
оператор сообщает о контрольной сумме. (MyISAM
только.)
[DEFAULT] COLLATE
Определите сопоставление значения по умолчанию для таблицы.
COMMENT
Комментарий для таблицы, до 2048 символов долго.
CONNECTION
Строка подключения для a FEDERATED
таблица.
Более старые версии MySQL используемый a COMMENT
опция для
строки подключения.
DATA DIRECTORY
, INDEX
DIRECTORY
При использовании DATA DIRECTORY='
, можно определить где directory
'InnoDB
механизм хранения помещает .ibd
файл
табличной области для новой таблицы. Этот пункт только применяется когда innodb_file_per_table
параметр конфигурации включается. Каталог
должен быть именем полного пути к каталогу, не относительным путем. См. Раздел
14.2.4.2.34, "Улучшенное управление Табличной областью" для деталей об аспектах
производительности управления табличной областью.
Создавая MyISAM
таблицы, можно использовать DATA
DIRECTORY='
пункт, directory
'INDEX
DIRECTORY='
пункт, или оба. Они
определяют, куда поместить a directory
'MyISAM
файл данных таблицы и индексный
файл соответственно.
На уровне таблицы DATA DIRECTORY
и INDEX
DIRECTORY
опции игнорируются для разделенных таблиц. (Ошибка #32091)
Эти опции работают только, когда Вы не используете --skip-symbolic-links
опция. У Вашей операционной системы должна также
быть работа, ориентированная на многопотоковое исполнение realpath()
вызвать. См. Раздел
8.11.3.1.2, "Используя Символьные ссылки для MyISAM
Таблицы на
Unix", для более полной информации.
Если a MyISAM
таблица составляется без DATA
DIRECTORY
опция, .MYD
файл создается в каталоге базы данных. По
умолчанию, если MyISAM
находит существующее .MYD
файл в этом случае, это перезаписывает это. То же самое
применяется к .MYI
файлы для таблиц, составленных без INDEX DIRECTORY
опция. Чтобы подавить это поведение, запустите сервер
с --keep_files_on_create
опция, когда MyISAM
не будет перезаписывать существующие файлы и возвращает ошибку
вместо этого.
Если a MyISAM
таблица составляется с a DATA
DIRECTORY
или INDEX DIRECTORY
опция и существующее .MYD
или .MYI
файл находится, MyISAM
всегда возвращает ошибку. Это не будет перезаписывать файл в указанном каталоге.
Невозможно использовать пути, которые содержат каталог данных MySQL с DATA DIRECTORY
или INDEX DIRECTORY
. Это
включает разделенные таблицы и отдельные табличные разделы. (См. Ошибку #32167.)
DELAY_KEY_WRITE
Установите это в 1, если Вы хотите задержать ключевые обновления для таблицы, пока таблица не
закрывается. См. описание delay_key_write
системная переменная в Разделе
5.1.4, "Системные Переменные Сервера". (MyISAM
только.)
INSERT_METHOD
Если Вы хотите вставить данные в a MERGE
таблица, следует определить с
INSERT_METHOD
таблица, в которую должна быть вставлена строка. INSERT_METHOD
опция, полезная для MERGE
таблицы только. Используйте значение FIRST
или LAST
иметь вставляет, идут в первую или последнюю таблицу, или значение NO
предотвратить вставляет. См. Раздел 14.8," MERGE
Механизм хранения".
KEY_BLOCK_SIZE
Для сжатого InnoDB
таблицы, дополнительно определяет размер в килобайтах, чтобы
использовать для страниц. Значение
обрабатывается как подсказка; различный размер мог использоваться в случае необходимости. Значение 0
представляет это значение по умолчанию сжатый размер страницы. См. Раздел
5.4.6, "Работающий с InnoDB
Сжатые Таблицы" для
деталей использования.
Человек индексирует определения, может определить a KEY_BLOCK_SIZE
оцените собственный, чтобы переопределить табличное значение.
Oracle рекомендует включить innodb_strict_mode
при использовании KEY_BLOCK_SIZE
пункт для InnoDB
таблицы. См. Раздел
14.2.5.7,"InnoDB
Строгий Режим" для деталей.
MAX_ROWS
Максимальное количество строк Вы планируете сохранить в таблице. Это не жесткий предел, а скорее подсказка к механизму хранения, что таблица должна быть в состоянии сохранить, по крайней мере, это много строк.
NDB
механизм хранения обрабатывает это значение как maxmimum. Если Вы
планируете составить очень большие таблицы MySQL Cluster (содержащий миллионы строк), следует
использовать эту опцию, чтобы обеспечить это NDB
выделяет достаточное число, индексируют слоты в хэш-таблице,
используемой для того, чтобы сохранить хеши первичных ключей таблицы, устанавливая MAX_ROWS = 2 *
, где
rows
rows
число строк, которые Вы ожидаете вставлять в таблицу.
Максимум MAX_ROWS
значение 4294967295; большие значения являются
усеченными к этому пределу.
MIN_ROWS
Минимальное число строк Вы планируете сохранить в таблице. MEMORY
механизм хранения использует эту опцию в качестве подсказки об
использовании памяти.
PACK_KEYS
PACK_KEYS
вступает в силу только с MyISAM
таблицы. Установите эту опцию в 1, если Вы хотите иметь меньший, индексирует. Это обычно делает
обновления медленнее и читает быстрее. Установка опции к 0 отключает всю упаковку ключей. Установка
этого к DEFAULT
говорит механизму хранения упаковывать только долго CHAR
, VARCHAR
, BINARY
, или VARBINARY
столбцы.
Если Вы не используете PACK_KEYS
, значение по умолчанию должно
упаковать строки, но не числа. Если Вы используете PACK_KEYS=1
, числа
упаковываются также.
Упаковывая ключи двоичного числа, MySQL использует префиксное сжатие:
Каждый ключ нуждается в одном дополнительном байте, чтобы указать, сколько байтов предыдущего ключа является тем же самым для следующего ключа.
Указатель на строку сохранен в высоком первом порядке байта непосредственно после ключа, чтобы улучшить сжатие.
Это означает, что, если у Вас есть много равных ключей на двух последовательных строках, все после
"тех же самых" ключей обычно только
берут два байта (включая указатель на строку). Сравните это с обычным случаем, где следующие ключи
берут storage_size_for_key + pointer_size
(где размер указателя обычно
4). Наоборот, Вы извлекаете существенную пользу из префиксного сжатия, только если у Вас есть много
чисел, которые являются тем же самым. Если все ключи полностью отличаются, Вы используете один байт
больше на ключ, если ключ не является ключом, который может иметь NULL
значения. (В этом случае упакованная длина ключа сохранена в том же самом байте, который
используется, чтобы отметить, если ключ NULL
.)
PASSWORD
Эта опция неиспользована. Если у Вас есть потребность скремблировать Ваш .frm
файлы и делают их неприменимыми к любому другому серверу MySQL,
пожалуйста, свяжитесь с нашим отделом продаж.
ROW_FORMAT
Определяет физический формат, в котором сохранены строки. Варианты отличаются в зависимости от механизма хранения, используемого для таблицы.
Для InnoDB
таблицы:
Строки сохранены в компактном формате (ROW_FORMAT=COMPACT
)
по умолчанию.
Некомпактный формат, используемый в более старых версиях MySQL, можно
все еще требовать, определяя ROW_FORMAT=REDUNDANT
.
Включать сжатию для InnoDB
таблицы,
определить ROW_FORMAT=COMPRESSED
и следуйте за процедурами в Разделе 5.4.6, "Работающий
с InnoDB
Сжатые Таблицы".
Для более эффективного InnoDB
хранение
типов данных, особенно BLOB
типы, определить ROW_FORMAT=DYNAMIC
и следуйте за процедурами в Разделе
5.4.8.3,"DYNAMIC
и COMPRESSED
Форматы строки". Оба COMPRESSED
и DYNAMIC
форматы
строки требуют составления таблицы с параметрами конфигурации innodb_file_per_table=1
и innodb_file_format=barracuda
.
Когда Вы определяете не по умолчанию ROW_FORMAT
пункт, рассмотрите также включение innodb_strict_mode
параметр конфигурации. См. Раздел
14.2.5.7,"InnoDB
Строгий Режим" для деталей.
Для MyISAM
таблицы, значение опции может быть FIXED
или DYNAMIC
для формата строки статической или переменной длины. myisampack устанавливает тип в COMPRESSED
. См. Раздел
14.3.3,"MyISAM
Табличные Форматы Хранения".
Выполняясь a CREATE
TABLE
оператор, если Вы определяете формат строки, который не поддерживается
механизмом хранения, который используется для таблицы, таблица, создается, используя тот формат
строки значения по умолчанию механизма хранения. Информация, сообщенная в этом столбце в ответ
на SHOW TABLE STATUS
фактический используемый формат строки. Это может отличаться от значения в Create_options
столбец, потому что оригинал CREATE TABLE
определение сохраняется во время создания.
STATS_AUTO_RECALC
Определяет, повторно вычислить ли автоматически персистентную
статистику для InnoDB
таблица. Значение DEFAULT
заставляет персистентную установку статистики для таблицы быть определенной innodb_stats_auto_recalc
параметр конфигурации. Значение 1
статистика причин, которая будет повторно вычислена, когда 10 %
данных в таблице изменились. Значение 0
предотвращает автоматический
пересчет для этой таблицы; с этой установкой выйдите ANALYZE TABLE
оператор, чтобы повторно вычислить статистику после
создания существенных изменений к таблице. Для получения дополнительной информации о персистентной
функции статистики, см. Раздел
14.2.4.2.10, "Персистентная Статистика Оптимизатора для Таблиц InnoDB".
STATS_PERSISTENT
Определяет, включить ли персистентной статистике для InnoDB
таблица. Значение DEFAULT
заставляет
персистентную установку статистики для таблицы быть определенной innodb_stats_persistent
параметр конфигурации. Значение 1
включает персистентной статистике для таблицы, в то время как
значение 0
выключает эту функцию. После включения персистентной
статистике через a CREATE TABLE
или ALTER
TABLE
оператор, выйдите ANALYZE
TABLE
оператор, чтобы вычислить статистику, после загрузки представительных данных в
таблицу. Для получения дополнительной информации о персистентной функции статистики, см. Раздел 14.2.4.2.10,
"Персистентная Статистика Оптимизатора для Таблиц InnoDB".
UNION
используется, когда Вы хотите получить доступ к набору идентичных MyISAM
таблицы как один. Это работает только с MERGE
таблицы. См. Раздел 14.8," MERGE
Механизм хранения".
Вы должны иметь SELECT
,
UPDATE
, и DELETE
полномочия для таблиц Вы отображаетесь на a MERGE
таблица.
Прежде, все используемые таблицы должны были быть в той же самой базе данных как MERGE
таблица непосредственно. Это ограничение больше не применяется.
partition_options
может использоваться, чтобы управлять разделением
таблицы, составленной с CREATE TABLE
.
Не все варианты, показывавшие в синтаксисе для partition_options
в начале этого раздела доступны для всех типов
разделения. Пожалуйста, см. списки для следующих отдельных типов для информации, определенной для каждого
типа, и см. Главу 18, Разделение,
для более полной информации о работах и использовании для того, чтобы разделить в MySQL, так же как
дополнительных примерах табличного создания и других операторов, касающихся разделения MySQL.
Если использующийся, a partition_options
пункт начинается PARTITION BY
. Этот пункт содержит функцию, которая используется, чтобы определить
раздел; функция возвращает целочисленное значение в пределах от 1 к num
, где num
число
разделов. (Максимальное количество определяемых пользователем разделов, которые может содержать таблица, 1024;
число подразделов — обсужденный позже в этом разделе — включается в этот максимум.) Варианты, которые доступны
для этой функции в MySQL 5.6, показывают в следующем списке:
HASH(
:
Хеши один или более столбцов, чтобы создать ключ для размещения и определения местоположения строк. expr
)expr
выражение, используя один или более столбцов таблицы.
Это может быть любым допустимым выражением MySQL (включая функции MySQL), который приводит к
единственному целочисленному значению. Например, они оба допустимы CREATE TABLE
использование операторов PARTITION
BY HASH
:
CREATE TABLE t1 (col1 INT, col2 CHAR(5)) PARTITION BY HASH(col1);CREATE TABLE t1 (col1 INT, col2 CHAR(5), col3 DATETIME) PARTITION BY HASH ( YEAR(col3) );
Вы не можете использовать также VALUES LESS THAN
или VALUES IN
пункты с PARTITION BY HASH
.
PARTITION BY HASH
использует остаток от expr
разделенный на число разделов (то есть, модуль). Для примеров и дополнительной информации, см. Раздел
18.2.4,"HASH
Разделение".
LINEAR
ключевое слово влечет за собой несколько различный алгоритм. В
этом случае число раздела, в котором сохранена строка, вычисляется как результат одного или более
логичное AND
операции. Для обсуждения и примеров линейного хеширования, см. Раздел
18.2.4.1,"LINEAR HASH
Разделение".
KEY(
: Это подобно column_list
)HASH
, за исключением того, что MySQL предоставляет хеш-функцию, чтобы
гарантировать даже распределение данных. column_list
параметром является просто список 1 или более столбцов таблицы (максимум: 16). Этот пример показывает
простую таблицу, разделенную ключом с 4 разделами:
CREATE TABLE tk (col1 INT, col2 CHAR(5), col3 DATE) PARTITION BY KEY(col3) PARTITIONS 4;
Для таблиц, которые делятся ключом, можно использовать линейное разделение при использовании LINEAR
ключевое слово. Это имеет тот же самый эффект как с таблицами,
которые делятся HASH
. Таким образом, число раздела находится, используя
&
оператор, а не модуль (см. Раздел 18.2.4.1,"LINEAR HASH
Разделение", и Раздел
18.2.5,"KEY
Разделение", для деталей). Этот пример
использует линейное разделение ключом, чтобы распределить данные между 5 разделами:
CREATE TABLE tk (col1 INT, col2 CHAR(5), col3 DATE) PARTITION BY LINEAR KEY(col3) PARTITIONS 5;
ALGORITHM={1|2}
опция поддерживается с [SUB]PARTITION
BY [LINEAR] KEY
начинание с MySQL 5.6.11. ALGORITHM=1
заставляет
сервер использовать те же самые ключевые хеш-функции в качестве MySQL 5.1; ALGORITHM=2
средства, что сервер использует ключевые хеш-функции, реализованные и используемые по умолчанию для
нового KEY
разделенные таблицы в MySQL 5.5 и позже. (Разделенные
таблицы, создаваемые с ключевыми хеш-функциями, используемыми в MySQL 5.5 и позже, не могут
использоваться сервером MySQL 5.1.) Не определение опции имеет тот же самый эффект как использование
ALGORITHM=2
. Эта опция предназначается для использования в основном,
обновляя или понижая [LINEAR] KEY
разделенные таблицы между MySQL 5.1 и
более поздними версиями MySQL, или для того, чтобы составить таблицы, разделенные KEY
или LINEAR KEY
на MySQL 5.5 или
более позднем сервере, который может использоваться на сервере MySQL 5.1. Для получения
дополнительной информации см. Раздел 13.1.7.1,"ALTER TABLE
Операции раздела".
mysqldump в MySQL 5.6.11 и более поздних записях эта опция, вмонтированная в корпус в имеющих версию комментариях, как это:
CREATE TABLE t1 (a INT)/*!50100 PARTITION BY KEY */ /*!50611 ALGORITHM = 1
*/ /*!50100 () PARTITIONS 3 */
Это заставляет MySQL 5.6.10 и более ранние серверы игнорировать опцию, которая иначе вызвала бы
синтаксическую ошибку в тех версиях. Если Вы планируете загрузить дамп, сделанный на MySQL 5.5.31
или более позднем сервере MySQL 5.5, где Вы используете таблицы, которые делятся или подделятся
KEY
в сервер MySQL 5.6 до версии 5.6.11, убедиться, что
консультировался с Разделом 2.11.1.1, "Обновляя
от MySQL 5.5 до 5.6", перед продолжением. (Информация, найденная там также,
применяется, если Вы загружаете дамп, содержащий KEY
разделенные или
подразделенные таблицы, сделанные из MySQL 5.6.11 или более позднего сервера в MySQL 5.5.30 или
более раннего сервера.)
Также в MySQL 5.6.11 и позже, ALGORITHM=1
показывается когда необходимо
в выводе SHOW CREATE
TABLE
использование имеющих версию комментариев тем же самым способом как mysqldump. ALGORITHM=2
всегда опускается от SHOW CREATE
TABLE
вывод, даже если эта опция была определена, составляя исходную таблицу.
Вы не можете использовать также VALUES LESS THAN
или VALUES IN
пункты с PARTITION BY KEY
.
RANGE(
:
В этом случае, expr
)expr
показывает диапазон значений, используя
ряд VALUES LESS THAN
операторы. При использовании разделения диапазона
следует определить по крайней мере одно использование раздела VALUES LESS
THAN
. Невозможно использовать VALUES IN
с разделением диапазона.
Для таблиц, разделенных RANGE
, VALUES
LESS THAN
должен использоваться или с целочисленным литеральным значением или с
выражением, которое оценивает к единственному целочисленному значению. В MySQL 5.6 можно
преодолеть это ограничение в таблице, которая определяется, используя PARTITION
BY RANGE COLUMNS
, как описано позже в этом разделе.
Предположите, что у Вас есть таблица, которую Вы хотите разделить на столбце, содержащем значения года согласно следующей схеме.
Число раздела: | Диапазон лет: |
---|---|
0 | 1990 и ранее |
1 | 1991 - 1994 |
2 | 1995 - 1998 |
3 | 1999 - 2002 |
4 | 2003 - 2005 |
5 | 2006 и позже |
Таблица, реализовывая такую схему выделения разделов может быть понята CREATE TABLE
оператор, показанный здесь:
CREATE TABLE t1 ( year_col INT, some_data INT)PARTITION BY RANGE (year_col) ( PARTITION p0 VALUES LESS THAN (1991), PARTITION p1 VALUES LESS THAN (1995), PARTITION p2 VALUES LESS THAN (1999), PARTITION p3 VALUES LESS THAN (2002), PARTITION p4 VALUES LESS THAN (2006), PARTITION p5 VALUES LESS THAN MAXVALUE);
PARTITION ... VALUES LESS THAN ...
операторы работают последовательным
способом. VALUES LESS THAN MAXVALUE
работы, чтобы определить "оставшиеся" значения, которые
больше чем максимальное значение, иначе определенное.
Отметьте это VALUES LESS THAN
пункты работают последовательно способом,
подобным тому из case
части a switch ...
case
блок (столь же найденный во многих языках программирования, таких как C, Java, и
PHP). Таким образом, пункты должны быть расположены таким способом который верхний предел,
определенный в каждом последовательном VALUES LESS THAN
больше чем тот
из предыдущего, со ссылкой того MAXVALUE
прибытие последнего из всех в
списке.
RANGE COLUMNS(
:
Эта разновидность на column_list
)RANGE
облегчает сокращение раздела для запросов,
используя условия диапазона на многократных столбцах (то есть, имея условия такой как WHERE a = 1 AND b < 10
или WHERE a = 1 AND b =
10 AND c < 10
). Это позволяет Вам определить диапазоны значений в многократных столбцах
при использовании списка столбцов в COLUMNS
пункт и ряд значений столбцов в
каждом PARTITION ... VALUES LESS THAN (
пункт определения раздела. (В самом
простом случае этот набор состоит из единственного столбца.) Максимальное количество столбцов, на
которые можно сослаться в value_list
)column_list
и value_list
16.
column_list
используемый в COLUMNS
пункт может содержать только имена столбцов; каждый столбец в
списке должен быть одним из следующих типов данных MySQL: целочисленные типы; строковые типы; и
время или типы столбца даты. Использование столбцов BLOB
, TEXT
, SET
, ENUM
, BIT
, или пространственные типы
данных не разрешаются; столбцы, которые используют типы числа с плавающей точкой, также не
разрешаются. Вы также не можете использовать функции или арифметические выражения в COLUMNS
пункт.
VALUES LESS THAN
пункт, используемый в определении раздела, должен
определить литеральное значение для каждого столбца, который появляется в COLUMNS()
пункт; то есть, список значений используется для каждого VALUES LESS
THAN
пункт должен содержать то же самое число значений, поскольку есть столбцы,
перечисленные в COLUMNS
пункт. Попытка использовать больше или меньше
значений в a VALUES LESS THAN
пункт чем есть в COLUMNS
пункт заставляет оператор перестать работать с ошибочной Несогласованностью в использовании списков столбцов для того, чтобы разделить....
Невозможно использовать NULL
для любого значения, появляющегося в VALUES LESS THAN
. Возможно использовать MAXVALUE
не раз для данного столбца кроме первого, как показано в этом примере:
CREATE TABLE rc ( a INT NOT NULL, b INT NOT NULL)PARTITION BY RANGE COLUMNS(a,b) ( PARTITION p0 VALUES LESS THAN (10,5), PARTITION p1 VALUES LESS THAN (20,10), PARTITION p2 VALUES LESS THAN (MAXVALUE,15), PARTITION p3 VALUES LESS THAN (MAXVALUE,MAXVALUE));
Каждое значение используется в a VALUES LESS THAN
список значения
должен соответствовать тип соответствующего столбца точно; никакое преобразование не делается.
Например, невозможно использовать строку '1'
для значения, которое
соответствует столбец, который использует целочисленный тип (следует использовать цифру 1
вместо этого), и при этом невозможно использовать цифру 1
для значения, которое соответствует столбец, который использует
строковый тип (в таком случае, следует использовать заключенную в кавычки строку: '1'
).
Для получения дополнительной информации см. Раздел 18.2.1,"RANGE
Разделение", и Раздел
18.4, "Сокращение Раздела".
LIST(
:
Это полезно, присваивая разделы, основанные на столбце таблицы с ограниченным набором возможных
значений, такие как состояние или код страны. В таком случае все строки, имеющие отношение к
определенному состоянию или стране, могут быть присвоены единственному разделу, или раздел может быть
зарезервирован для определенного набора состояний или стран. Это подобно expr
)RANGE
, за исключением того, что только VALUES
IN
может использоваться, чтобы определить допустимые значения для каждого раздела.
VALUES IN
используется со списком значений, которые будут
соответствующими. Например, Вы могли создать схему выделения разделов, такую как следующее:
CREATE TABLE client_firms ( id INT, name VARCHAR(35))PARTITION BY LIST (id) ( PARTITION r0 VALUES IN (1, 5, 9, 13, 17, 21), PARTITION r1 VALUES IN (2, 6, 10, 14, 18, 22), PARTITION r2 VALUES IN (3, 7, 11, 15, 19, 23), PARTITION r3 VALUES IN (4, 8, 12, 16, 20, 24));
При использовании разделения списка следует определить по крайней мере одно использование раздела
VALUES IN
. Невозможно использовать VALUES LESS
THAN
с PARTITION BY LIST
.
Для таблиц, разделенных LIST
, список значения,
используемый с VALUES IN
должен состоять из целочисленных значений
только. В MySQL 5.6 можно преодолеть это разделение использования ограничения LIST COLUMNS
, который описывается позже в этом разделе.
LIST COLUMNS(
:
Эта разновидность на column_list
)LIST
облегчает сокращение раздела для запросов,
используя условия сравнения на многократных столбцах (то есть, имея условия такой как WHERE a = 5 AND b = 5
или WHERE a = 1 AND b = 10
AND c = 5
). Это позволяет Вам определить значения в многократных столбцах при использовании
списка столбцов в COLUMNS
пункт и ряд значений столбцов в каждом PARTITION ... VALUES IN (
пункт определения раздела. value_list
)
Управление правил относительно типов данных для списка столбцов, используемого в LIST COLUMNS(
и
список значения, используемый в column_list
)VALUES IN(
то же самое как те для списка столбцов, используемого в value_list
)RANGE COLUMNS(
и список значения, используемый в
column_list
)VALUES LESS THAN(
,
соответственно, за исключением того, что в value_list
)VALUES IN
пункт, MAXVALUE
не разрешается, и можно использовать NULL
.
Есть одно важное различие между списком значений, используемых для VALUES
IN
с PARTITION BY LIST COLUMNS
в противоположность тому, когда
это используется с PARTITION BY LIST
. Когда использующийся с PARTITION BY LIST COLUMNS
, каждый элемент в VALUES
IN
пункт должен быть рядом значений столбцов;
число значений в каждом наборе должно быть тем же самым как числом столбцов, используемых в COLUMNS
пункт, и типы данных этих значений должны соответствовать
таковые из столбцов (и произойти в том же самом порядке). В самом простом случае набор состоит из
единственного столбца. Максимальное количество столбцов, которые могут использоваться в column_list
и в элементах, составляющих value_list
16.
Таблица определяется следующим CREATE TABLE
оператор обеспечивает
пример табличного использования LIST COLUMNS
разделение:
CREATE TABLE lc ( a INT NULL, b INT NULL)PARTITION BY LIST COLUMNS(a,b) ( PARTITION p0 VALUES IN( (0,0), (NULL,NULL) ), PARTITION p1 VALUES IN( (0,1), (0,2), (0,3), (1,1), (1,2) ), PARTITION p2 VALUES IN( (1,0), (2,0), (2,1), (3,0), (3,1) ), PARTITION p3 VALUES IN( (1,3), (2,2), (2,3), (3,2), (3,3) ));
Число разделов может дополнительно быть определено с a PARTITIONS
пункт, где num
num
число разделов. Если и этот пункт и любой PARTITION
пункты используются, num
должно быть равным общему количеству
любых разделов, которые объявляются, используя PARTITION
пункты.
Используете ли Вы a PARTITIONS
пункт в составлении
таблицы, которая делится RANGE
или LIST
, следует все еще включать по крайней мере один PARTITION VALUES
пункт в табличном определении (см. ниже).
Раздел может дополнительно быть разделен на многие подразделы. Это может быть
обозначено при использовании дополнительного SUBPARTITION BY
пункт.
Подразделение может быть сделано HASH
или KEY
.
Любой из них может быть LINEAR
. Они работают таким же образом как ранее
описано на эквивалентные типы разделения. (Это не возможно к подразделу LIST
или RANGE
.)
Число подразделов может быть обозначено, используя SUBPARTITIONS
ключевое слово следовало целочисленным значением.
Строгая проверка значения, используемого в PARTITIONS
или SUBPARTITIONS
пункты применяются, и это значение должно придерживаться
следующих правил:
Значение должно быть положительным, ненулевым целым числом.
Никакие начальные нули не разрешаются.
Значение должно быть целочисленным литералом, и не может не быть
выражением. Например, PARTITIONS 0.2E+01
не разрешается, даже
при том, что 0.2E+01
оценивает к 2
.
(Ошибка #15890)
Выражение (expr
) используемый в a PARTITION
BY
пункт не может отнестись ни к каким столбцам не в составленной таблице; такие ссылки определенно
не разрешаются и заставляют оператор перестать работать с ошибкой. (Ошибка #29444)
Каждый раздел может быть индивидуально определен, используя a partition_definition
пункт. Отдельные части, составляющие этот пункт,
следующие:
PARTITION
:
Это определяет логическое имя для раздела. partition_name
A VALUES
пункт: Для разделения диапазона каждый раздел
должен включать a VALUES LESS THAN
пункт; для разделения списка следует
определить a VALUES IN
пункт для каждого раздела. Это используется, чтобы
определить, какие строки должны быть сохранены в этом разделе. См., что обсуждения разделения вводят Главу 18,
Разделение, для примеров синтаксиса.
Дополнительное COMMENT
пункт может использоваться,
чтобы определить строку, которая описывает раздел. Пример:
COMMENT = 'Data for the years previous to 1999'
Начинаясь с MySQL 5.6.6, максимальная длина для комментария раздела является 1024 символами. (Ранее, этот предел не был явно определен.)
DATA DIRECTORY
и INDEX
DIRECTORY
может использоваться, чтобы указать на каталог, где, соответственно, данные и
индексирует для этого раздела, должны быть сохранены. Оба
и data_dir
должны быть абсолютные системные пути.
Пример: index_dir
CREATE TABLE th (id INT, name VARCHAR(30), adate DATE)PARTITION BY LIST(YEAR(adate))( PARTITION p1999 VALUES IN (1995, 1999, 2003) DATA DIRECTORY = '/var/appdata/95/data
' INDEX DIRECTORY = '/var/appdata/95/idx
', PARTITION p2000 VALUES IN (1996, 2000, 2004) DATA DIRECTORY = '/var/appdata/96/data
' INDEX DIRECTORY = '/var/appdata/96/idx
', PARTITION p2001 VALUES IN (1997, 2001, 2005) DATA DIRECTORY = '/var/appdata/97/data
' INDEX DIRECTORY = '/var/appdata/97/idx
', PARTITION p2002 VALUES IN (1998, 2002, 2006) DATA DIRECTORY = '/var/appdata/98/data
' INDEX DIRECTORY = '/var/appdata/98/idx
');
DATA DIRECTORY
и INDEX DIRECTORY
ведите
себя таким же образом как в CREATE
TABLE
оператор table_option
пункт как
использующийся для MyISAM
таблицы.
Один каталог данных и каждый индексируют каталог, может быть определен на раздел. Если оставлено неуказанный, данные и индексирует, сохранены по умолчанию в каталоге базы данных таблицы.
На Windows, DATA DIRECTORY
и INDEX
DIRECTORY
опции не поддерживаются для отдельных разделов или подразделов MyISAM
таблицы, и INDEX DIRECTORY
опция
не поддерживается для отдельных разделов или подразделов InnoDB
таблицы. Эти опции игнорируются на Windows, за исключением
того, что предупреждение сгенерировано. (Ошибка #30459)
DATA DIRECTORY
и INDEX
DIRECTORY
опции игнорируются для того, чтобы создать разделенные таблицы если NO_DIR_IN_CREATE
в действительности. (Ошибка #24633)
MAX_ROWS
и MIN_ROWS
может
использоваться, чтобы определить, соответственно, максимальное и минимальное число строк, которые будут
сохранены в разделе. Значения для max_number_of_rows
и min_number_of_rows
должны быть положительные целые числа.
Как с опциями на уровне таблицы с теми же самыми именами, они действуют только как "предложения" к серверу и не являются
жесткими пределами.
Дополнительное TABLESPACE
пункт может использоваться,
чтобы определять табличную область для раздела. Используемый для MySQL Cluster только.
Обработчик разделения принимает a [STORAGE] ENGINE
опция для обоих PARTITION
и SUBPARTITION
. В
настоящий момент единственный путь, которым это может использоваться, состоит в том, чтобы установить
все разделы или все подразделы к тому же самому механизму хранения, и попытка установить различные
механизмы хранения для разделов или подразделов в той же самой таблице даст начало ошибочной ОШИБКЕ 1469 (HY000): соединение обработчиков в разделах не разрешается в этой версии MySQL.
Мы ожидаем снимать это ограничение на разделение в будущем выпуске MySQL.
Определение раздела может дополнительно содержать один или больше subpartition_definition
пункты. Каждый из них состоит в
минимуме SUBPARTITION
, где
name
name
идентификатор для подраздела. За исключением замены PARTITION
ключевое слово с SUBPARTITION
,
синтаксис для определения подраздела идентичен этому для определения раздела.
Подразделение должно быть сделано HASH
или KEY
, и может быть сделан только на RANGE
или
LIST
разделы. См. Раздел 18.2.6,
"Подделя".
Разделы могут быть изменены, объединены, добавлены к таблицам, и отброшены от таблиц. Для основной информации об
операторах MySQL, чтобы выполнить эти задачи, см. Раздел
13.1.7,"ALTER TABLE
Синтаксис". Для более подробных описаний и
примеров, см. Раздел 18.3, "управление Разделом".
Оригинал CREATE TABLE
оператор, включая все спецификации и табличные опции сохранен MySQL, когда таблица составляется. Информация
сохраняется так, чтобы, если Вы изменяете механизмы хранения, сопоставления или другие настройки, используя
ALTER
TABLE
оператор, исходные табличные определенные опции сохраняется. Это позволяет Вам
измениться между InnoDB
и MyISAM
таблица вводит даже
при том, что форматы строки, поддерживаемые этими двумя механизмами, отличаются.
Поскольку текст исходного оператора сохраняется, но из-за способа, которым могут быть тихо
реконфигурированы определенные значения и опции (такой как ROW_FORMAT
),
активное табличное определение (доступный через DESCRIBE
или с SHOW TABLE STATUS
) и
табличная строка создания (доступный через SHOW CREATE TABLE
) сообщат различные значения.
Можно составить одну таблицу от другого, добавляя a SELECT
оператор в конце CREATE TABLE
оператор:
CREATE TABLEnew_tbl
SELECT * FROMorig_tbl
;
Для получения дополнительной информации см. Раздел
13.1.17.1,"CREATE TABLE ... SELECT
Синтаксис".
Использовать LIKE
составлять пустую таблицу, основанную на определении другой
таблицы, включая любой столбец, приписывает и индексирует определенный в исходной таблице:
CREATE TABLEnew_tbl
LIKEorig_tbl
;
Копия создается, используя ту же самую версию табличного формата хранения как исходная таблица. SELECT
полномочие требуется на исходной таблице.
LIKE
работы только для базовых таблиц, не для представлений.
Начиная с MySQL 5.6.1, невозможно выполниться CREATE TABLE
или CREATE TABLE ... LIKE
в то время как a LOCK TABLES
оператор в действительности.
Также с MySQL 5.6.1, 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
.