前面在查建表时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. 网络文件共享服务—vsftpd服务

    文件传输协议(FTP) 文件传输协议:File Transfer Protocol是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式.它属于网络传输协议的应用层. 服务器端:vsftpd ...

  2. maven在整合springmvc+hibernate运行时遇到的一些问题

    在这里大概记录一下自己在搭建的时候遇到的一些小问题. 1,在获取hibernate的sessionFactory对象时报空指针异常,我的常规配置如下:

  3. SQL-W3School-高级:SQL UNIQUE 约束

    ylbtech-SQL-W3School-高级:SQL UNIQUE 约束 1.返回顶部 1. SQL UNIQUE 约束 UNIQUE 约束唯一标识数据库表中的每条记录. UNIQUE 和 PRIM ...

  4. Google Directions API 中路线编码解析

    public List<Location> GetGeoPoints(string encoded) { List<Location> poly = new List<L ...

  5. linux安装maven及配置环境变量 配图

    Maven 3.5.0 maven安装和环境变量的配置 1 下载 maven 链接:http://pan.baidu.com/s/1qXXjXfe 密码:r92r 2 解压安装包 tar zvxf a ...

  6. android studio 低版本升级高版本的问题

    配置 适用场景 2.0 升级3.0  / 3.0升级3.1 gradle的问题注意每个AS版本的gradle插件都对应了gradle的版本 传送门 https://developer.android. ...

  7. Flutter路由_fluro引入配置和使用

    Flutter本身提供了路由机制,作个人的小型项目,完全足够了.但是如果你要作企业级开发,可能就会把入口文件变得臃肿不堪.而再Flutter问世之初,就已经了企业级路由方案fluro. flutter ...

  8. IDEA debug漏洞第二弹(fastjson,version<1.2.47)

    首先这个漏洞调试不需要非要使用docker,本身是一个jar包的问题.所以我们可以自己写一个小java代码来直接调试. POC如下 {"name":{"@type&quo ...

  9. 【log4j】的学习和理解 + 打印所有 SQL

    log4j 1.2 学习和理解 + 打印所有 SQL 一.基本资料 官方文档:http://logging.apache.org/log4j/1.2/manual.html(理解基本概念和其他) lo ...

  10. jstl标签设置通用web项目根路径-备查

    在做项目时(如SSH或SpringMVC),通常需要在很多页面(jsp中的form提交)或者js代码(一般Ajax提交)中用到当前web应用的根路径(拼成访问资源如action/controller. ...