在MYSQL中快速创建空表

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:
今天有人问我用什么方法可以创建空表?
在MYSQL中有两种方法。
1、create table select ...
2、create table like ...
第一种很多人都知道,第二种却很少人用。
第一种有个缺点 :
取消掉原来表的有些定义。

手册上是这么讲的:
Some conversion of data types might occur. For example, the AUTO_INCREMENT attribute is not preserved, and VARCHAR columns can become CHAR columns. 
不过我测试过,只会取消自增属性! (可能是版本不同吧。其他版本没有测试过!)



第二种就不会。
我们来看看例子:
mysql> create table t_old (id serial, content varchar(8000) not null,`desc` varchar(100) not null) engine innodb;
Query OK, 0 rows affected (0.01 sec)

mysql> show create table t_old;
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                 |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t_old | CREATE TABLE `t_old` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `content` varchar(8000) NOT NULL,
  `desc` varchar(100) NOT NULL,
  UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 | 
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> create table t_select select * from t_old where 1 = 0;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

PS:如果想要保持一样的引擎,就加上。
这样写:create table t_select engine innodb select * from t_old where 1 = 0;
mysql> show create table t_select;
+----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table    | Create Table                                                                                                                                                                       |
+----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t_select | CREATE TABLE `t_select` (
  `id` bigint(20) unsigned NOT NULL DEFAULT '0',
  `content` varchar(8000) NOT NULL,
  `desc` varchar(100) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 | 
+----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> create table t_like like t_old;
Query OK, 0 rows affected (0.02 sec)

mysql> show create table t_like;
+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table  | Create Table                                                                                                                                                                                                  |
+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t_like | CREATE TABLE `t_like` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `content` varchar(8000) NOT NULL,
  `desc` varchar(100) NOT NULL,
  UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 | 
+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

1 row in set (0.00 sec)






本文转自 david_yeung 51CTO博客,原文链接:http://blog.51cto.com/yueliangdao0608/81264,如需转载请自行联系原作者

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
数据可视化 安全 关系型数据库
从零开始安装MySQL数据库,并使用可视化DBevaer创建数据 | 开始搞全栈(一)
从零开始安装MySQL数据库,并使用可视化DBevaer创建数据 | 开始搞全栈(一)
279 0
从零开始安装MySQL数据库,并使用可视化DBevaer创建数据 | 开始搞全栈(一)
|
关系型数据库 MySQL Linux
Docker | Compose创建mysql容器
Docker | Compose创建mysql容器
221 0
Docker | Compose创建mysql容器
|
SQL 机器学习/深度学习 关系型数据库
《MySQL高级篇》六、索引的创建与设计原则(四)
《MySQL高级篇》六、索引的创建与设计原则
《MySQL高级篇》六、索引的创建与设计原则(四)
|
存储 关系型数据库 MySQL
《MySQL高级篇》六、索引的创建与设计原则(三)
《MySQL高级篇》六、索引的创建与设计原则
《MySQL高级篇》六、索引的创建与设计原则(三)
|
SQL 关系型数据库 MySQL
《MySQL高级篇》六、索引的创建与设计原则(二)
《MySQL高级篇》六、索引的创建与设计原则
《MySQL高级篇》六、索引的创建与设计原则(二)
|
SQL 存储 关系型数据库
《MySQL高级篇》六、索引的创建与设计原则(一)
《MySQL高级篇》六、索引的创建与设计原则
《MySQL高级篇》六、索引的创建与设计原则(一)
|
关系型数据库 MySQL 数据库
mysql:添加时间列自动更新时间(用于记录创建时间和修改时间)
mysql:添加时间列自动更新时间(用于记录创建时间和修改时间)
1080 0
mysql:添加时间列自动更新时间(用于记录创建时间和修改时间)
|
关系型数据库 MySQL Java
基于window10使用docker-composer创建mysql数据库和tomcat环境
基于window10使用docker-composer创建mysql数据库和tomcat环境
208 0
基于window10使用docker-composer创建mysql数据库和tomcat环境
|
SQL 存储 数据可视化
删库跑路?不可回滚?MySQL创建和管理表,修改清空表,MySQL8新特性DDL原子化,完整详细可收藏
删库跑路?不可回滚?MySQL创建和管理表,修改清空表,MySQL8新特性DDL原子化,完整详细可收藏
321 0
删库跑路?不可回滚?MySQL创建和管理表,修改清空表,MySQL8新特性DDL原子化,完整详细可收藏
|
存储 SQL Cloud Native
基于 PolarDB for MySQL 实现并行创建索引赛题解析 | 学习笔记
快速学习基于 PolarDB for MySQL 实现并行创建索引赛题解析
基于 PolarDB for MySQL 实现并行创建索引赛题解析 | 学习笔记