CREATE TABLE оператор MySQL

В этом учебном пособии вы узнаете, как использовать MySQL оператор CREATE TABLE с синтаксисом и примерами.

Описание

MySQL оператор CREATE TABLE позволяет создавать и определять таблицу.

Синтаксис

Простая форма синтаксиса оператора CREATE TABLE в MySQL:

CREATE TABLE table_name
(
column1 datatype [ NULL | NOT NULL ],
column2 datatype [ NULL | NOT NULL ],

);
Полный синтаксис оператора MySQL CREATE TABLE:
CREATE [ TEMPORARY ] TABLE [IF NOT EXISTS] table_name
(
column1 datatype [ NULL | NOT NULL ]
[ DEFAULT default_value ]
[ AUTO_INCREMENT ]
[ UNIQUE KEY | PRIMARY KEY ]
[ COMMENT ‘string’ ],

column2 datatype [ NULL | NOT NULL ]
[ DEFAULT default_value ]
[ AUTO_INCREMENT ]
[ UNIQUE KEY | PRIMARY KEY ]
[ COMMENT ‘string’ ],

| [CONSTRAINT [constraint_name]] PRIMARY KEY [ USING BTREE | HASH ] (index_col_name, …)
| [INDEX | KEY] index_name [ USING BTREE | HASH ] (index_col_name, …)
| [CONSTRAINT [constraint_name]] UNIQUE [ INDEX | KEY ]
[ index_name ] [ USING BTREE | HASH ] (index_col_name, …)

| {FULLTEXT | SPATIAL} [ INDEX | KEY] index_name (index_col_name, …)

| [CONSTRAINT [constraint_name]]
FOREIGN KEY index_name (index_col_name, …)
REFERENCES another_table_name (index_col_name, …)
[ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ]
[ ON DELETE { RESTRICT | CASCADE | SET NULL | NO ACTION } ]
[ ON UPDATE { RESTRICT | CASCADE | SET NULL | NO ACTION } ]

| CHECK (expression)

{ENGINE | TYPE} = engine_name
| AUTO_INCREMENT = value
| AVG_ROW_LENGTH = value
| [DEFAULT] CHARACTER SET = charset_name
| CHECKSUM = {0 | 1}
| [DEFAULT] COLLATE = collation_name
| COMMENT = ‘string’
| DATA DIRECTORY = ‘absolute path’
| DELAY_KEY_WRITE = { 0 | 1 }
| INDEX DIRECTORY = ‘absolute path’
| INSERT_METHOD = { NO | FIRST | LAST }
| MAX_ROWS = value
| MIN_ROWS = value
| PACK_KEYS = {0 | 1 | DEFAULT}
| PASSWORD = ‘string’
| RAID_TYPE = { 1 | STRIPED | RAIDO }
RAID_CHUNKS = value
RAID_CHUNKSIZE = value
| ROW_FORMAT = {DEFAULT | DYNAMIC | FIXED | COMPRESSED}
| UNION = (table1, … )
);

Параметры или аргументы

TEMPORARY — необязательный. Он указывает, что таблица является временной таблицей.
IF NOT EXISTS — необязательный. Если указано, оператор CREATE TABLE не приведет к возникновению ошибки, если таблицы уже существуют.
table_name — имя таблицы, которую вы хотите создать.
column1, column2 — столбцы, которые вы хотите создать в таблице.
datatype — тип данных для столбца и может быть одним из следующих:

Значение
CHAR [ (length) ] [ CHARACTER SET charset_name ] [ COLLATE collation_name ]
VARCHAR [ (length) ] [ CHARACTER SET charset_name ] [ COLLATE collation_name ]
BINARY [ (length) ]
VARBINARY (length)
DATE
TIME
TIMESTAMP
DATETIME
YEAR
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 ]
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, …) [ CHARACTER SET charset_name ] [ COLLATE collation_name ]

NULL или NOT NULL — каждый столбец должен быть определен как NULL или NOT NULL. Если этот параметр опущен, база данных предполагает значение NULL по умолчанию.
DEFAULT default_value — необязательный. Это значение присваивается столбцу, если он оставлен пустым или NULL.
AUTO_INCREMENT — необязательный. Он устанавливает столбец как поле с автонумерацией.
constraint_name — необязательный. Имя ограничения, если вы определяете первичный ключ, уникальное ограничение или внешний ключ.
index_col_name — необязательный. Это следующий синтаксис:

column_name [ (length) ] [ ASC | DESC ]

Примечание

  • В таблице может быть только один столбец, который устанавливается как AUTO_INCREMENT, и этот столбец должен быть первичным ключом.

Пример

Рассмотрим MySQL пример CREATE TABLE.

Этот пример MySQL CREATE TABLE создает таблицу с именами contacts, которая имеет 4 столбца и один первичный ключ:

  • Первый столбец называется contact_id, который создается как тип данных INT (максимальная длина 11 цифр в) и не может содержать значения NULL. Он устанавливается как поле AUTO_INCREMENT, что означает, что это поле с автонумерацией (начинается с 1 и увеличивается на 1, если не указано иное).
  • Второй столбец называется last_name, который является типом данных VARCHAR (максимум 30 символов) и не может содержать значения NULL.
  • Третий столбец называется first_name, который является типом VARCHAR (максимум 25 символов в длину) и может содержать значения NULL.
  • Четвертый столбец называется birthday, который является типом данных DATE и может содержать значения NULL.
  • Первичный ключ называется contacts_pk и устанавливается в столбец contact_id.

Далее, давайте создадим таблицу с DEFAULT VALUE.

Этот MySQL пример CREATE TABLE создает таблицу с именем suppliers, которая имеет 3 столбца и один первичный ключ:

  • Первый столбец называется supplier_id, который создается как тип данных INT (максимальная длина 11 цифр) и не может содержать значений NULL. Он устанавливается как поле AUTO_INCREMENT.
  • Второй столбец называется supplier_name, который является типом данных VARCHAR (максимальная длина 50 символов) и не может содержать значений NULL.
  • Третий столбец называется account_rep, который является типом данных VARCHAR (максимальная длина 30 символов) и не может содержать значений NULL. Если для этого столбца значение не указано, то значение DEFAULT VALUE будет «TBD».
  • Первичный ключ называется suppliers_pk и устанавливается в столбец supplier_id.