MySQL create table语法详解
前面在查建表时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语法详解的更多相关文章
- mysql create table 语法详解
create table 可以分成三类 一.一般create table 语句: 1 语法 create [temporary] table [if not exists] tbl_name (cre ...
- Oracle创建表语句(Create table)语法详解及示例
创建表(Create table)语法详解1. ORACLE常用的字段类型ORACLE常用的字段类型有VARCHAR2 (size) 可变长度的字符串, 必须规定长度CHAR(size) 固定长度的字 ...
- Oracle创建表语句(Create table)语法详解及示例、、 C# 调用Oracle 存储过程返回数据集 实例
Oracle创建表语句(Create table)语法详解及示例 2010-06-28 13:59:13| 分类: Oracle PL/SQL|字号 订阅 创建表(Create table)语法详解 ...
- mysql create dabase 语法详解
由于SQL标准的存在,各个关系型数据库管理系统中创建库的语句都差不多 一.mysql 中创建数据库的语法如下: 1.创建数据库的语法: create {database | schema } [if ...
- MySQL create table 语法
MySQL中create table语句的基本语法是: CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definitio ...
- MySQL create table语法中的key与index的区别
在create table的语句中,key和index混淆在一起,官方手册中的解释是这样: KEY is normally a synonym for INDEX. The key attribute ...
- Mysql数据库查询语法详解
数据库的完整查询语法 在平常的工作中经常需要与数据库打交道 , 虽然大多时间都是简单的查询抑或使用框架封装好的ORM的查询方法 , 但是还是要对数据库的完整查询语法做一个加深理解 数据库完整查询语法框 ...
- mysql用户授权、数据库权限管理、sql语法详解
mysql用户授权.数据库权限管理.sql语法详解 —— NiceCui 某个数据库所有的权限 ALL 后面+ PRIVILEGES SQL 某个数据库 特定的权限SQL mysql 授权语法 SQL ...
- mysql CREATE TABLE语句 语法
mysql CREATE TABLE语句 语法 作用:创建数据库中的表. 大理石量具系列 语法:CREATE TABLE 表名称 (列名称1 数据类型,列名称2 数据类型,列名称3 数据类型,.... ...
随机推荐
- spring boot jpa-java.lang.IllegalArgumentException: Not a managed type异常问题解决方法
JPA实体类没有被扫描到,导致这样的情况有以下几种可能: 实体类没有加上@Entity注解 对应解决方法在实体类上加上@Entity即可解决问题 没有按照SpringBoot的约定,默认扫描(appl ...
- Git 命令行使用
一.git简介: Linux创建了Linux,但是Linux的发展壮大是由世界各地的热心志愿者参与编写的?那么那么多份的代码是怎么合并的呢?之前是在2002年以前,世界各地的志愿者把源代码文件通过di ...
- RISC-V riscv64-unknown-elf
riscv64-unknown-elf 为 RISC-V指令集的交叉编译工具 以下环境在Liunx ubuntu x86_64 环境下进行,下面示例以生成32位文件为目标来操作使用. screen / ...
- Centos 6 can't found command subscription-manager
[root@localhost ~]# subscription-manager: command not found-bash: -bash:: command not found resoluti ...
- jvm方法栈
调用栈 先入后出 栈是一个只有一个口的容器,先进入栈的会落到栈底,出栈的时候最后出.最后进入栈的,在栈顶,出栈时先出. 方法调用时,需要在内存中开辟一块存储空间做为线程栈空间 每个线程都由自己的栈 调 ...
- kotlin 委托类的初始化函数
import java.beans.AppletInitializer import kotlin.reflect.KProperty fun main(arg: Array<String> ...
- JDBC的工具类
A: 抽取两个方法,一个获取Connection对象,一个是释放资源 import java.io.FileReader; import java.sql.Connection; import jav ...
- 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_07-vuejs研究-vuejs基础-v-bind指令
4.v-bind v-bind:无法双向绑定’ 1.作用: v‐bind可以将数据对象绑定在dom的任意属性中. v‐bind可以给dom对象绑定一个或多个特性,例如动态绑定style和class 2 ...
- uni-app 时间格式问题 new Date(str) IOS系统跟Android系统不兼容
今天做了一个需求,要在列表中把后台返回来的时间给显示出来,使用 new Date(str) 在微信开发者工具上显示是没有问题的,然后在IOS系统上显示是NAN. 原因是 IOS系统只识别 " ...
- Nginx使用默认配置启动异常处理
Ps1:错误问题:nginx: [error] OpenEvent("Global\ngx_reload_5988") failed (2: The system cannot f ...