MySQL进阶语法

2. create table

语法:


CREATE TABLE创建一个具有给定名称的表。你必须具有表的CREATE权限。

默认情况下,CREATE TABLE会在默认数据库创建表,且使用的是InnoDB存储引擎。如果表已经存在,或者没有默认数据库,或者指定的数据库不存在,则返回错误。

MySQL会存储表创建时原始的CREATE TABLE语句,包括所有说明和表选项。

本节将讨论CREATE TABLE的以下几个方面:

表名

临时表

复制表

列数据类型及属性

索引和外键

表选项

创建分区表


表名

tbl_name

可以将表名称指定为db_name.tbl_name以期在特定数据库中创建表。只要目标数据库存在,那么不论是否指定了默认数据库,这种方法都有效。如果你在名字里面使用了引用标识符,那么就需要分别引用数据库名和表名。例如,`mydb`.`mytbl`,而不能是`mydb.mytbl`


IF NOT EXISTS

如果表已经存在,则防止发生错误。注意,MySQL并不会验证现有表结构与CREATE TABLE语句指定的表结构是否相同。


临时表

创建表时可以使用关键字TEMPORARY。临时表仅在当前会话中可见,并在会话关闭时自动删除。


复制表

LIKE

可以使用CREATE TABLE ... LIKE语句根据另一个表的定义创建一个空表,该空表将包含原表所有的列属性和索引



[AS] query_expression

要从另一个表中创建一个新表,可以在CREATE TABLE语句的末尾添加一个SELECT语句:



IGNORE | REPLACE

当使用SELECT语句复制表时,IGNORE和REPLACE选项用于指示如何处理导致唯一键产生重复的行。


列数据类型及属性

理论上每个表的列数的上限是4096,但是对于一个给定的表来说,有效的最大值可能比该值要小。


data_type

data_type表示列定义中的数据类型,spatial_type表示空间数据类型。

某些属性不适用于所有数据类型。AUTO_INCREMENT只适用于整数和浮点数类型。DEFAULT不适用于TEXT或BLOB类型;

字符数据类型(CHAR, VARCHAR, TEXT)可以包含CHARACTER SET和COLLATE属性以指定列的字符集和排序规则。其中,CHARSET等同于CHARACTER SET。例如:


MySQL5.5将字符列定义中的长度说明解释为字符数;将二进制字符列(BINARY和VARBINARY)定义中的长度说明解释为字节数


对于CHAR, VARCHAR, BINARY和VARBINARY列,可以创建仅使用列值前缀的索引,可以使用col_name(length)语法指定索引前缀的长度。TEXT和BLOB列也可以被索引,但必须指定前缀长度。对于非二进制字符串类型,前缀长度是字符数;对于二进制字符串类型,前缀长度是字节数。也就是说,对于CHAR, VARCHAR和TEXT列,索引项由列值的前length个字符组成;对于BINARY, VARBINARY和BLOB列,索引项由列值的前length个字节组成。前缀索引可以使索引文件更小。


只有InnoDB和MyISAM存储引擎支持对TEXT和BLOB列进行索引。例如:



NOT NULL | NULL

一个列如果既没有指定NULL,也没有指定NOT NULL,则等同于指定了NULL。

在MySQL 5.5中,只有InnoDB,MyISAM和MEMORY存储引擎支持索引可为NULL的列。其它情况下,你必须将索引列声明为NOT NULL,否则会出错


DEFAULT

指定列的默认值。默认值必须是常量,不能是函数或表达式。这意味着,你不能将一个DATE列的默认值设置为诸如NOW()或CURRENT_DATE之类的函数的值。例外是可以将CURRENT_TIMESTAMP指定为TIMESTAMP列的默认值。


如果列定义没有显式的DEFAULT值,则MySQL将按照第11.6节“数据类型默认值”中所描述的来确定默认值。


TEXT和BLOB列不能指定默认值


如果日期的默认值不符合NO_ZERO_IN_DATE SQL模式,则CREATE TABLE将失败,即使并没有启用严格的SQL模式。例如,c1 DATE DEFAULT '2010-00-00' 将导致CREATE TABLE失败,错误信息为:Invalid default value for 'c1'


AUTO_INCREMENT

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值