[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;
~~~
#### 運行結果:

>[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;
~~~
#### 運行結果:

* * * * *
### 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;
~~~
#### 運行效果:

### 特別提示:
>[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 ;
~~~
#### 運行效果如下:

#### 下面再檢查一下源表中的記錄是否全部插入成功?
~~~
#查看源表
SELECT * FROM tp5_staff;
#查看目標表
SELECT * FROM tp5_temp4;
~~~
#### 查詢結果如下:

##### 可以看出,二張表完全一樣,以后可以直接操作復制表,這樣可以起到保護原始數據表的作用!
##### <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.查詢/子查詢/連接查詢