MySQL创建数据表时使用CREATE TABLE。
CREATE TABLE [IF NOT EXISTS] <表名> (<列名1> <类型1> [UNSIGNED] [ZEROFILL] [NULL | NOT NULL] [AUTO_INCREMENT] [,…] <列名n> <类型n>) [PRIMARY KEY (`<列名1>[,…]<列名n>`)] [(INDEX | UNIQUE INDEX | FULLTEXT INDEX) [`<索引名称>`] (`<列名>`) [USING BTREE | USING HASH] ] [表选项] [分区选项];
[ ]中的内容是可选的,()代表集合, |代表或, …代表可有多个,<>是中文解释,逗号','代表分隔号。语法说明:
<表名>:创建数据表的名称。
IF NOT EXISTS:在创建数据表库之前进行判断,只有该数据表目前尚不存在时才能执行操作。此选项可以用来避免数据表已经存在而重复创建的错误。
<列名1><类型1>: 表创建定义,由列名(col_name)、列的定义(column_definition)以及可能的空值说明、完整性约束或表索引组成。数据类型选择可参考 MySQL数据类型。
[UNSIGNED]:可选,字段值为无符号,是一个数据类型修饰符,可以用来修饰整数类型数据。表示它们的数据范围都是正整数,而没有负整数。
[ZEROFILL]:可选,字段值填充零。字段类型后面的括号表示一个宽度,使用了zerofill后,当数据小于这个宽度时会自动填充0。
[NULL |NOT NULL]:可选,NULL字段可输入NULL,NOT NULL字段不可输入NULL值。
[AUTO_INCREMENT]:可选,字段值自动递增。
[PRIMARY KEY ]:为主键,主键的值是唯一的,可由一个字段或多个字段组成。多个用逗号隔开。
(INDEX | UNIQUE INDEX | FULLTEXT INDEX):INDEX是 普通索引| UNIQUE INDEX是唯一索引 | FULLTEXT INDEX是全文索引)多个索引需要另起一行。
[USING BTREE | USING HASH]:为索引方式。USING BTREE是使用B+树平衡的多叉树,使用最为频繁的索引类型。USING HASH是使用哈希索引方式。
[表选项]、[分区选项]:为可不填项,而其定义不常用较为复杂,这里不多解释了
语法1案例:
创建一个b数据表,b表有两列分别是id和string列。id列为int整形类型没有指定长度其内容不允许为NULL,string为varchar数据类型长度为10内容可为NULL
CREATE TABLE `b` ( `id` int NOT NULL, `string` varchar(10) NULL )
mysql> select * from b; Empty set (0.00 sec)
CREATE TABLE [IF NOT EXISTS] <临时表名> (<列名1> <类型1> [,…] <列名n> <类型n>) [表选项] [分区选项] [IGNORE | REPLACE] [AS <查询表达式>]
语法说明:
[IF NOT EXISTS]、<数据表名>、<列名1><类型1>、[表选项]、[分区选项]:同语法1。
[IGNORE | REPLACE]:选项指示在使用语句复制表时如何处理重复唯一键值的行。在唯一键值上重复现有行的行将被丢弃。使用 时 REPLACE,新行将替换具有相同唯一键值的行。如果既没有指定IGNORE也没有 REPLACE指定,重复的唯一键值会导致错误。
[AS <查询表达式>]:要从另一个表创建一个表。
将对a表查询结果创建为名叫b的数据表
CREATE TABLE b select * from a;
![]() | 语法2在创建b数据表的时候是有数据的,因为是以查询结果新建的。 |
CREATE TABLE [IF NOT EXISTS] <数据表名> { LIKE <旧表名> | (LIKE <旧表名>) }
以a表的表结构创建一个名叫b数据表
CREATE TABLE b like a;
会话创建数据表后,服务器不再对该表执行进一步的权限检查。创建会话可以对表执行任何操作,例如DROP TABLE、 INSERT、 UPDATE、 或 SELECT。