[TOC]
## 复制数据表
>[info] ####<span style="color:forestgreen">复制数据表包括二部分信息:表结构和表中的记录</span>
### 一、复制表结构
#### 表结构字段属性包括
| 字段属性 | 说明 |
| --- | --- |
| 基本信息 | 字段名、类型、默认值、有无符号 |
| 约束条件 | 自增、主键、索引、为空、唯一、补零 |
#### 1、复制表结构的基本信息
#### 语法:
~~~
CREATE TABLE 目标表 AS SELECT * FROM 源表名 WHERE 恒假条件;
~~~
>[info] CREATE TABLE ...AS SELECT ....WHERE ....本是数据表复制语句,这里将条件设置为恒假,可以确保,只有表结构的基本信息复制到目标表中,而记录不会被复制。
#### 实例:复制tp5_staff表的基本信息到tp5_temp1 表中
#### 语句如下:
~~~
#创建tp5_temp1表,基本信息来自 tp5_staff 表
CREATE TABLE tp5_temp1 AS SELECT * FROM `TP5_STAFF` WHERE 1 > 2;
#查看tp5_staff表结构信息
DESC `tp5_staff`;
#查看tp5_temp1表结构信息
DESC tp5_temp1;
~~~
#### 运行结果:
![](https://box.kancloud.cn/f6f397ef68017cd5113b0a202c107b94_1106x879.png)
>[info] 从运行截图看出,源表中的约束条件,如主键、自增、索引等约束条并没有复制到目标表中。
#### 如果想得到一个与源表结构完全一致的新表,请看下一个语句。
* * * * *
### 2、复制表结构的完整信息
>[info] 表结构的完整信息包括基本信息和约束条件
#### 语法:
~~~
CREATE TABLE 目标表 LIKE 源表 ;
~~~
>[info] 关键字:LIKE 本意就是像什么一样,诠释了这个语句的意思
#### 实例:从tp5_staff中复制完整结构信息到tp5_temp2表中(基本信息+约束条件)
#### 语句:
~~~
#创建tp5_temp2表, 全部结构信息来自 tp5_staff 表
CREATE TABLE tp5_temp2 LIKE tp5_staff;
#查看tp5_staff表结构信息
DESC `tp5_staff`;
#查看tp5_temp1表结构信息
DESC tp5_temp1;
~~~
#### 运行结果:
![](https://box.kancloud.cn/a11ad15e049673e99bd11c53d18b960a_1106x879.png)
* * * * *
### 3、创建数据表时,导入已存在数据表记录
>[info]1、创建数据表时,数据可以来自一张已经存在的数据表。
2、这也我们在上面的一个案例几乎一致。上例中我们只复制了源表的基本信息,现在我们除要复制表结构基本信息,还要把源表的全部数据复制过来
3、当然,也可以加入过滤条件,只复制部分信息。
#### 语法:
~~~
CREATE TABLE 目标表 AS SELECT * FROM 源表名 [ WHERE 条件];
~~~
>[success] CREATE TABLE ...AS SELECT ....WHERE ....可以将源表中符合条件的记录复制到目标表中,如果目标表不存在,自动创建。
#### 实例:创建tp5_temp3表,数据全部来自tp5_staff表
#### 语句:
~~~
#创建tp5_temp3表,数据全部自源于 tp5_staff 子查询
CREATE TABLE tp5_temp3 AS SELECT * FROM `tp5_staff` ;
#查询 tp5_staff 表
SELECT * FROM `tp5_staff`;
#查询 tp5_staff 表
SELECT * FROM tp5_temp3;
~~~
#### 运行效果:
![](https://box.kancloud.cn/ea5dd4a59dae2bf4d99b61b2399c01e4_1106x879.png)
### 特别提示:
>[warning] 此操作仅复制了<span style="color:red">表的基本信息和全部记录</span>,适合用于当前表的备份。如果要复制一张与源张完全一致的数据表,请用下面的方法。
* * * * *
### 4、创建与源数据表完全一样的新表
#### 实例:复制tp5_staff全部数据,包括完整结构信息到新表tp5_temp4中。
#### 思路分析:
>[info] 有了上面的复制数据表的经验,我们不难总结出:如果要获得二张完全一样的表,可以分二步表:1、获取完整表结构信息;2、导入源表中全部数据。有了这个思路,下面的操作就非常容易理解了。
#### 创建步骤:
1. 获取与源数据表完全一样的结构属性,包括基本信息和约束条件(LIKE);
2. 将源数据表全部记录插入到目标数据表(INSERT)
#### 语法:
~~~
#获取源表全部属性
CREATE TABLE 目标表 LIKE 源表 ;
#将源表全部数据插入到目标表中
INSERT 目标表 SELECT * FROM 源表
~~~
#### 代码如下:
~~~
# 获取源表完整结构信息
CREATE TABLE tp5_temp4 LIKE tp5_staff ;
#将源表tp5_staff中全部记录插入到目标表tp5_temp4中
INSERT tp5_temp4 SELECT * FROM tp5_staff;
#查看源表tp5_staff表结构
DESC tp5_staff ;
#查目标表tp5_temp表结构
DESC tp5_temp4 ;
~~~
#### 运行效果如下:
![](https://box.kancloud.cn/8865dcbd08b300ee034c709645f752dc_1184x877.png)
#### 下面再检查一下源表中的记录是否全部插入成功?
~~~
#查看源表
SELECT * FROM tp5_staff;
#查看目标表
SELECT * FROM tp5_temp4;
~~~
#### 查询结果如下:
![](https://box.kancloud.cn/fb55edeb92a80824c6df1f25ad03e0f9_1156x849.png)
##### 可以看出,二张表完全一样,以后可以直接操作复制表,这样可以起到保护原始数据表的作用!
##### <span style="color:red">提示:</span>如何仅插入部分记录,只需要设置WHERE条件即可,非常简单,这里不再演示!
>[danger] 该功能非常实用,请同学们,一定要熟悉掌握!
- 前言[随时更新]
- ThinkPHP 5数据库重构
- 开发环境
- 1.ThinkPHP5开发环境(Mac版)
- 2.ThinkPHP5开发环境(Win版)
- MySQL快速复习
- 1.数据库操作
- 2.数据表操作
- 1.创建数据表 (重点)
- 2.添加数据表记录
- 3.查询数据表(重点)
- 4.更新数据表
- 5.编辑数据表结构(重点)
- 6_复制数据表
- 7.删除数据和表
- 连接数据库
- 1.数据库配置文件database.php
- 2.Db类静态方法connect()
- 3.模块中的配置文件config.php
- MySQL原生查询
- 1.读操作query
- 2.写操作execute
- 选择数据表
- 1.table与setTable方法
- 2.name方法
- 3.db助手函数
- 4.alias方法
- 结果集查询
- 1.find方法
- 2.select方法
- 3.fetchSql方法
- 4.value方法
- 5.column方法
- 6.field方法
- 新增数据
- 1.insert_单条添加
- 2.insertAll_批量添加
- 3_db_助手函数添加
- 更新数据
- 1.update方法
- 2.setField更新字段
- 3_自增自减与延时更新
- 删除数据
- 1.delete方法
- 查询方法
- 1.getTableInfo方法
- 2.where方法
- 3.whereOr方法
- 4.混合查询(闭包实现)
- 表达式查询
- 1.表达式查询(重点)
- 2.exp通用查询
- 分组查询
- 1.group方法
- 2.having方法
- 排序分页查询
- 1.order方法
- 2.limit方法
- 3.page方法
- 聚合查询
- 时间查询
- 1.where方法
- 2.whereTime方法
- 高级查询
- 1.快捷查询
- 2.区间查询
- 3.批量查询
- 4.Query对象查询
- 5.混合查询
- 视图查询
- view方法
- 子查询
- 1.select方法
- 2.fetchSql方法
- 3.buildSql方法
- 4.闭包子查询
- 总结/参考
- 1.方法参数类型总结
- 2.查询/子查询/连接查询