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 数据类型,.... ...
随机推荐
- ubuntu上面Parity 安装
sudo wget https://raw.githubusercontent.com/paritytech/parity/master/scripts/parity.service -O /et ...
- 性能调优 | 如何通过性能调优突破 MySQL 数据库性能瓶颈?
本文出自头条号老王谈运维,转载请说明出处. MySQL 数据库瓶颈对 DBA 程序员而言,是非常棘手的问题.要正确的优化SQL,我们需要快速定位能性的瓶颈点,也就是说快速找到我们SQL主要的开销在哪里 ...
- 使用.NET Framework开发IIS 7.0模块和处理程序拦截请求实现跳转
扩展IIS的两种方法:模块与处理程序. 模块,类似于以前的IIS版本中的ISAPI筛选器,它参与每个请求处理.IIS中一些现成的模块包括身份验证模块(用于处理请求的身份验证状态),压缩模块(用于压缩返 ...
- SQL-W3School-高级:SQL 数据类型
ylbtech-SQL-W3School-高级:SQL 数据类型 1.返回顶部 1. Microsoft Access.MySQL 以及 SQL Server 所使用的数据类型和范围. Microso ...
- HTM概述
Html: Hyper Text Markup Language 超文本标记语言 超文本: 超出纯文本的范畴 标记语言: 标记其实就是标签 标签的格式: <标签名称>
- numpy中flatten学习笔记
ndarray.flatten() 用法 用于返回一个折叠成一维的数组.该函数只能适用于numpy对象,即array或者mat,普通的list列表是不行的. 例子 # coding=utf-8 fro ...
- CentOS源码安装 Tomcat/8.0.24
依个人的习惯,喜欢将源码安装在/usr/local这个目录下面: 第一步:下载源码 wget http://archive.apache.org/dist/tomcat/tomcat-8/v8.0.2 ...
- windows是下安装nvmw
nvmw:Windows环境下的node多版本管理工具. 安装: 1. git clone https://github.com/hakobera/nvmw.git 2.修改环境变量 计算机 -&g ...
- 基于c开发的全命令行音频播放器
cmus是一个内置了音频播放器的强大的音乐文件管理器.用它的基于ncurses的命令行界面,你可以浏览你的音乐库,并从播放列表或队列中播放音乐,这一切都是在命令行下. Linux上安装cmus 首先, ...
- Telegram Groups vs Telegram Channels
Telegram Groups vs Telegram Channels By Iaroslav Kudritskiy Unlike other messaging apps, using Tele ...