Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

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

Đôi khi bạn có thể cần sao chép bảng trong MySQL. Có nhiều cách khác nhau để sao chép bảng trong MySQL. Dưới đây là các bước để sao chép bảng trong MySQL. Bạn có thể sử dụng chúng để sao chép bảng sang bảng khác, sao chép bảng từ cơ sở dữ liệu này sang cơ sở dữ liệu khác, sao chép cấu trúc bảng, sao chép bảng với dữ liệu, sao chép cấu trúc bảng có chỉ mục hoặc sao chép bảng từ máy chủ này sang máy chủ khác.

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

Đây là cách sao chép bảng trong MySQL. Có nhiều trường hợp sử dụng khác nhau để sao chép bảng trong MySQL. Chúng tôi sẽ xem xét từng chi tiết.

MySQL Sao chép dữ liệu từ một bảng sang một bảng mới

Thông thường, bạn cần sao chép bảng trong MySQL sang một bảng mới. Trong trường hợp này, bạn cần sử dụng câu lệnh CREATE TABLE và SELECT như hình dưới đây

CREATE TABLE new_table 
SELECT column, column2, column3 
FROM
    existing_table;

Trong truy vấn trên, bạn cần chỉ định tên của bảng hiện có cùng với các cột mà bạn muốn sao chép và cả tên bảng mới. MySQL sẽ điền vào bảng mới của bạn với kết quả là câu lệnh SELECT của bạn.

Giả sử bạn có một bảng product_list hiện có

mysql> select * from product_list;
+------------+--------------------+-------+
| product_id | product_name       | price |
+------------+--------------------+-------+
|          1 | iPhone 11          |   400 |
|          2 | Samsung Galaxy A50 |   250 |
+------------+--------------------+-------+

Đây là truy vấn SQL để sao chép product_list bảng thành bảng mới có tên new_product_list

mysql> create table new_product_list
       select *
       from product_list;

mysql> select * from new_product_list;
+------------+--------------------+-------+
| product_id | product_name       | price |
+------------+--------------------+-------+
|          1 | iPhone 11          |   400 |
|          2 | Samsung Galaxy A50 |   250 |
+------------+--------------------+-------+

Xin lưu ý rằng bảng mới sẽ chỉ được tạo nếu nó không tồn tại. Nếu không, bạn sẽ gặp lỗi. Để tránh gặp lỗi khi bạn sao chép bảng trong MySQL, bạn có thể sử dụng mệnh đề IF NOT EXIST trong câu lệnh CREATE TABLE, như được hiển thị bên dưới.

mysql> create table if not exist new_product_list
       select *
       from product_list;

Phần thưởng Đọc:Cách thêm ràng buộc NOT NULL trong MySQL

Nếu bạn chỉ muốn sao chép một phần dữ liệu từ một bảng sang bảng mới, đó là một số hàng chứ không phải tất cả, bạn có thể sử dụng điều kiện WHERE trong câu lệnh SELECT của mình như được hiển thị

CREATE TABLE new_table 
SELECT column1, column2, column3 
FROM
    existing_table
WHERE
    conditions;

Đây là truy vấn SQL để sao chép một phần dữ liệu từ product_list bảng thành bảng mới có tên new_products2

mysql> create table new_products2
       select *
       from product_list
       where product_id=1;

mysql> select * from new_products2;
+------------+--------------+-------+
| product_id | product_name | price |
+------------+--------------+-------+
|          1 | iPhone 11    |   400 |
+------------+--------------+-------+

Phần thưởng Đọc:Cách thêm Ràng buộc Mặc định trong MySQL

Sao chép cấu trúc bảng MySQL sang bảng mới

Các truy vấn SQL trên chỉ sao chép bảng và dữ liệu. Họ sẽ không sao chép các đối tượng bảng như khóa chính, chỉ mục, ràng buộc, trình kích hoạt. Để sao chép cấu trúc bảng và dữ liệu, bạn cần sử dụng câu lệnh CREATE TABLE với từ khóa LIKE, như hình dưới đây

CREATE TABLE IF NOT EXISTS new_table LIKE existing_table;

Giả sử bạn có một đơn đặt hàng bảng có khóa chính (id)

mysql> describe orders;
+--------------+--------------+------+-----+-------------------+----------------+
| Field        | Type         | Null | Key | Default           | Extra          |
+--------------+--------------+------+-----+-------------------+----------------+
| id           | int(11)      | NO   | PRI | NULL              | auto_increment |
| product_name | varchar(255) | NO   |     | NULL              |                |
| order_date   | date         | YES  |     | NULL              |                |
| price        | int(11)      | NO   |     | NULL              |                |
| description  | text         | YES  |     | NULL              |                |
| created_at   | timestamp    | NO   |     | CURRENT_TIMESTAMP |                |
+--------------+--------------+------+-----+-------------------+----------------+

và bạn muốn sao chép cấu trúc của đơn đặt hàng tới new_orders bàn. Đây là truy vấn SQL để sao chép cấu trúc bảng sang bảng mới.

mysql> create table new_orders like orders;

mysql> describe new_orders;
+--------------+--------------+------+-----+-------------------+----------------+
| Field        | Type         | Null | Key | Default           | Extra          |
+--------------+--------------+------+-----+-------------------+----------------+
| id           | int(11)      | NO   | PRI | NULL              | auto_increment |
| product_name | varchar(255) | NO   |     | NULL              |                |
| order_date   | date         | YES  |     | NULL              |                |
| price        | int(11)      | NO   |     | NULL              |                |
| description  | text         | YES  |     | NULL              |                |
| created_at   | timestamp    | NO   |     | CURRENT_TIMESTAMP |                |
+--------------+--------------+------+-----+-------------------+----------------+

Như bạn có thể thấy, bảng new_orders cũng có trường khóa chính id. Câu lệnh trên sẽ chỉ sao chép cấu trúc bảng chứ không sao chép dữ liệu. Bạn cần sao chép dữ liệu một cách riêng biệt, như hiển thị trong phần tiếp theo.

Phần thưởng đã đọc:MySQL Chọn N hàng đầu cho mỗi nhóm

MySQL Sao chép dữ liệu từ một bảng sang bảng hiện có

Câu lệnh trên sẽ tạo bảng mới với cấu trúc của bảng cũ, nhưng nó sẽ là một bảng trống. Sau đó, bạn cần sử dụng câu lệnh INSERT để sao chép dữ liệu từ bảng cũ sang bảng mới.

INSERT new_table
SELECT * FROM existing_table;

Đây là truy vấn SQL để sao chép dữ liệu từ đơn đặt hàng vào bảng hiện có new_orders

mysql> insert new_orders
       select * from orders;

mysql> select * from orders;
+----+--------------+------------+-------+-------------+---------------------+
| id | product_name | order_date | price | description | created_at          |
+----+--------------+------------+-------+-------------+---------------------+
|  1 | A            | 2020-07-01 |   150 | New product | 2020-06-01 00:00:00 |
|  2 | B            | 2020-07-01 |   235 | Old product | 2020-06-15 00:00:00 |
+----+--------------+------------+-------+-------------+---------------------+

Phần thưởng Đọc:Cơ sở dữ liệu sao chép MySQL

Bảng sao chép MySQL từ cơ sở dữ liệu này sang cơ sở dữ liệu khác

Nếu bạn muốn sao chép bảng trong MySQL từ cơ sở dữ liệu sang cơ sở dữ liệu khác, thì chỉ cần bao gồm tên cơ sở dữ liệu trong tên bảng của bạn trong khi sử dụng các truy vấn SQL ở trên, như được in đậm bên dưới

CREATE TABLE destination_db.new_table 
LIKE source_db.existing_table;

INSERT destination_db.new_table 
SELECT *
FROM source_db.existing_table;

Câu lệnh SQL đầu tiên ở trên sẽ sao chép cấu trúc bảng trong MySQL từ cơ sở dữ liệu nguồn (ví dụ: source_db ) đến một khác (ví dụ: đích_db ). Câu lệnh thứ hai sẽ sao chép dữ liệu từ bảng này sang bảng khác.

Thay thế source_db đích_db trong các truy vấn trên với cơ sở dữ liệu nguồn và cơ sở dữ liệu đích tương ứng.

Hy vọng rằng, bài viết này sẽ giúp bạn sao chép bảng trong MySQL. Hãy cẩn thận khi bạn sao chép bảng trong MySQL, với số lượng lớn các bản ghi, vì nó có thể mất nhiều thời gian và tài nguyên.

Ubiq giúp dễ dàng trực quan hóa dữ liệu trong vài phút và theo dõi trong trang tổng quan thời gian thực. Thử nó ngay hôm nay!

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để tạo định dạng json với mysql group-concat?

  2. Nhóm theo tháng và năm trong MySQL

  3. Danh sách đầy đủ các ngôn ngữ trong MySQL

  4. Khóa ngoại nhiều cột trong MySQL?

  5. Hoàn thành Hướng dẫn xóa mềm &khôi phục bản ghi đã xóa của Laravel 8