Hướng dẫn copy table from one schema to another mysql - sao chép bảng từ một giản đồ này sang một mysql khác


Re: Làm cách nào để sao chép một bảng từ một lược đồ MySQL sang lược đồ MySQL khác trong MYSL?


Nếu nó ở trên cùng một máy chủ chỉ là một cơ sở dữ liệu khác, bạn có thể sử dụng

CREATE TABLE newdb.mynewtable LIKE olddb.myoldtable;

Sau đó, bạn có thể chèn dữ liệu vào bảng mới từ cái cũ bằng cách sử dụng

INSERT newdb.mynewtable
SELECT *
FROM olddb.myoldtable;

Nếu chúng có trên các máy chủ khác nhau, bạn có thể sử dụng tiện ích dòng lệnh "MySQLDump" để đổ cấu trúc và/hoặc dữ liệu vào tệp, sau đó chạy tệp trên máy chủ mới. Sử dụng "-Bảng" để chỉ định [các] bảng bạn cần di chuyển.

Anthony


Môn học

Được viết bởi

Đăng

Ngày 08 tháng 11 năm 2006 12:33 PM

Re: Làm cách nào để sao chép một bảng từ một lược đồ MySQL sang lược đồ MySQL khác trong MYSL?

Ngày 08 tháng 11 năm 2006 01:22 PM

Xin lỗi, bạn không thể trả lời chủ đề này. Nó đã được đóng cửa.

Nội dung được sao chép trên trang web này là tài sản của chủ sở hữu bản quyền tương ứng. Nó không được xem xét trước bởi Oracle và không nhất thiết phải đại diện cho ý kiến ​​của Oracle hoặc bất kỳ bên nào khác.

Đó là hơi muộn nhưng chỉ cần phải giải quyết vấn đề tương tự, đây là quy trình được lưu trữ mà tôi đã đưa ra, trong trường hợp nó giúp người khác:

CREATE DEFINER=`whoever`@`wherever` PROCEDURE `copy_schema`[
    IN in_oldDB varchar[256],
    IN in_newDB varchar[256],
    IN in_copyData int[1]
]
BEGIN

DECLARE v_finished INTEGER DEFAULT 0;
DECLARE v_tname varchar[100] DEFAULT "";

DECLARE curTable CURSOR FOR 
SELECT `table_name`
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = in_oldDB
and TABLE_TYPE='BASE TABLE'
;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_finished = 1;

set @result=NULL;

# Create new schema if it doesn't exist
SET @sql = CONCAT['CREATE SCHEMA IF NOT EXISTS ',in_newDB,';'];
PREPARE create_schema FROM @sql;
EXECUTE create_schema;
DEALLOCATE PREPARE create_schema;

# Loop over tables in old schema
OPEN curTable;
clone_tables: LOOP

# get next table name
FETCH curTable INTO v_tname;

# Quit if we're done
IF v_finished = 1 THEN LEAVE clone_tables; END IF;

# Clone the table
SET @sql = CONCAT["CREATE TABLE `", in_newDB, "`.`", v_tname, "` LIKE `", in_oldDB, "`.`", v_tname, "`;"];
PREPARE clone_table FROM @sql;
EXECUTE clone_table;
DEALLOCATE PREPARE clone_table;

# Optionally copy data
#select v_tname; # This just gives some feedback in workbench for long-running copies
IF [in_copyData > 0] THEN
    SET @sql = CONCAT["INSERT INTO `", in_newDB, "`.`", v_tname, "` SELECT * FROM `", in_oldDB, "`.`", v_tname, "`;"];
    PREPARE clone_data FROM @sql;
    EXECUTE clone_data;
    DEALLOCATE PREPARE clone_data;
END IF;

# Result message
SET @result = IFNULL[CONCAT[@result,',',v_tname],v_tname];

END LOOP clone_tables;

# Close cursor
CLOSE curTable;

# Print result message
SELECT CONCAT["Copied the following tables from ", in_oldDB, " to ", in_newDB, ": ", @result];

END

Tóm tắt: Trong hướng dẫn này, bạn sẽ tìm hiểu cách sao chép bảng trong cùng một cơ sở dữ liệu hoặc từ cơ sở dữ liệu này sang cơ sở dữ liệu khác & nbsp; sử dụng bảng tạo và chọn các câu lệnh.: in this tutorial, you will learn how to copy table within the same database or from one database to another using CREATE TABLE and SELECT statements.

Bảng sao chép mysql cho & nbsp; một bảng mới & nbsp;

Sao chép dữ liệu từ bảng hiện có sang một bảng mới rất hữu ích trong một số trường hợp như sao lưu dữ liệu và sao chép dữ liệu sản xuất để thử nghiệm.

Để sao chép dữ liệu từ bảng sang bảng mới, bạn sử dụng bảng tạo và chọn các câu lệnh như sau:

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

Code language: SQL [Structured Query Language] [sql]

Đầu tiên, MySQL tạo một bảng mới với tên được chỉ định & nbsp; trong câu lệnh CREATE TABLE. Cấu trúc của bảng mới được xác định bởi tập kết quả của câu lệnh

INSERT newdb.mynewtable
SELECT *
FROM olddb.myoldtable;
7. Sau đó, MySQL điền dữ liệu & nbsp; dữ liệu đến & nbsp; từ câu lệnh
INSERT newdb.mynewtable
SELECT *
FROM olddb.myoldtable;
7 đến bảng mới.

Để sao chép dữ liệu một phần từ bảng hiện có sang bảng mới, bạn sẽ sử dụng mệnh đề WHERE trong câu lệnh CHỌN như sau:

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

Code language: SQL [Structured Query Language] [sql]

Điều rất quan trọng là kiểm tra xem bảng bạn có muốn tạo không tồn tại trước khi tạo nó. Để làm như vậy, bạn sử dụng mệnh đề

INSERT newdb.mynewtable
SELECT *
FROM olddb.myoldtable;
9 trong câu lệnh
CREATE DEFINER=`whoever`@`wherever` PROCEDURE `copy_schema`[
    IN in_oldDB varchar[256],
    IN in_newDB varchar[256],
    IN in_copyData int[1]
]
BEGIN

DECLARE v_finished INTEGER DEFAULT 0;
DECLARE v_tname varchar[100] DEFAULT "";

DECLARE curTable CURSOR FOR 
SELECT `table_name`
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = in_oldDB
and TABLE_TYPE='BASE TABLE'
;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_finished = 1;

set @result=NULL;

# Create new schema if it doesn't exist
SET @sql = CONCAT['CREATE SCHEMA IF NOT EXISTS ',in_newDB,';'];
PREPARE create_schema FROM @sql;
EXECUTE create_schema;
DEALLOCATE PREPARE create_schema;

# Loop over tables in old schema
OPEN curTable;
clone_tables: LOOP

# get next table name
FETCH curTable INTO v_tname;

# Quit if we're done
IF v_finished = 1 THEN LEAVE clone_tables; END IF;

# Clone the table
SET @sql = CONCAT["CREATE TABLE `", in_newDB, "`.`", v_tname, "` LIKE `", in_oldDB, "`.`", v_tname, "`;"];
PREPARE clone_table FROM @sql;
EXECUTE clone_table;
DEALLOCATE PREPARE clone_table;

# Optionally copy data
#select v_tname; # This just gives some feedback in workbench for long-running copies
IF [in_copyData > 0] THEN
    SET @sql = CONCAT["INSERT INTO `", in_newDB, "`.`", v_tname, "` SELECT * FROM `", in_oldDB, "`.`", v_tname, "`;"];
    PREPARE clone_data FROM @sql;
    EXECUTE clone_data;
    DEALLOCATE PREPARE clone_data;
END IF;

# Result message
SET @result = IFNULL[CONCAT[@result,',',v_tname],v_tname];

END LOOP clone_tables;

# Close cursor
CLOSE curTable;

# Print result message
SELECT CONCAT["Copied the following tables from ", in_oldDB, " to ", in_newDB, ": ", @result];

END
0. Lệnh hoàn chỉnh & nbsp; của việc sao chép dữ liệu từ một bảng hiện có sang bảng mới như sau:

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

Code language: SQL [Structured Query Language] [sql]

Lưu ý rằng câu lệnh ở trên chỉ sao chép bảng và dữ liệu của nó. Nó không sao chép các đối tượng cơ sở dữ liệu khác như chỉ mục, ràng buộc khóa chính, các ràng buộc khóa nước ngoài, & nbsp; kích hoạt, v.v., được liên kết với bảng.

Để sao chép dữ liệu từ một bảng và tất cả các đối tượng phụ thuộc của bảng, bạn sử dụng các câu lệnh sau:

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

Code language: SQL [Structured Query Language] [sql]

Chúng ta cần thực thi & nbsp; hai câu lệnh. Tuyên bố đầu tiên & nbsp; tạo ra một bảng mới

CREATE DEFINER=`whoever`@`wherever` PROCEDURE `copy_schema`[
    IN in_oldDB varchar[256],
    IN in_newDB varchar[256],
    IN in_copyData int[1]
]
BEGIN

DECLARE v_finished INTEGER DEFAULT 0;
DECLARE v_tname varchar[100] DEFAULT "";

DECLARE curTable CURSOR FOR 
SELECT `table_name`
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = in_oldDB
and TABLE_TYPE='BASE TABLE'
;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_finished = 1;

set @result=NULL;

# Create new schema if it doesn't exist
SET @sql = CONCAT['CREATE SCHEMA IF NOT EXISTS ',in_newDB,';'];
PREPARE create_schema FROM @sql;
EXECUTE create_schema;
DEALLOCATE PREPARE create_schema;

# Loop over tables in old schema
OPEN curTable;
clone_tables: LOOP

# get next table name
FETCH curTable INTO v_tname;

# Quit if we're done
IF v_finished = 1 THEN LEAVE clone_tables; END IF;

# Clone the table
SET @sql = CONCAT["CREATE TABLE `", in_newDB, "`.`", v_tname, "` LIKE `", in_oldDB, "`.`", v_tname, "`;"];
PREPARE clone_table FROM @sql;
EXECUTE clone_table;
DEALLOCATE PREPARE clone_table;

# Optionally copy data
#select v_tname; # This just gives some feedback in workbench for long-running copies
IF [in_copyData > 0] THEN
    SET @sql = CONCAT["INSERT INTO `", in_newDB, "`.`", v_tname, "` SELECT * FROM `", in_oldDB, "`.`", v_tname, "`;"];
    PREPARE clone_data FROM @sql;
    EXECUTE clone_data;
    DEALLOCATE PREPARE clone_data;
END IF;

# Result message
SET @result = IFNULL[CONCAT[@result,',',v_tname],v_tname];

END LOOP clone_tables;

# Close cursor
CLOSE curTable;

# Print result message
SELECT CONCAT["Copied the following tables from ", in_oldDB, " to ", in_newDB, ": ", @result];

END
1 bằng cách nhân đôi
CREATE DEFINER=`whoever`@`wherever` PROCEDURE `copy_schema`[
    IN in_oldDB varchar[256],
    IN in_newDB varchar[256],
    IN in_copyData int[1]
]
BEGIN

DECLARE v_finished INTEGER DEFAULT 0;
DECLARE v_tname varchar[100] DEFAULT "";

DECLARE curTable CURSOR FOR 
SELECT `table_name`
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = in_oldDB
and TABLE_TYPE='BASE TABLE'
;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_finished = 1;

set @result=NULL;

# Create new schema if it doesn't exist
SET @sql = CONCAT['CREATE SCHEMA IF NOT EXISTS ',in_newDB,';'];
PREPARE create_schema FROM @sql;
EXECUTE create_schema;
DEALLOCATE PREPARE create_schema;

# Loop over tables in old schema
OPEN curTable;
clone_tables: LOOP

# get next table name
FETCH curTable INTO v_tname;

# Quit if we're done
IF v_finished = 1 THEN LEAVE clone_tables; END IF;

# Clone the table
SET @sql = CONCAT["CREATE TABLE `", in_newDB, "`.`", v_tname, "` LIKE `", in_oldDB, "`.`", v_tname, "`;"];
PREPARE clone_table FROM @sql;
EXECUTE clone_table;
DEALLOCATE PREPARE clone_table;

# Optionally copy data
#select v_tname; # This just gives some feedback in workbench for long-running copies
IF [in_copyData > 0] THEN
    SET @sql = CONCAT["INSERT INTO `", in_newDB, "`.`", v_tname, "` SELECT * FROM `", in_oldDB, "`.`", v_tname, "`;"];
    PREPARE clone_data FROM @sql;
    EXECUTE clone_data;
    DEALLOCATE PREPARE clone_data;
END IF;

# Result message
SET @result = IFNULL[CONCAT[@result,',',v_tname],v_tname];

END LOOP clone_tables;

# Close cursor
CLOSE curTable;

# Print result message
SELECT CONCAT["Copied the following tables from ", in_oldDB, " to ", in_newDB, ": ", @result];

END
2. Câu lệnh thứ hai & nbsp; chèn dữ liệu từ bảng hiện tại vào
CREATE DEFINER=`whoever`@`wherever` PROCEDURE `copy_schema`[
    IN in_oldDB varchar[256],
    IN in_newDB varchar[256],
    IN in_copyData int[1]
]
BEGIN

DECLARE v_finished INTEGER DEFAULT 0;
DECLARE v_tname varchar[100] DEFAULT "";

DECLARE curTable CURSOR FOR 
SELECT `table_name`
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = in_oldDB
and TABLE_TYPE='BASE TABLE'
;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_finished = 1;

set @result=NULL;

# Create new schema if it doesn't exist
SET @sql = CONCAT['CREATE SCHEMA IF NOT EXISTS ',in_newDB,';'];
PREPARE create_schema FROM @sql;
EXECUTE create_schema;
DEALLOCATE PREPARE create_schema;

# Loop over tables in old schema
OPEN curTable;
clone_tables: LOOP

# get next table name
FETCH curTable INTO v_tname;

# Quit if we're done
IF v_finished = 1 THEN LEAVE clone_tables; END IF;

# Clone the table
SET @sql = CONCAT["CREATE TABLE `", in_newDB, "`.`", v_tname, "` LIKE `", in_oldDB, "`.`", v_tname, "`;"];
PREPARE clone_table FROM @sql;
EXECUTE clone_table;
DEALLOCATE PREPARE clone_table;

# Optionally copy data
#select v_tname; # This just gives some feedback in workbench for long-running copies
IF [in_copyData > 0] THEN
    SET @sql = CONCAT["INSERT INTO `", in_newDB, "`.`", v_tname, "` SELECT * FROM `", in_oldDB, "`.`", v_tname, "`;"];
    PREPARE clone_data FROM @sql;
    EXECUTE clone_data;
    DEALLOCATE PREPARE clone_data;
END IF;

# Result message
SET @result = IFNULL[CONCAT[@result,',',v_tname],v_tname];

END LOOP clone_tables;

# Close cursor
CLOSE curTable;

# Print result message
SELECT CONCAT["Copied the following tables from ", in_oldDB, " to ", in_newDB, ": ", @result];

END
1.

Ví dụ bảng sao chép mysql

Câu lệnh sau & NBSP; sao chép dữ liệu từ bảng

CREATE DEFINER=`whoever`@`wherever` PROCEDURE `copy_schema`[
    IN in_oldDB varchar[256],
    IN in_newDB varchar[256],
    IN in_copyData int[1]
]
BEGIN

DECLARE v_finished INTEGER DEFAULT 0;
DECLARE v_tname varchar[100] DEFAULT "";

DECLARE curTable CURSOR FOR 
SELECT `table_name`
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = in_oldDB
and TABLE_TYPE='BASE TABLE'
;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_finished = 1;

set @result=NULL;

# Create new schema if it doesn't exist
SET @sql = CONCAT['CREATE SCHEMA IF NOT EXISTS ',in_newDB,';'];
PREPARE create_schema FROM @sql;
EXECUTE create_schema;
DEALLOCATE PREPARE create_schema;

# Loop over tables in old schema
OPEN curTable;
clone_tables: LOOP

# get next table name
FETCH curTable INTO v_tname;

# Quit if we're done
IF v_finished = 1 THEN LEAVE clone_tables; END IF;

# Clone the table
SET @sql = CONCAT["CREATE TABLE `", in_newDB, "`.`", v_tname, "` LIKE `", in_oldDB, "`.`", v_tname, "`;"];
PREPARE clone_table FROM @sql;
EXECUTE clone_table;
DEALLOCATE PREPARE clone_table;

# Optionally copy data
#select v_tname; # This just gives some feedback in workbench for long-running copies
IF [in_copyData > 0] THEN
    SET @sql = CONCAT["INSERT INTO `", in_newDB, "`.`", v_tname, "` SELECT * FROM `", in_oldDB, "`.`", v_tname, "`;"];
    PREPARE clone_data FROM @sql;
    EXECUTE clone_data;
    DEALLOCATE PREPARE clone_data;
END IF;

# Result message
SET @result = IFNULL[CONCAT[@result,',',v_tname],v_tname];

END LOOP clone_tables;

# Close cursor
CLOSE curTable;

# Print result message
SELECT CONCAT["Copied the following tables from ", in_oldDB, " to ", in_newDB, ": ", @result];

END
4 sang bảng mới có tên
CREATE DEFINER=`whoever`@`wherever` PROCEDURE `copy_schema`[
    IN in_oldDB varchar[256],
    IN in_newDB varchar[256],
    IN in_copyData int[1]
]
BEGIN

DECLARE v_finished INTEGER DEFAULT 0;
DECLARE v_tname varchar[100] DEFAULT "";

DECLARE curTable CURSOR FOR 
SELECT `table_name`
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = in_oldDB
and TABLE_TYPE='BASE TABLE'
;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_finished = 1;

set @result=NULL;

# Create new schema if it doesn't exist
SET @sql = CONCAT['CREATE SCHEMA IF NOT EXISTS ',in_newDB,';'];
PREPARE create_schema FROM @sql;
EXECUTE create_schema;
DEALLOCATE PREPARE create_schema;

# Loop over tables in old schema
OPEN curTable;
clone_tables: LOOP

# get next table name
FETCH curTable INTO v_tname;

# Quit if we're done
IF v_finished = 1 THEN LEAVE clone_tables; END IF;

# Clone the table
SET @sql = CONCAT["CREATE TABLE `", in_newDB, "`.`", v_tname, "` LIKE `", in_oldDB, "`.`", v_tname, "`;"];
PREPARE clone_table FROM @sql;
EXECUTE clone_table;
DEALLOCATE PREPARE clone_table;

# Optionally copy data
#select v_tname; # This just gives some feedback in workbench for long-running copies
IF [in_copyData > 0] THEN
    SET @sql = CONCAT["INSERT INTO `", in_newDB, "`.`", v_tname, "` SELECT * FROM `", in_oldDB, "`.`", v_tname, "`;"];
    PREPARE clone_data FROM @sql;
    EXECUTE clone_data;
    DEALLOCATE PREPARE clone_data;
END IF;

# Result message
SET @result = IFNULL[CONCAT[@result,',',v_tname],v_tname];

END LOOP clone_tables;

# Close cursor
CLOSE curTable;

# Print result message
SELECT CONCAT["Copied the following tables from ", in_oldDB, " to ", in_newDB, ": ", @result];

END
5 trong cơ sở dữ liệu mẫu
CREATE DEFINER=`whoever`@`wherever` PROCEDURE `copy_schema`[
    IN in_oldDB varchar[256],
    IN in_newDB varchar[256],
    IN in_copyData int[1]
]
BEGIN

DECLARE v_finished INTEGER DEFAULT 0;
DECLARE v_tname varchar[100] DEFAULT "";

DECLARE curTable CURSOR FOR 
SELECT `table_name`
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = in_oldDB
and TABLE_TYPE='BASE TABLE'
;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_finished = 1;

set @result=NULL;

# Create new schema if it doesn't exist
SET @sql = CONCAT['CREATE SCHEMA IF NOT EXISTS ',in_newDB,';'];
PREPARE create_schema FROM @sql;
EXECUTE create_schema;
DEALLOCATE PREPARE create_schema;

# Loop over tables in old schema
OPEN curTable;
clone_tables: LOOP

# get next table name
FETCH curTable INTO v_tname;

# Quit if we're done
IF v_finished = 1 THEN LEAVE clone_tables; END IF;

# Clone the table
SET @sql = CONCAT["CREATE TABLE `", in_newDB, "`.`", v_tname, "` LIKE `", in_oldDB, "`.`", v_tname, "`;"];
PREPARE clone_table FROM @sql;
EXECUTE clone_table;
DEALLOCATE PREPARE clone_table;

# Optionally copy data
#select v_tname; # This just gives some feedback in workbench for long-running copies
IF [in_copyData > 0] THEN
    SET @sql = CONCAT["INSERT INTO `", in_newDB, "`.`", v_tname, "` SELECT * FROM `", in_oldDB, "`.`", v_tname, "`;"];
    PREPARE clone_data FROM @sql;
    EXECUTE clone_data;
    DEALLOCATE PREPARE clone_data;
END IF;

# Result message
SET @result = IFNULL[CONCAT[@result,',',v_tname],v_tname];

END LOOP clone_tables;

# Close cursor
CLOSE curTable;

# Print result message
SELECT CONCAT["Copied the following tables from ", in_oldDB, " to ", in_newDB, ": ", @result];

END
6.

CREATE TABLE IF NOT EXISTS offices_bk SELECT * FROM offices;

Code language: SQL [Structured Query Language] [sql]

Chúng tôi có thể xác minh bản sao bằng cách truy vấn dữ liệu từ bảng

CREATE DEFINER=`whoever`@`wherever` PROCEDURE `copy_schema`[
    IN in_oldDB varchar[256],
    IN in_newDB varchar[256],
    IN in_copyData int[1]
]
BEGIN

DECLARE v_finished INTEGER DEFAULT 0;
DECLARE v_tname varchar[100] DEFAULT "";

DECLARE curTable CURSOR FOR 
SELECT `table_name`
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = in_oldDB
and TABLE_TYPE='BASE TABLE'
;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_finished = 1;

set @result=NULL;

# Create new schema if it doesn't exist
SET @sql = CONCAT['CREATE SCHEMA IF NOT EXISTS ',in_newDB,';'];
PREPARE create_schema FROM @sql;
EXECUTE create_schema;
DEALLOCATE PREPARE create_schema;

# Loop over tables in old schema
OPEN curTable;
clone_tables: LOOP

# get next table name
FETCH curTable INTO v_tname;

# Quit if we're done
IF v_finished = 1 THEN LEAVE clone_tables; END IF;

# Clone the table
SET @sql = CONCAT["CREATE TABLE `", in_newDB, "`.`", v_tname, "` LIKE `", in_oldDB, "`.`", v_tname, "`;"];
PREPARE clone_table FROM @sql;
EXECUTE clone_table;
DEALLOCATE PREPARE clone_table;

# Optionally copy data
#select v_tname; # This just gives some feedback in workbench for long-running copies
IF [in_copyData > 0] THEN
    SET @sql = CONCAT["INSERT INTO `", in_newDB, "`.`", v_tname, "` SELECT * FROM `", in_oldDB, "`.`", v_tname, "`;"];
    PREPARE clone_data FROM @sql;
    EXECUTE clone_data;
    DEALLOCATE PREPARE clone_data;
END IF;

# Result message
SET @result = IFNULL[CONCAT[@result,',',v_tname],v_tname];

END LOOP clone_tables;

# Close cursor
CLOSE curTable;

# Print result message
SELECT CONCAT["Copied the following tables from ", in_oldDB, " to ", in_newDB, ": ", @result];

END
7 như sau:

SELECT * FROM offices_bk;

Code language: SQL [Structured Query Language] [sql]
in Các trường hợp chúng tôi muốn & nbsp; Sao chép các văn phòng & nbsp; chỉ tại Hoa Kỳ, chúng tôi & nbsp; có thể thêm mệnh đề
CREATE DEFINER=`whoever`@`wherever` PROCEDURE `copy_schema`[
    IN in_oldDB varchar[256],
    IN in_newDB varchar[256],
    IN in_copyData int[1]
]
BEGIN

DECLARE v_finished INTEGER DEFAULT 0;
DECLARE v_tname varchar[100] DEFAULT "";

DECLARE curTable CURSOR FOR 
SELECT `table_name`
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = in_oldDB
and TABLE_TYPE='BASE TABLE'
;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_finished = 1;

set @result=NULL;

# Create new schema if it doesn't exist
SET @sql = CONCAT['CREATE SCHEMA IF NOT EXISTS ',in_newDB,';'];
PREPARE create_schema FROM @sql;
EXECUTE create_schema;
DEALLOCATE PREPARE create_schema;

# Loop over tables in old schema
OPEN curTable;
clone_tables: LOOP

# get next table name
FETCH curTable INTO v_tname;

# Quit if we're done
IF v_finished = 1 THEN LEAVE clone_tables; END IF;

# Clone the table
SET @sql = CONCAT["CREATE TABLE `", in_newDB, "`.`", v_tname, "` LIKE `", in_oldDB, "`.`", v_tname, "`;"];
PREPARE clone_table FROM @sql;
EXECUTE clone_table;
DEALLOCATE PREPARE clone_table;

# Optionally copy data
#select v_tname; # This just gives some feedback in workbench for long-running copies
IF [in_copyData > 0] THEN
    SET @sql = CONCAT["INSERT INTO `", in_newDB, "`.`", v_tname, "` SELECT * FROM `", in_oldDB, "`.`", v_tname, "`;"];
    PREPARE clone_data FROM @sql;
    EXECUTE clone_data;
    DEALLOCATE PREPARE clone_data;
END IF;

# Result message
SET @result = IFNULL[CONCAT[@result,',',v_tname],v_tname];

END LOOP clone_tables;

# Close cursor
CLOSE curTable;

# Print result message
SELECT CONCAT["Copied the following tables from ", in_oldDB, " to ", in_newDB, ": ", @result];

END
8 vào câu lệnh
INSERT newdb.mynewtable
SELECT *
FROM olddb.myoldtable;
7 như sau:

In cases we want to copy the offices in the US only, we can add the

CREATE DEFINER=`whoever`@`wherever` PROCEDURE `copy_schema`[
    IN in_oldDB varchar[256],
    IN in_newDB varchar[256],
    IN in_copyData int[1]
]
BEGIN

DECLARE v_finished INTEGER DEFAULT 0;
DECLARE v_tname varchar[100] DEFAULT "";

DECLARE curTable CURSOR FOR 
SELECT `table_name`
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = in_oldDB
and TABLE_TYPE='BASE TABLE'
;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_finished = 1;

set @result=NULL;

# Create new schema if it doesn't exist
SET @sql = CONCAT['CREATE SCHEMA IF NOT EXISTS ',in_newDB,';'];
PREPARE create_schema FROM @sql;
EXECUTE create_schema;
DEALLOCATE PREPARE create_schema;

# Loop over tables in old schema
OPEN curTable;
clone_tables: LOOP

# get next table name
FETCH curTable INTO v_tname;

# Quit if we're done
IF v_finished = 1 THEN LEAVE clone_tables; END IF;

# Clone the table
SET @sql = CONCAT["CREATE TABLE `", in_newDB, "`.`", v_tname, "` LIKE `", in_oldDB, "`.`", v_tname, "`;"];
PREPARE clone_table FROM @sql;
EXECUTE clone_table;
DEALLOCATE PREPARE clone_table;

# Optionally copy data
#select v_tname; # This just gives some feedback in workbench for long-running copies
IF [in_copyData > 0] THEN
    SET @sql = CONCAT["INSERT INTO `", in_newDB, "`.`", v_tname, "` SELECT * FROM `", in_oldDB, "`.`", v_tname, "`;"];
    PREPARE clone_data FROM @sql;
    EXECUTE clone_data;
    DEALLOCATE PREPARE clone_data;
END IF;

# Result message
SET @result = IFNULL[CONCAT[@result,',',v_tname],v_tname];

END LOOP clone_tables;

# Close cursor
CLOSE curTable;

# Print result message
SELECT CONCAT["Copied the following tables from ", in_oldDB, " to ", in_newDB, ": ", @result];

END
8 clause to the
INSERT newdb.mynewtable
SELECT *
FROM olddb.myoldtable;
7 statement as follows:

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

Code language: SQL [Structured Query Language] [sql]

Câu lệnh sau đây nhận được tất cả dữ liệu từ bảng

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

Code language: SQL [Structured Query Language] [sql]
0.

INSERT newdb.mynewtable
SELECT *
FROM olddb.myoldtable;
0Suppose, chúng tôi muốn sao chép không chỉ dữ liệu mà cả tất cả các đối tượng cơ sở dữ liệu được liên kết với bảng
CREATE DEFINER=`whoever`@`wherever` PROCEDURE `copy_schema`[
    IN in_oldDB varchar[256],
    IN in_newDB varchar[256],
    IN in_copyData int[1]
]
BEGIN

DECLARE v_finished INTEGER DEFAULT 0;
DECLARE v_tname varchar[100] DEFAULT "";

DECLARE curTable CURSOR FOR 
SELECT `table_name`
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = in_oldDB
and TABLE_TYPE='BASE TABLE'
;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_finished = 1;

set @result=NULL;

# Create new schema if it doesn't exist
SET @sql = CONCAT['CREATE SCHEMA IF NOT EXISTS ',in_newDB,';'];
PREPARE create_schema FROM @sql;
EXECUTE create_schema;
DEALLOCATE PREPARE create_schema;

# Loop over tables in old schema
OPEN curTable;
clone_tables: LOOP

# get next table name
FETCH curTable INTO v_tname;

# Quit if we're done
IF v_finished = 1 THEN LEAVE clone_tables; END IF;

# Clone the table
SET @sql = CONCAT["CREATE TABLE `", in_newDB, "`.`", v_tname, "` LIKE `", in_oldDB, "`.`", v_tname, "`;"];
PREPARE clone_table FROM @sql;
EXECUTE clone_table;
DEALLOCATE PREPARE clone_table;

# Optionally copy data
#select v_tname; # This just gives some feedback in workbench for long-running copies
IF [in_copyData > 0] THEN
    SET @sql = CONCAT["INSERT INTO `", in_newDB, "`.`", v_tname, "` SELECT * FROM `", in_oldDB, "`.`", v_tname, "`;"];
    PREPARE clone_data FROM @sql;
    EXECUTE clone_data;
    DEALLOCATE PREPARE clone_data;
END IF;

# Result message
SET @result = IFNULL[CONCAT[@result,',',v_tname],v_tname];

END LOOP clone_tables;

# Close cursor
CLOSE curTable;

# Print result message
SELECT CONCAT["Copied the following tables from ", in_oldDB, " to ", in_newDB, ": ", @result];

END
4, chúng tôi sử dụng các câu lệnh sau:

Suppose, we want to copy not only the data but also all database objects associated with the

CREATE DEFINER=`whoever`@`wherever` PROCEDURE `copy_schema`[
    IN in_oldDB varchar[256],
    IN in_newDB varchar[256],
    IN in_copyData int[1]
]
BEGIN

DECLARE v_finished INTEGER DEFAULT 0;
DECLARE v_tname varchar[100] DEFAULT "";

DECLARE curTable CURSOR FOR 
SELECT `table_name`
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = in_oldDB
and TABLE_TYPE='BASE TABLE'
;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_finished = 1;

set @result=NULL;

# Create new schema if it doesn't exist
SET @sql = CONCAT['CREATE SCHEMA IF NOT EXISTS ',in_newDB,';'];
PREPARE create_schema FROM @sql;
EXECUTE create_schema;
DEALLOCATE PREPARE create_schema;

# Loop over tables in old schema
OPEN curTable;
clone_tables: LOOP

# get next table name
FETCH curTable INTO v_tname;

# Quit if we're done
IF v_finished = 1 THEN LEAVE clone_tables; END IF;

# Clone the table
SET @sql = CONCAT["CREATE TABLE `", in_newDB, "`.`", v_tname, "` LIKE `", in_oldDB, "`.`", v_tname, "`;"];
PREPARE clone_table FROM @sql;
EXECUTE clone_table;
DEALLOCATE PREPARE clone_table;

# Optionally copy data
#select v_tname; # This just gives some feedback in workbench for long-running copies
IF [in_copyData > 0] THEN
    SET @sql = CONCAT["INSERT INTO `", in_newDB, "`.`", v_tname, "` SELECT * FROM `", in_oldDB, "`.`", v_tname, "`;"];
    PREPARE clone_data FROM @sql;
    EXECUTE clone_data;
    DEALLOCATE PREPARE clone_data;
END IF;

# Result message
SET @result = IFNULL[CONCAT[@result,',',v_tname],v_tname];

END LOOP clone_tables;

# Close cursor
CLOSE curTable;

# Print result message
SELECT CONCAT["Copied the following tables from ", in_oldDB, " to ", in_newDB, ": ", @result];

END
4 table, we use the following statements:

INSERT newdb.mynewtable
SELECT *
FROM olddb.myoldtable;
1

Bảng sao chép mysql vào cơ sở dữ liệu khác

Đôi khi, bạn muốn sao chép một bảng vào một cơ sở dữ liệu khác. Trong những trường hợp như vậy, bạn sử dụng các câu sau:

INSERT newdb.mynewtable
SELECT *
FROM olddb.myoldtable;
2

Câu lệnh đầu tiên tạo ra một bảng mới new_table trong cơ sở dữ liệu đích [Destination_db] bằng cách sao chép bảng hiện tại [hiện tại_table] từ cơ sở dữ liệu nguồn [Source_db].

Các câu lệnh thứ hai sao chép dữ liệu từ bảng hiện có trong cơ sở dữ liệu nguồn vào bảng mới trong cơ sở dữ liệu đích.

Hãy cùng xem ví dụ sau đây.

Đầu tiên, chúng tôi tạo cơ sở dữ liệu có tên TestDB bằng cách sử dụng câu lệnh sau:

INSERT newdb.mynewtable
SELECT *
FROM olddb.myoldtable;
3

Thứ hai, chúng tôi tạo bảng & nbsp; ________ 24 trong

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

Code language: SQL [Structured Query Language] [sql]
3 bằng cách sao chép cấu trúc của nó từ bảng
CREATE DEFINER=`whoever`@`wherever` PROCEDURE `copy_schema`[
    IN in_oldDB varchar[256],
    IN in_newDB varchar[256],
    IN in_copyData int[1]
]
BEGIN

DECLARE v_finished INTEGER DEFAULT 0;
DECLARE v_tname varchar[100] DEFAULT "";

DECLARE curTable CURSOR FOR 
SELECT `table_name`
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = in_oldDB
and TABLE_TYPE='BASE TABLE'
;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_finished = 1;

set @result=NULL;

# Create new schema if it doesn't exist
SET @sql = CONCAT['CREATE SCHEMA IF NOT EXISTS ',in_newDB,';'];
PREPARE create_schema FROM @sql;
EXECUTE create_schema;
DEALLOCATE PREPARE create_schema;

# Loop over tables in old schema
OPEN curTable;
clone_tables: LOOP

# get next table name
FETCH curTable INTO v_tname;

# Quit if we're done
IF v_finished = 1 THEN LEAVE clone_tables; END IF;

# Clone the table
SET @sql = CONCAT["CREATE TABLE `", in_newDB, "`.`", v_tname, "` LIKE `", in_oldDB, "`.`", v_tname, "`;"];
PREPARE clone_table FROM @sql;
EXECUTE clone_table;
DEALLOCATE PREPARE clone_table;

# Optionally copy data
#select v_tname; # This just gives some feedback in workbench for long-running copies
IF [in_copyData > 0] THEN
    SET @sql = CONCAT["INSERT INTO `", in_newDB, "`.`", v_tname, "` SELECT * FROM `", in_oldDB, "`.`", v_tname, "`;"];
    PREPARE clone_data FROM @sql;
    EXECUTE clone_data;
    DEALLOCATE PREPARE clone_data;
END IF;

# Result message
SET @result = IFNULL[CONCAT[@result,',',v_tname],v_tname];

END LOOP clone_tables;

# Close cursor
CLOSE curTable;

# Print result message
SELECT CONCAT["Copied the following tables from ", in_oldDB, " to ", in_newDB, ": ", @result];

END
4 trong cơ sở dữ liệu & nbsp; ____ ____ 26.

INSERT newdb.mynewtable
SELECT *
FROM olddb.myoldtable;
4

Thứ ba, chúng tôi sao chép dữ liệu từ bảng classimodels.offices vào bảng TestDB.offices.

INSERT newdb.mynewtable
SELECT *
FROM olddb.myoldtable;
5

Hãy để xác minh dữ liệu từ bảng

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

Code language: SQL [Structured Query Language] [sql]
6.

INSERT newdb.mynewtable
SELECT *
FROM olddb.myoldtable;
6 Trong hướng dẫn này, chúng tôi đã chỉ cho bạn nhiều kỹ thuật khác nhau để sao chép bảng trong cơ sở dữ liệu và từ cơ sở dữ liệu này sang cơ sở dữ liệu khác.

In this tutorial, we have shown you various techniques to copy table within a database and from one database to another.

Hướng dẫn này có hữu ích không?

Làm cách nào để sao chép một bảng từ lược đồ này sang lược đồ khác?

Trong SQL Management Studio, nhấp chuột phải, cơ sở dữ liệu có bảng nguồn, chọn các tác vụ -> Xuất dữ liệu.Bạn sẽ có thể đặt SOUSTE và SPORTS và lược đồ nguồn, chọn các bảng bạn muốn sao chép và bạn có thể có lược đồ đích tạo các bảng sẽ được xuất.Lưu câu trả lời này.right click the database that has the source table, select Tasks -> Export data. You will be able to set source and destination server and schema, select the tables you wish to copy and you can have the destination schema create the tables that will be exported. Save this answer.

Làm cách nào để sao chép dữ liệu bảng từ lược đồ này sang lược đồ khác trong SQL Server?

Bạn có thể sử dụng truy vấn này để sao chép lược đồ bảng và dữ liệu: Chọn * vào DestinationDB.DBO.TableName từ SourcedB.Select * into DestinationDB. dbo. tableName from SourceDB.

Làm cách nào để sao chép lược đồ trong MySQL?

Cơ sở dữ liệu sao chép MySQL..
Đầu tiên, hãy sử dụng câu lệnh CREATE DATABASE để tạo cơ sở dữ liệu mới ..
Thứ hai, lưu trữ dữ liệu vào một tệp SQL.....
Thứ ba, xuất tất cả các đối tượng cơ sở dữ liệu cùng với dữ liệu của nó để sao chép bằng công cụ MySQLDump và sau đó nhập tệp này vào cơ sở dữ liệu mới ..

Làm cách nào để di chuyển dữ liệu từ bảng này sang bảng khác trong MySQL?

Bạn có thể di chuyển các hàng từ bảng này sang bảng khác với sự trợ giúp của chèn vào câu lệnh select.INSERT INTO SELECT statement.

Bài Viết Liên Quan

Chủ Đề