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 数据类型,.... ...
随机推荐
- YouTube 网站的架构演进——阅读心得
基础平台 Apache Python Linux(SuSe) MySQL psyco,一个动态的Python到C的编译器 lighttpd代替Apache做视频播放 状态 支持每天超过5亿的视频点击量 ...
- arcpy 获得是否为布局mxd.activeView
arcpy 获得是否为布局mxd.activeView print mxd.activeView PAGE_LAYOUT mxd.pageSizePageSize(width=21.590043180 ...
- kotlin 代码格式
与java 不同,代码顺序影响编译过程. { var a:Int = 1; init(){ a++; } //var a:Int = 1; 写在 init 之后不可用. }
- mysql安装到启动遇见的问题
一.有时候安装mysql后使用mysql命令时报错 Can't connect to MySQL server on localhost (10061),或者用net start mysql 时报服务 ...
- springboot 整合缓存(Ehcache或者reids)
这里介绍Spring Boot结合JPA,MySQL和Ehcache实现缓存功能,提高程序访问效率. 一.Maven依赖 <!-- caching --> <dependency&g ...
- PCA人脸识别学习笔记---原理篇
前言 在PCA人脸识别中我们把一个人脸图片看做一个特征向量,PCA做的事情就是:找到这样一组基向量来表示已有的数据点,不仅仅是将高维度数据变成低维度数据,更能够找到最关键信息. 假设已有数据{xi} ...
- vue 调用微信支付方法
pay(){ let data ={ order_id:this.order_id, wechatpay_type:this.wechatpay_type, merchant_id:localStor ...
- HDFS数据定期清理
HDFS数据清理一些办法: datanode数据做reblance清理临时目录.日志目录文件全量分区表历史分区清理使用lzo,orc格式进行数据压缩清理或者归档历史冷数据增加datanode横向扩容附 ...
- JDBC获得DB2表结构并且将表中数据脱敏后转移的程序示例
完整项目地址:https://github.com/zifeiy/totomi 代码示例: import java.io.File; import java.io.FileInputStream; i ...
- opengl读取灰度图生成三维地形
准备第三方库 glew.freeglut.glm.opencv 准备灰度图片和草地贴图 最终效果 代码包括主程序源文件mainApp.cpp.顶点着色器shader.vs.片元着色器shader.fs ...