MySQL複製表資料

2019-10-16 22:56:50

在本教學中,您將學習如何使用CREATE TABLESELECT語句在同一資料庫或從一個資料庫複製表。

MySQL將表複製到新表

將資料從現有表複製到新的資料,在某些情況下非常有用,例如備份資料和複製生產資料進行測試。

要將資料從表複製到新表,請使用CREATE TABLESELECT語句,如下所示:

CREATE TABLE new_table 
SELECT col, col2, col3 
FROM
    existing_table;

首先,MySQL使用CREATE TABLE語句中指定的名稱建立一個新錶。新表的結構由SELECT語句的結果集定義。 然後,MySQL將來自SELECT語句的資料填充到新表中。

要將部分資料從現有表複製到新表中,請在SELECT語句中使用WHERE子句,如下所示:

CREATE TABLE new_table 
SELECT col1, col2, col3 
FROM
    existing_table
WHERE
    conditions;

在建立之前,檢查您要建立的表是否已存在是非常重要的。 為此,您可以在CREATE TABLE語句中使用IF NOT EXIST子句。 將資料從現有表複製到新的表的完整命令如下:

CREATE TABLE new_table 
SELECT col1, col2, col3 
FROM
    existing_table
WHERE
    conditions;

請注意,上面的宣告只是複製表及其資料。它不會複製與表關聯的其他資料庫物件,如索引主鍵約束外來鍵約束觸發器等。

要從表中複製資料以及表的所有依賴物件,請使用以下語句:

CREATE TABLE IF NOT EXISTS new_table LIKE existing_table;

INSERT new_table
SELECT * FROM existing_table;

上面查詢中,需要執行兩個語句。第一個語句通過複製existing_table表來建立一個新表new_table。 第二個語句將現有existing_table表中的資料插入new_table中。

MySQL拷貝表範例

以下語句將資料從office表複製到範例資料(yiibaidb)庫中指定名為offices_bk的新表。

USE yiibaidb;
CREATE TABLE IF NOT EXISTS offices_bk 
SELECT * FROM
    offices;

可以通過查詢office_bk表中的資料來驗證副本,如下所示:

SELECT
    *
FROM
    offices_bk;

執行上面查詢,得到以下結果 -

+------------+---------------+------------------+--------------------------+--------------+-------+-----------+------------+-----------+
| officeCode | city          | phone            | addressLine1             | addressLine2 | state | country   | postalCode | territory |
+------------+---------------+------------------+--------------------------+--------------+-------+-----------+------------+-----------+
| 1          | San Francisco | +1 650 219 4782  | 100 Market Street        | Suite 300    | CA    | USA       | 94080      | NA        |
| 2          | Boston        | +1 215 837 0825  | 1550 Court Place         | Suite 102    | MA    | USA       | 02107      | NA        |
| 3          | NYC           | +1 212 555 3000  | 523 East 53rd Street     | apt. 5A      | NY    | USA       | 10022      | NA        |
| 4          | Paris         | +33 14 723 4404  | 43 Rue Jouffroy Dabbans | NULL         | NULL  | France    | 75017      | EMEA      |
| 5          | Beijing       | +86 33 224 5000  | 4-1 Haidian Area         | NULL         | BJ    | China     | 110000     | NA        |
| 6          | Sydney        | +61 2 9264 2451  | 5-11 Wentworth Avenue    | Floor #2     | NULL  | Australia | NSW 2010   | APAC      |
| 7          | London        | +44 20 7877 2041 | 25 Old Broad Street      | Level 7      | NULL  | UK        | EC2N 1HN   | EMEA      |
+------------+---------------+------------------+--------------------------+--------------+-------+-----------+------------+-----------+
7 rows in set

如果我們想僅複製在美國(USA)辦公室,可以將WHERE子句新增到SELECT語句中,如下所示:

USE yiibaidb;
CREATE TABLE IF NOT EXISTS offices_usa 
SELECT * 
FROM
    offices
WHERE
    country = 'USA';

驗證上面查詢執行,得到以下結果 -

SELECT * 
FROM
    offices
WHERE
    country = 'USA';
+------------+---------------+-----------------+----------------------+--------------+-------+---------+------------+-----------+
| officeCode | city          | phone           | addressLine1         | addressLine2 | state | country | postalCode | territory |
+------------+---------------+-----------------+----------------------+--------------+-------+---------+------------+-----------+
| 1          | San Francisco | +1 650 219 4782 | 100 Market Street    | Suite 300    | CA    | USA     | 94080      | NA        |
| 2          | Boston        | +1 215 837 0825 | 1550 Court Place     | Suite 102    | MA    | USA     | 02107      | NA        |
| 3          | NYC           | +1 212 555 3000 | 523 East 53rd Street | apt. 5A      | NY    | USA     | 10022      | NA        |
+------------+---------------+-----------------+----------------------+--------------+-------+---------+------------+-----------+
3 rows in set

假設不僅要複製資料,還要複製與offices表相關聯的所有資料庫物件,我們使用以下語句:

CREATE TABLE offices_dup LIKE offices;

INSERT office_dup
SELECT * FROM offices;

MySQL複製表到另一個資料庫

有時,您要將表複製到其他資料庫。 在這種情況下,可使用以下語句:

CREATE TABLE destination_db.new_table 
LIKE source_db.existing_table;

INSERT destination_db.new_table 
SELECT *
FROM source_db.existing_table;

第一個語句通過從源資料庫(source_db)複製現有表(existing_table)到目標資料庫(destination_db)中建立一個新表new_table

第二個語句將資料從源資料庫中的現有(existing_table)表複製到目標資料庫中的新表。

下面來看看看下面的例子。

首先,我們使用以下語句建立一個名為testdb的資料庫:

CREATE DATABASE IF NOT EXISTS testdb;

其次,通過將其結構從範例資料庫(yiibaidb)中的offices表複製出來,在testdb中建立了offices表。

CREATE TABLE testdb.offices LIKE yiibaidb.offices;

第三,我們將資料從yiibaidb.offices表複製到testdb.offices表中。

INSERT testdb.offices
SELECT *
FROM yiibaidb.offices;

我們來驗證testdb.offices表中的資料。

SELECT
    *
FROM
    testdb.offices;

執行上面查詢語句,得到以下結果 -

mysql> SELECT
    *
FROM
    testdb.offices;
+------------+---------------+------------------+--------------------------+--------------+-------+-----------+------------+-----------+
| officeCode | city          | phone            | addressLine1             | addressLine2 | state | country   | postalCode | territory |
+------------+---------------+------------------+--------------------------+--------------+-------+-----------+------------+-----------+
| 1          | San Francisco | +1 650 219 4782  | 100 Market Street        | Suite 300    | CA    | USA       | 94080      | NA        |
| 2          | Boston        | +1 215 837 0825  | 1550 Court Place         | Suite 102    | MA    | USA       | 02107      | NA        |
| 3          | NYC           | +1 212 555 3000  | 523 East 53rd Street     | apt. 5A      | NY    | USA       | 10022      | NA        |
| 4          | Paris         | +33 14 723 4404  | 43 Rue Jouffroy Dabbans | NULL         | NULL  | France    | 75017      | EMEA      |
| 5          | Beijing       | +86 33 224 5000  | 4-1 Haidian Area         | NULL         | BJ    | China     | 110000     | NA        |
| 6          | Sydney        | +61 2 9264 2451  | 5-11 Wentworth Avenue    | Floor #2     | NULL  | Australia | NSW 2010   | APAC      |
| 7          | London        | +44 20 7877 2041 | 25 Old Broad Street      | Level 7      | NULL  | UK        | EC2N 1HN   | EMEA      |
+------------+---------------+------------------+--------------------------+--------------+-------+-----------+------------+-----------+
7 rows in set

在本教學中,我們向您展示了將資料庫中的表和從一個資料庫複製到另一個資料庫的各種技術。