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
    评论
MySQL的触发器是一种在特定事件发生时自动执行的数据库对象。它们可以用于在表上插入、更新或删除数据时执行特定的操作。当你想要在数据库中进行更复杂的逻辑处理时,触发器是非常有用的。 以下是一些MySQL触发器的进阶概念和用法: 1. 触发器的语法:创建触发器时,你需要指定触发器的名称、触发器所在的表、触发器事件(如INSERT、UPDATE或DELETE),以及触发器要执行的动作。触发器可以在BEFORE或AFTER事件之前或之后触发。 2. NEW和OLD关键字:在触发器中,你可以使用NEW和OLD关键字来引用插入、更新或删除的数据。NEW关键字表示插入或更新后的数据行,而OLD关键字表示被更新或删除之前的数据行。 3. 触发器的类型:MySQL支持BEFORE和AFTER两种类型的触发器。BEFORE触发器在事件之前执行,可以用于修改即将插入、更新或删除的数据。AFTER触发器在事件之后执行,可以用于记录日志或执行其他操作。 4. 触发器的事件:触发器可以与INSERT、UPDATE和DELETE事件相关联。例如,你可以创建一个AFTER INSERT触发器,在每次插入新行时执行某些操作。 5. 触发器的应用场景:触发器可以用于实现数据完整性约束、自动更新关联数据、记录审计信息等。例如,你可以创建一个BEFORE INSERT触发器来验证插入的数据是否符合特定的规则。 总之,MySQL触发器是一个强大的工具,可以在特定事件发生时自动执行操作。通过触发器,你可以实现更

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值