Trang chủ » MySQL » Cách sao chép bảng trong MySQL

MySQL

Cách sao chép bảng trong MySQL

09/12/2023

Trong bài viết này chúng ta sẽ cùng tìm hiểu cách sao chép (copy) các bảng trong cùng 1 database hoặc từ 2 database khác nhau sử dụng CREATE TABLE và SELECT.

MySQL copy table sang 1 table mới

Sao chép dữ liệu từ 1 bảng sang 1 bảng mới rất có ích trong 1 số trường hợp như là sao lưu dữ liệu và tạo bản sao của dữ liệu production cho mục đích testing.

Sử dụng CREATE TABLESELECT để thực hiện copy


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

Đầu tiên MySQL sẽ tạo mới 1 bảng với tên mới với lệnh CREATE TABLE. Cấu trúc của bảng mới sẽ được định nghĩa bởi tập kết quả của lệnh SELECT. Sau đó MySQL sẽ đưa các dữ liệu có được từ lệnh SELECT vào bảng mới.

Nếu bạn chỉ muốn sao chép 1 phần dữ liệu thì có thể sử dụng WHERE trong câu lệnh SELECT:


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

Một điều quan trọng là trước khi tạo mới bảng, bạn cần kiểm tra sự tồn tại của bảng. Bạn sử dụng IF NOT EXIST để kiểm tra và tạo mới bảng.


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

Lưu ý: Lệnh trên chỉ sao chép dữ liệu. Nó không sao chép các đối tượng database khác của bảng như: indexes, primary key constraint, foreign key constraints, triggers, ...

Để sao chép toàn bộ bảng gồm dữ liệu và các đối tượng liên quan bạn sử dụng lệnh sau:


CREATE TABLE IF NOT EXISTS new_table LIKE existing_table;
 
INSERT new_table
SELECT * FROM existing_table;

Câu lệnh đầu tiên tạo mới bảng new_table bằng cách nhân đôi existing_table. Câu lệnh thứ 2 chèn dữ liệu từ bảng existing_table vào bảng new_table.

Ví dụ về sao chép bảng trong MySQL

Câu lệnh sau sẽ sao chép dữ liệu từ bảng offices sang bảng mới tên là offices_bk trong database mẫu classicmodels.


CREATE TABLE IF NOT EXISTS offices_bk 
SELECT * FROM
    offices;

Kiểm tra lại dữ liệu đã sao chép:


SELECT
    *
FROM
    offices_bk;

Trường hợp bạn chỉ muốn copy dữ liệu của US, bạn sử dụng lệnh sau:


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

Kiểm tra dữ liệu từ bảng offices_usa.


SELECT 
    *
FROM
    offices_usa;

Giả sử, bạn muốn sao chép dữ liệu và các đối tượng của bảng thì bạn sử dụng lệnh.


CREATE TABLE offices_dup LIKE offices;
 
INSERT office_dup
SELECT * FROM offices;

Sao chép bảng sang 1 database khác

Để sao chép bảng từ 1 database này sang 1 database khác bạn dùng lệnh sau:


CREATE TABLE destination_db.new_table 
LIKE source_db.existing_table;
 
INSERT destination_db.new_table 
SELECT *
FROM source_db.existing_table;

Lệnh đầu tiên tạo mới bảng new_table từ database đích (destination_db) bằng việc nhân đôi bảng đã có (existing_table) từ database nguồn (source_db).

Lệnh thứ 2 sao chép dữ liệu từ bảng đã có trong database nguồn sang bảng mới trong database đích.

Hãy xem ví dụ sau:

Tạo mới database tên testdb


	CREATE DATABASE IF NOT EXISTS testdb;

Tạo bảng offices trong testdb và sao chép cấu trúc từ bảng offices trong database classicmodels


CREATE TABLE testdb.offices LIKE classicmodels.offices;

Sao chép dữ liệu


INSERT testdb.offices
SELECT *
FROM classicmodels.offices;

Kiểm tra dữ liệu trong bảng testdb.offices.


SELECT
    *
FROM
    testdb.offices;

Như vậy là các bạn đã biết cách sao chép dữ liệu của bảng cho nhiều mục đích khác nhau. Hy vọng bài viết giúp ích cho bạn.

 

Bài viết liên quan


Có nhiều loại dữ liệu khác nhau được hỗ trợ trong MySQL. Trong số đó đôi khi chúng ta cần dùng đến kiểu dữ liệu DATE để lưu trữ giá trị dữ liệu. Kiểu dữ liệu DATE được sử dụng cho các giá trị có phần ngày nhưng không có phần thời gian.

22:38 . 10/01/2024

Hàm WEEKDAY() trong MySQL được sử dụng để tìm giá trị ngày trong tuần cho một ngày cụ thể. Nếu ngày là NULL thì hàm WEEKDAY() sẽ trả về NULL. Ngược lại, nó trả về chỉ mục cho một ngày, tức là 0 cho Thứ Hai, 1 cho Thứ Ba,... 6 cho Chủ Nhật.

22:38 . 30/12/2023

Hàm SEC_TO_TIME() trong MySQL được sử dụng để chuyển đổi một giá trị thời gian (trong đơn vị giây) thành dạng chuỗi thời gian.

22:33 . 30/12/2023

Hàm YEARWEEK() trong MySQL được sử dụng để trả về một số nguyên đại diện cho tuần trong năm, dựa trên một giá trị ngày hoặc ngày/tháng cung cấp

22:30 . 30/12/2023

Hàm YEAR() trong MySQL được sử dụng để trích xuất phần năm từ một giá trị ngày hoặc ngày/tháng

22:10 . 30/12/2023

Hàm LTRIM() trong MySQL được sử dụng để loại bỏ các ký tự khoảng trắng từ phía bên trái (bắt đầu) của một chuỗi ký tự.

22:03 . 30/12/2023

Hàm DAYOFWEEK() trong MySQL được sử dụng để trả về một số nguyên đại diện cho ngày trong tuần (từ 1 đến 7), với Chủ nhật là ngày đầu tiên (1) và Thứ Bảy là ngày cuối cùng (7).

09:01 . 30/12/2023

Hàm DATE_SUB() trong MySQL được sử dụng để trừ một khoảng thời gian cụ thể từ một giá trị ngày/tháng cung cấp.

08:52 . 30/12/2023

Hàm DATE_FORMAT() trong MySQL được sử dụng để định dạng một ngày cụ thể theo giá trị định dạng đã cho, tức là, một ngày sẽ được cung cấp và hàm này sẽ định dạng ngày đó theo các tham số định dạng đã chỉ định.

 

0988 542 856
0988 542 856