MySQL CREATE TABLE语句

时间:2019-02-04 12:52:27  来源:igfitidea点击:

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

语法

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

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字段的数据类型
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语句示例

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列。
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列中。