前面在查建表时key和index的区别时,发现建表语句包含了太多信息,于是完整看看官方手册的这一小节。

  该文章根据MySQL 5.7的手册作笔记,而MySQL 8.0该节地址如下:

  https://dev.mysql.com/doc/refman/8.0/en/create-table.html

〇、概述

  CREATE TABLE创建一个使用指定名称的table,当然前提是用户拥有CREATE权限。

  常用的简单的建表语句:

/*建表的语法*/
create table [if not exist] Table_name(
字段一 数据类型 [字段属性|约束] [索引] [注释] ,
字段二 数据类型 [字段属性|约束] [索引] [注释] ,
.........
)[表类型][表字符集][注释] /*创建一个InnoDB类型,字符集为utf-8,备注为“test Table”的表*/
/*在这里,我惊喜地发现,单引号、双引号可以使用在comment关键字中!!*/
create table test(id int(4))engine=innodb,charset=utf8,comment="test Table";

  默认情况下,表会创建在当前数据库下(use database决定当前使用的数据库),并使用默认的存储引擎(InnoDB)。

  以下情况会报错:

  • 当前没有使用任何数据库,或者要使用的数据库不存在;
  • 数据库中已经存在同名表

  关于表的物理表示的信息会在第二节讲述。

  而创建表时,MySQL会存储原始的CREATE TABLE语句,包括所有规范和表选项。这是接下来第一节的内容

  现在要谈到的是CREATE TABLE的以下几个方面:

  • Table name
  • Temporary Tables
  • Cloning or Copying a Table
  • Column Data Types and Attributes
  • Indexes and Foreign Keys
  • Table Options
  • Creating Partitioned Tables

  

  0.1 Table Name

  关于Table_name:

  可以被指定为database_name.table_name,就可以直接在指定的数据库中创建表。

  当然,如果要使用引号,对db_name和tb_name都要使用引号,`da_name`.`tb_name`。(事实上,这里的并不是‘’这种符号,而是键盘上左上角的“~”键)

  table名的命名规约在9.2章节。

  关于 IF NOT EXISTS:

  阻止错误发生。尽管并不会验证已经存在的表是否与要创建的表具有完全一致的表结构。

  0.2 Temporary Tables

  可以在建表时使用“Temporary ”关键字,那么所创建的临时表只会在当前会话中可见,会话关闭后,该数据库就会被自动删除。

  0.3 Cloning or Copying a Table

  Like

  使用“create table ... like”来基于其它表的定义创建一个空表,新表包括了列的所有属性有以及索引。

CREATE TABLE new_tbl LIKE orig_tbl;

  [as] query_expression

  根据一个查询结果集,创建一个包含这些数据的新表。

CREATE TABLE new_tbl AS SELECT * FROM orig_tbl;

  IGNORE | REPLACE

  这两个选项表明,当根据select语句创建表时,该如何处理复制唯一键值的行。(how to handle rows that duplicate unique key values when copying a table using a SELECT statement.)

  0.4 Column Data Types and Attributes

  这些就是表的字段定义了。字段的数据类型、属性等。

  每个表的硬限制为4096列,但实际上限会小一些,着取决于一些其它因素。

  这里的选项太多,稍后再聊。

  0.5 Indexs And Foreign Keys

  0.6 Table Options

  Table Options被用来对表的行为进行优化。

  在大多数情况下,不需要指定任何选项。

  这些选项会应用于所有的存储引擎,除非特别指出。若一个表决定不应用这些选项,这会被记作表定义的一部分。如果稍后使用ALTER TABLE将表转换为使用不同的存储引擎,则又可以应用这些选项。

  表选项也特别多,常见的如指定engine、charset。

  0.7 Creating Partitioned Tables

  可用于控制使用CREATE TABLE创建的表的分区。

  选项也很多

  

  0.8 Partitioning by Generated Columns

  允许根据生成列进行分区。

一、CREATE TABLE Statement Retention(语句保留)

MySQL create table语法详解的更多相关文章

  1. mysql create table 语法详解

    create table 可以分成三类 一.一般create table 语句: 1 语法 create [temporary] table [if not exists] tbl_name (cre ...

  2. Oracle创建表语句(Create table)语法详解及示例

    创建表(Create table)语法详解1. ORACLE常用的字段类型ORACLE常用的字段类型有VARCHAR2 (size) 可变长度的字符串, 必须规定长度CHAR(size) 固定长度的字 ...

  3. Oracle创建表语句(Create table)语法详解及示例、、 C# 调用Oracle 存储过程返回数据集 实例

    Oracle创建表语句(Create table)语法详解及示例 2010-06-28 13:59:13|  分类: Oracle PL/SQL|字号 订阅 创建表(Create table)语法详解 ...

  4. mysql create dabase 语法详解

    由于SQL标准的存在,各个关系型数据库管理系统中创建库的语句都差不多 一.mysql 中创建数据库的语法如下: 1.创建数据库的语法: create {database | schema } [if ...

  5. MySQL create table 语法

    MySQL中create table语句的基本语法是: CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name     [(create_definitio ...

  6. MySQL create table语法中的key与index的区别

    在create table的语句中,key和index混淆在一起,官方手册中的解释是这样: KEY is normally a synonym for INDEX. The key attribute ...

  7. Mysql数据库查询语法详解

    数据库的完整查询语法 在平常的工作中经常需要与数据库打交道 , 虽然大多时间都是简单的查询抑或使用框架封装好的ORM的查询方法 , 但是还是要对数据库的完整查询语法做一个加深理解 数据库完整查询语法框 ...

  8. mysql用户授权、数据库权限管理、sql语法详解

    mysql用户授权.数据库权限管理.sql语法详解 —— NiceCui 某个数据库所有的权限 ALL 后面+ PRIVILEGES SQL 某个数据库 特定的权限SQL mysql 授权语法 SQL ...

  9. mysql CREATE TABLE语句 语法

    mysql CREATE TABLE语句 语法 作用:创建数据库中的表. 大理石量具系列 语法:CREATE TABLE 表名称 (列名称1 数据类型,列名称2 数据类型,列名称3 数据类型,.... ...

随机推荐

  1. 初中知识回顾tan,sin,cos关系

    如果K=tan, sin 是X x=k/power(1+k*k,0.5)  开平方 cos是y y=1.0/power(1+k*k,0.5) 开平方 gisoracle总结 ============= ...

  2. HearthBuddy炉石兄弟 Method 'Entity.GetRace' not found.

    解决方案 namespace Triton.Game.Mapping{// Token: 0x020004A4 RID: 1188[Attribute38("Entity")]pu ...

  3. Linux学习笔记:fuser和lsof

    fuser 和 lsof 可以用于系统安全检查.用fuser查看哪些用户和进程在某些地方作什么:fuser -cu /root 简略显示fuser -muv /mnt3 分列显示 lsof 拥有更多的 ...

  4. 错误注入 异常行为 环境变量或代码动态激活来触发这些异常行为 模拟错误 容错性 正确性 稳定性 宏 本质 macro

    小结: 1. 微服务中某个服务出现随机延迟.某个服务不可用. 存储系统磁盘 IO 延迟增加.IO 吞吐量过低.落盘时间长. 调度系统中出现热点,某个调度指令失败. 充值系统中模拟第三方重复请求充值成功 ...

  5. [activemq]+spring的使用

    一.生产端(Producer) applicationContext.xml中的配置: <?xml version="1.0" encoding="UTF-8&qu ...

  6. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_15-webpack研究-webpack-dev-server-程序调试

    webpack把我们的js文件都打包了.所以不能用chrome的调试工具. 打包生成的js文件比较乱无法跟踪. 配置好了以后就可以让浏览器查看到打包后的源代码 在源代码这里加一个debuuger 这里 ...

  7. checklist和基础安全知识

    checklist和基础安全知识 https://book.yunzhan365.com/umta/rtnp/mobile/index.html 网络安全科普小册子 http://sec.cuc.ed ...

  8. 申请 Let's Encrypt 通配符 HTTPS 证书

    目录 一.背景知识 1.1.什么是通配符证书 1.2.什么是 Let's Encrypt 二.证书申请(certbot) 2.1.系统确定 2.2.工具安装 2.3.证书申请 2.4.证书查看 2.5 ...

  9. Flutter 接口签名MD5加密

    第一步 更新pubspec.yaml crypto: ^+ 第二步 先引入头文件: import 'dart:convert'; import 'package:convert/convert.dar ...

  10. 当微信小程序遇到AR(三)

    当微信小程序遇到AR,会擦出怎么样的火花?期待与激动...... 通过该教程,可以从基础开始打造一个微信小程序的AR框架,所有代码开源,提供大家学习. 本课程需要一定的基础:微信开发者工具,JavaS ...