MySQL中CREATE语法

初学数据库时,身为DDL的CREATE语句就是必修的,也可以说是最早接触的,可能很多人还是只清楚简单的CREATE TABLE table_name (…);我曾经也是如此,顶多知道括号后面可以跟一些引擎设置,字符集设置等等,这篇文章就是用来升华的,深入了解下CREATE基本语法。

一、语法

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] table_name
[(
COLUMN_DEFINITION,
...
)]
[TABLE_OPTIONS]
[SELECT_STATEMENT]

二、解析

(1)TEMPORARY
用于创建临时表,CREATE TEMPORARY TABLE table_name;这个临时表在当前会话结束或者连接断开后将自动消失。
临时表详细内容可见我的另一篇文章《MySQL中临时表(TEMPORARY)》

(2)IF NOT EXISTS
实际上就是在建表前加上一个判断,只有该表目前尚不存在时才执行CREATE TABLE操作。用此选项可以避免出现表已经存在无法再新建的错误。

(3)table_name
需要创建的表名。该表名必须符合标识符规则,通常的做法是在表名中仅使用字母、数字及下划线。

(4)COLUMN_DEFINITION
所创建的表中各列的相关属性定义。
语法如下:

column_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] 
[PRIMARY KEY]
| PRIMARY KEY (index_col_name,...) 
| KEY [index_name] (index_col_name,...) 
| INDEX [index_name] (index_col_name,...) 
| UNIQUE [INDEX] [index_name] (index_col_name,...) 
| [CONSTRAINT symbol] FOREIGN KEY index_name (index_col_name,...) 
[COMMENT reference_definition] 
or CHECK (expr) 

如上所示,列的相关属性定义语法内容相当丰富,这里就简单介绍下,后续可能会来补充,不熟悉的也可以自行查阅资料。
1)column_name:
表中列的名字。必须符合标识符规则,而且在表中要唯一。
2)type:
列的数据类型。有的数据类型需要指明长度n,并用括号括起。目前MySQL提供的数据类型详见MySQL进阶_列类型篇。
3)NOT NULL | NULL:
指定该列是否允许为空。如果既不指定NULL也不指定NOT NULL,列被认为指定了NULL。
4)DEFAULT default_value:
为列指定默认值。如果没有为列指定默认值,MySQL自动地分配一个。
如果列可以取NULL作为值,缺省值是NULL。
如果列被声明为NOT NULL,缺省值取决于列类型:
1、对于没有声明AUTO_INCREMENT属性的数字类型,缺省值是0。对于一个AUTO_INCREMENT列,缺省值是在顺序中的下一个值。
2、对于除TIMESTAMP的日期和时间类型,缺省值是该类型适当的“零”值。对于表中第一个TIMESTAMP列,缺省值是当前的日期和时间。
3、对于除ENUM的字符串类型,缺省是空字符串。对于ENUM,缺省值是第一个枚举值。
5)AUTO_INCREMENT:
设置该列有自增属性,只有整型列才能设置此属性。
当你插入NULL值或0到一个AUTO_INCREMENT列中时,列被设置为value+1,在这里value是此前表中该列的最大值。AUTO_INCREMENT顺序从1开始。每个表只能有一个AUTO_INCREMENT列,并且它必须被索引。

(5)TABLE_OPTIONS
设置表的一些属性定义:
1)引擎设置
例如:ENGINE|TYPE = MYISAM
2)字符集设置
例如:CHARACTER SET gbk
3)排序规则设置
例如:COLLATE gbk_chinese_ci
COLLATE是用来做什么的?
是用来排序的规则。对于mysql中那些字符类型的列,如VARCHAR,CHAR,TEXT类型的列,都需要有一个COLLATE类型来告知mysql如何对该列进行排序和比较。简而言之,COLLATE会影响到ORDER BY语句的顺序,会影响到WHERE条件中大于小于号筛选出来的结果,会影响DISTINCT、GROUP BY、HAVING语句的查询结果。另外,mysql建索引的时候,如果索引列是字符类型,也会影响索引创建,只不过这种影响我们感知不到。总之,凡是涉及到字符类型比较或排序的地方,都会和COLLATE有关。

(6)SELECT_STATEMENT

//如下直接通过select查询出指定数据存入新建的表中
CREATE TABLE ...
SELECT ...

参考自:
https://www.jb51.net/article/6257.htm

越努力,越强大,没有理由让自己停下。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值