MySQL CREATE TABLE语句


MySQL CREATE TABLE语句用于创建和定义表。

语法

在最简单的形式中,MySQL中CREATE TABLE语句的语法为:

1
2
3
4
5
6
CREATE TABLE table_name
(
column1 datatype [ NULL | NOT NULL ],
column2 datatype [ NULL | NOT NULL ],
...
);

但是,MySQL CREATE TABLE语句的完整语法为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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 字段的数据类型
NULL或NOT NULL 每个字段都要定义为NULL或NOT NULL。如果省略此参数,则数据库将使用NULL作为默认值。
DEFAULT default_value 可选的。指定默认值。
AUTO_INCREMENT 可选的。将列设置为自动编号字段。
constraint_name 可选的。约束的名称(如果定义了主键,唯一约束或外键)。
index_col_name 可选的。它的语法:column_name [ (length) ] [ ASC | DESC ]

注意
在表中只能有一个字段被设置为AUTO_INCREMENT,并且该列必须是主键。

MySQL CREATE TABLE语句示例

1
2
3
4
5
6
7
CREATE TABLE contacts
( contact_id INT(11) NOT NULL AUTO_INCREMENT,
last_name VARCHAR(30) NOT NULL,
first_name VARCHAR(25),
birthday DATE,
CONSTRAINT contacts_pk PRIMARY KEY (contact_id)
);

这个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列。
1
2
3
4
5
6
CREATE TABLE suppliers
( supplier_id INT(11) NOT NULL AUTO_INCREMENT,
supplier_name VARCHAR(50) NOT NULL,
account_rep VARCHAR(30) NOT NULL DEFAULT 'YKBJ',
CONSTRAINT suppliers_pk PRIMARY KEY (supplier_id)
);

这个示例创建了一个具有DEFAULT值的表,该表格有3个字段和一个主键:

  • 第一列称为Supplier_id,它是作为INT数据类型创建的(最大长度为11位),并且不能包含NULL值。设置为AUTO_INCREMENT字段。
  • 第二列称为Supplier_name,它是VARCHAR数据类型(最大50个字符),并且不能包含NULL值。
  • 第三列称为account_rep,它是VARCHAR数据类型(最大30个字符),不能包含NULL值。如果没有为该列提供值,则默认值将为“YKBJ”。主键称为Suppliers_pk,并设置在vendor_id列中。


原文链接:https://codingdict.com/