
- MySQL 基礎
- MySQL - 首頁
- MySQL - 簡介
- MySQL - 功能
- MySQL - 版本
- MySQL - 變數
- MySQL - 安裝
- MySQL - 管理
- MySQL - PHP 語法
- MySQL - Node.js 語法
- MySQL - Java 語法
- MySQL - Python 語法
- MySQL - 連線
- MySQL - Workbench
- MySQL 資料庫
- MySQL - 建立資料庫
- MySQL - 刪除資料庫
- MySQL - 選擇資料庫
- MySQL - 顯示資料庫
- MySQL - 複製資料庫
- MySQL - 資料庫匯出
- MySQL - 資料庫匯入
- MySQL - 資料庫資訊
- MySQL 使用者
- MySQL - 建立使用者
- MySQL - 刪除使用者
- MySQL - 顯示使用者
- MySQL - 修改密碼
- MySQL - 授予許可權
- MySQL - 顯示許可權
- MySQL - 收回許可權
- MySQL - 鎖定使用者賬戶
- MySQL - 解鎖使用者賬戶
- MySQL 表
- MySQL - 建立表
- MySQL - 顯示錶
- MySQL - 修改表
- MySQL - 重命名錶
- MySQL - 克隆表
- MySQL - 截斷表
- MySQL - 臨時表
- MySQL - 修復表
- MySQL - 描述表
- MySQL - 新增/刪除列
- MySQL - 顯示列
- MySQL - 重新命名列
- MySQL - 表鎖定
- MySQL - 刪除表
- MySQL - 派生表
- MySQL 查詢
- MySQL - 查詢
- MySQL - 約束
- MySQL - INSERT 查詢
- MySQL - SELECT 查詢
- MySQL - UPDATE 查詢
- MySQL - DELETE 查詢
- MySQL - REPLACE 查詢
- MySQL - INSERT IGNORE
- MySQL - INSERT ON DUPLICATE KEY UPDATE
- MySQL - INSERT INTO SELECT
- MySQL 運算子和子句
- MySQL - WHERE 子句
- MySQL - LIMIT 子句
- MySQL - DISTINCT 子句
- MySQL - ORDER BY 子句
- MySQL - GROUP BY 子句
- MySQL - HAVING 子句
- MySQL - AND 運算子
- MySQL - OR 運算子
- MySQL - LIKE 運算子
- MySQL - IN 運算子
- MySQL - ANY 運算子
- MySQL - EXISTS 運算子
- MySQL - NOT 運算子
- MySQL - NOT EQUAL 運算子
- MySQL - IS NULL 運算子
- MySQL - IS NOT NULL 運算子
- MySQL - BETWEEN 運算子
- MySQL - UNION 運算子
- MySQL - UNION vs UNION ALL
- MySQL - MINUS 運算子
- MySQL - INTERSECT 運算子
- MySQL - INTERVAL 運算子
- MySQL 連線
- MySQL - 使用連線
- MySQL - INNER JOIN
- MySQL - LEFT JOIN
- MySQL - RIGHT JOIN
- MySQL - CROSS JOIN
- MySQL - FULL JOIN
- MySQL - 自連線
- MySQL - DELETE JOIN
- MySQL - UPDATE JOIN
- MySQL - UNION vs JOIN
- MySQL 觸發器
- MySQL - 觸發器
- MySQL - 建立觸發器
- MySQL - 顯示觸發器
- MySQL - 刪除觸發器
- MySQL - BEFORE INSERT 觸發器
- MySQL - AFTER INSERT 觸發器
- MySQL - BEFORE UPDATE 觸發器
- MySQL - AFTER UPDATE 觸發器
- MySQL - BEFORE DELETE 觸發器
- MySQL - AFTER DELETE 觸發器
- MySQL 資料型別
- MySQL - 資料型別
- MySQL - VARCHAR
- MySQL - BOOLEAN
- MySQL - ENUM
- MySQL - DECIMAL
- MySQL - INT
- MySQL - FLOAT
- MySQL - BIT
- MySQL - TINYINT
- MySQL - BLOB
- MySQL - SET
- MySQL 正則表示式
- MySQL - 正則表示式
- MySQL - RLIKE 運算子
- MySQL - NOT LIKE 運算子
- MySQL - NOT REGEXP 運算子
- MySQL - regexp_instr() 函式
- MySQL - regexp_like() 函式
- MySQL - regexp_replace() 函式
- MySQL - regexp_substr() 函式
- MySQL 函式 & 運算子
- MySQL - 日期和時間函式
- MySQL - 算術運算子
- MySQL - 數值函式
- MySQL - 字串函式
- MySQL - 聚合函式
- MySQL 其他概念
- MySQL - NULL 值
- MySQL - 事務
- MySQL - 使用序列
- MySQL - 處理重複項
- MySQL - SQL 注入
- MySQL - 子查詢
- MySQL - 註釋
- MySQL - 檢查約束
- MySQL - 儲存引擎
- MySQL - 將表匯出到 CSV 檔案
- MySQL - 將 CSV 檔案匯入資料庫
- MySQL - UUID
- MySQL - 公共表表達式
- MySQL - ON DELETE CASCADE
- MySQL - Upsert
- MySQL - 水平分割槽
- MySQL - 垂直分割槽
- MySQL - 遊標
- MySQL - 儲存函式
- MySQL - SIGNAL
- MySQL - RESIGNAL
- MySQL - 字元集
- MySQL - 排序規則
- MySQL - 萬用字元
- MySQL - 別名
- MySQL - ROLLUP
- MySQL - 今日日期
- MySQL - 字面量
- MySQL - 儲存過程
- MySQL - EXPLAIN
- MySQL - JSON
- MySQL - 標準差
- MySQL - 查詢重複記錄
- MySQL - 刪除重複記錄
- MySQL - 選擇隨機記錄
- MySQL - SHOW PROCESSLIST
- MySQL - 更改列型別
- MySQL - 重置自動遞增
- MySQL - COALESCE() 函式
- MySQL 有用資源
- MySQL - 有用函式
- MySQL - 語句參考
- MySQL - 快速指南
- MySQL - 有用資源
- MySQL - 討論
MySQL - 複製資料庫
在現代,公司依靠資料庫來儲存關鍵資訊,例如金融交易、客戶資料和員工記錄。定期維護資料庫副本非常重要,因為電源浪湧和磁碟崩潰始終可能導致資料丟失。因此,定期備份資料庫對於有效的資料管理至關重要。
在 MySQL 中複製資料庫
在 MySQL 中,複製資料庫包括建立一個現有資料庫的精確副本,包括其架構和資料。這幾乎類似於擁有資料庫的備份。如有必要,務必確保複製後對原始資料庫所做的任何更改也反映在複製的資料庫中。
要建立資料庫副本,SQL Server 提供了 **複製資料庫** 語句。但是,MySQL 中沒有此語句。因此,要建立資料庫副本,我們需要手動將一個數據庫的內容轉儲到另一個數據庫。
複製資料庫涉及以下三個步驟:
首先,我們需要建立一個新資料庫。
然後,我們需要使用 **mysqldump** 匯出原始資料庫。
最後,將匯出的資料匯入新資料庫。
示例
首先,讓我們使用以下查詢在 MySQL 伺服器中建立一個數據庫:
CREATE DATABASE testdb;
我們可以使用 **SHOW DATABASES** 語句驗證資料庫 **testdb** 是否已建立。
SHOW DATABASES;
如下所示,testdb 資料庫已成功建立。
資料庫 |
---|
information_schema |
mysql |
performance_schema |
testdb |
資料庫成功建立後,我們需要使用 USE 語句將當前資料庫更改為 **'testdb'**,以便我們執行的任何操作(例如建立表)都將儲存在此資料庫中。
USE testdb;
現在,讓我們使用 CREATE 查詢建立一個名為 **CUSTOMERS** 的表,如下所示:
CREATE TABLE CUSTOMERS ( ID INT AUTO_INCREMENT, NAME VARCHAR(20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2), PRIMARY KEY (ID) );
以下查詢將 7 條記錄插入到上面建立的表中:
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ), (2, 'Khilan', 25, 'Delhi', 1500.00 ), (3, 'Kaushik', 23, 'Kota', 2000.00 ), (4, 'Chaitali', 25, 'Mumbai', 6500.00 ), (5, 'Hardik', 27, 'Bhopal', 8500.00 ), (6, 'Komal', 22, 'Hyderabad', 4500.00 ), (7, 'Muffy', 24, 'Indore', 10000.00 );
使用以下查詢,我們可以驗證表 CUSTOMERS 是否已在 'testdb' 資料庫中建立:
SHOW TABLES;
表已成功在 testdb 資料庫中建立。
Tables_in_testdb |
---|
customers |
建立資料庫副本(手動)
如前所述,在 MySQL 中,要建立現有資料庫的副本,我們需要建立一個單獨的資料庫,並將一個數據庫的內容手動轉儲到新建立的資料庫。
以下語句建立一個名為 **testdb_copy** 的資料庫(我們需要將上面建立的 **testdb** 資料庫的內容複製到此資料庫)。
CREATE DATABASE testdb_copy;
一旦我們的源 (testdb) 和目標 (testdb_copy) 資料庫準備就緒,我們需要按照以下步驟手動將資料從一個數據庫複製到另一個數據庫。
**步驟 1** - 開啟 **命令提示符**,瀏覽到 MySQL 伺服器的 bin 資料夾。例如,我們將 MySQL 安裝在 **C:\Program Files** 目錄中,因此以下命令將帶我們到 **bin** 資料夾:
C:\> CD C:\Program Files\MySQL\MySQL Server 8.0\bin
**步驟 2** - 使用 **mysqldump** 工具,我們可以將資料庫物件和資料複製到 **.sql** 檔案中。在這裡,我們將 testdb 資料庫的內容匯出到名為 **"testdb.sql"** 的檔案,該檔案位於“D:\Database_backup”。
**注意** - (>) 運算子用於將資料庫從一個位置匯出到另一個位置。
mysqldump -u root -p testdb > D:\database_backup\testdb.sql
步驟 3 − 將“testdb.sql”檔案的內容匯入目標資料庫(在本例中為“testdb_copy”)。
注意 − (<) 運算子用於將資料庫從一個位置匯入到另一個位置。
mysql -u root -p testdb_copy < D:\database_backup\testdb.sql
驗證
要驗證資料和資料庫物件是否已匯入到 testdb_copy 資料庫中,首先,我們需要使用以下查詢在MySQL 命令列客戶端中使用當前資料庫 −
USE testdb_copy;
如果testdb 的內容已成功複製到testdb_copy中,我們應該能夠在表列表中找到客戶表(該表是先前建立的)。
因此,讓我們使用以下查詢驗證“testdb”資料庫中的資料是否已複製到“testdb_copy”資料庫中 −
SHOW TABLES;
如下所示,所有資料庫物件和資料都已成功複製。
Tables_in_testdb |
---|
customers |
無需 mysqldump 複製資料庫
如果我們想在不使用 mysqldump 工具的情況下複製資料庫,我們必須手動在目標資料庫中建立每個表,並將當前資料庫中存在的表中的所有資料複製到目標資料庫中。這是一個重複的過程,需要對每個需要複製的表進行。
示例
讓我們使用以下查詢在 MySQL 伺服器中建立一個新資料庫 −
CREATE DATABASE Tutorials;
我們可以使用以下查詢驗證是否建立了資料庫Tutorials −
SHOW DATABASES;
如下所示,'Tutorials' 資料庫已成功建立。
資料庫 |
---|
information_schema |
mysql |
performance_schema |
tutorials |
現在,我們將當前資料庫切換到Tutorials,以便我們執行的任何操作(例如建立表)都將儲存在此資料庫中。
USE Tutorials;
切換後,使用以下查詢建立一個名為CUSTOMERS的表 −
CREATE TABLE CUSTOMERS ( ID INT AUTO_INCREMENT, NAME VARCHAR(20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2), PRIMARY KEY (ID) );
在這裡,我們使用下面的 INSERT INTO 語句將一些記錄插入到表中 −
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ), (2, 'Khilan', 25, 'Delhi', 1500.00 ), (3, 'Kaushik', 23, 'Kota', 2000.00 ), (4, 'Chaitali', 25, 'Mumbai', 6500.00 ), (5, 'Hardik', 27, 'Bhopal', 8500.00 ), (6, 'Komal', 22, 'Hyderabad', 4500.00 ), (7, 'Muffy', 24, 'Indore', 10000.00 );
使用以下查詢,讓我們建立一個新的資料庫Tutorials_copy,我們希望將Tutorials資料庫的所有資料物件和資料複製到其中。
CREATE DATABASE Tutorials_copy;
我們可以使用以下查詢驗證是否建立了資料庫Tutorials_copy −
SHOW DATABASES;
資料庫已建立。
資料庫 |
---|
information_schema |
mysql |
performance_schema |
tutorials |
tutorials_copy |
現在,使用以下查詢將當前資料庫切換到 'tutorials_copy' −
USE Tutorials_copy;
在這裡,我們在 'tutorials_copy' 資料庫中建立一個名為“CUSTOMERS”的空表,其模式與 'Tutorials' 中原始的 'CUSTOMERS' 表相同 −
CREATE TABLE Tutorials_copy.customers LIKE Tutorials.customers;
此查詢將 'Tutorials' 資料庫中原始 'customers' 表中的所有資料插入到 'tutorials_copy' 資料庫中的新 'customers' 表中。
INSERT Tutorials_copy.customers SELECT * FROM Tutorials.customers;
我們可以驗證 'Tutorials' 資料庫中的資料庫物件和資料是否已複製到 'Tutorials_copy' 資料庫中。
SHOW TABLES;
輸出
如下所示,表已成功複製 −
Tables_in_tutorials_copy |
---|
customers |
讓我們還檢索 'Tutorials_copy' 資料庫中 CUSTOMERS 表的記錄,以驗證記錄是否已複製 −
Select * from CUSTOMERS;
如下所示,'Tutorials_copy' 資料庫中的 CUSTOMERS 表,記錄已成功複製 −
ID | 姓名 (NAME) | 年齡 (AGE) | 地址 (ADDRESS) | 薪水 (SALARY) |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |