19)
创建表
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] table
(create_clause, …)
[table_options]
[[IGNORE | REPLACE] select]
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] table LIKE old_table
该命令用来定义数据库中表的结构。如果使用了
TEMPORARY
关键字,该表只在当前客户端连接存在时存在。而
IF NOT EXISTS
表示
MySQL
仅在表不存在时才创建,如果表存在,而又没有指定
IF NOT EXISTS
和
TEMPORARY
,则系统会报错。如果指定了
TEMPORARY
没指定
IF NOT EXISTS
,而表又存在,那么此时已存在的表将对当前客户端隐藏。
CREATE
子句可以定义特定列的结构,也可以定义该列的元结构。定义列的子句包含任意数目的字段定义,其语法如下:
column type
[NOT NULL | NULL] [DEFAULT value] [AUTO_INCREMENT] [PRIMARY KEY] [reference]
其标识符含义如下:
⑴
AUTO_INCREMENT
:表示列使用其当前最大值自增,只有数值型列才适用。
⑵
DEFAULT value
:为字段分配默认值。
⑶
NOT NULL
:保证每个值都不为空。
⑷
NULL
:表示字段可包含空值,如果字段是主关键字或
SPATIAL
索引,则不能使用该选项。
⑸
PRIMARY KEY
:表示该字段是主关键字。
⑹
REFERENCE table [(column, …)] [MATCH FULL | MATCH PARTIAL] [ON DELETE option] [ON UPDATE option]
:创建外关键字引用,仅对
InnoDB
表适用。
可以通过以下子句来设置元结构如索引和约束:
⑴
FULLTEXT (column, …)
:创建全文本的索引。
⑵
INDEX [name] (column, …)
:创建常规索引。
⑶
KEY [name] (column, …)
:等价于
INDEX
。
⑷
PRIMARY KEY
:创建表的主关键字。
⑸
UNIQUE [name] (column, …)
:创建值必须唯一的特殊索引。
从
MySQL 3.23
开始,可以在
CREATE TABLE
语句末尾指定表选项,它们包括:
⑴
AUTO_INCREMENT = start
指定用于自增列的起始值,适用于
MyISAM
、
InnoDB
和
MEMORY
表。
⑵
AVG_ROW_LENGTH = length
对于包含大量变长数据的表,平均行长可用于
MySQL
对这些数据进行优化。
⑶
CHECKSUM = 0 or 1
当设置为
1
时,则强制
MySQL
对表进行校验以提升数据的一致性,会对性能有所影响。
⑷
COMMENT = comment
为表提供注释,一般不超过
60
个字符。
⑸
DELAY_KEY_WRITE = 0 or 1
仅适用于
MyISAM
。如果设置为
1
,则当表关闭时,才执行更新。
⑹
ENGINE = engine
指定数据库的表类型。如果选定的表类型不存在,则使用最相近的表类型。
⑺
MAX_ROWS = rowcount
指定表中存放的最大行数。
⑻
MIN_ROWS = rowcount
指定表中存放的最小行数。
⑼
PACK_KEYS = 0 or 1
仅适用于
MyISAM
表。该选项可对读操作多的表提供性能改善,当设置为
1
时,会创建更小的关键字,这样写操作会慢而读操作会加速。
⑽
PASSWORD = ‘password’
仅有包含特殊商业许可的用户才能使用。该选项会使用指定密码加密表的
.frm
文件。
⑾
ROW_FORMAT = DYNAMIC or STATIC (MyISAM) COMPACT or REDUNDANT (InnoDB)
定义行如何存储在表中。
可以直接由
SQL
查询创建表。当创建表时,必须拥有数据库的
CREATE
权限。
示例:
CREATE TABLE emp (id INT, name CHAR(50) );
CREATE TABLE IF NOT EXISTS emp_review (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
emp_id INT NOT NULL REFERENCES emp (id),
review TEXT NOT NULL,
INDEX (emp_id),
FULLTEXT (review)
) AUTO_INCREMENT = 1, ENGINE = MyISAM;
CREATE TABLE Stadium
SELECT stadiumName, stadiumLocation
FROM City;