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:
Code language: SQL [Structured Query Language] [sql]
CREATE TABLE new_table SELECT col, col2, col3 FROM existing_table;
Đầ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:
Code language: SQL [Structured Query Language] [sql]
CREATE TABLE new_table SELECT col1, col2, col3 FROM existing_table WHERE conditions;
Đ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:Code language: SQL [Structured Query Language] [sql]
CREATE TABLE new_table SELECT col1, col2, col3 FROM existing_table WHERE conditions;
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:
Code language: SQL [Structured Query Language] [sql]
CREATE TABLE IF NOT EXISTS new_table LIKE existing_table; INSERT new_table SELECT * FROM existing_table;
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.Code language: SQL [Structured Query Language] [sql]
CREATE TABLE IF NOT EXISTS offices_bk SELECT * FROM offices;
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: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 đềCode language: SQL [Structured Query Language] [sql]
SELECT * FROM offices_bk;
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:
Code language: SQL [Structured Query Language] [sql]
CREATE TABLE IF NOT EXISTS offices_usa SELECT * FROM offices WHERE country = 'USA'
Câu lệnh sau đây nhận được tất cả dữ liệu từ bảng
0.Code language: SQL [Structured Query Language] [sql]
CREATE TABLE new_table SELECT col, col2, col3 FROM existing_table;
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
3 bằng cách sao chép cấu trúc của nó từ bảngCode language: SQL [Structured Query Language] [sql]
CREATE TABLE new_table SELECT col, col2, col3 FROM existing_table;
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
6.Code language: SQL [Structured Query Language] [sql]
CREATE TABLE new_table SELECT col, col2, col3 FROM existing_table;
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?