将MySQL表从一个数据库复制到另一个表结构不同的数据库

时间:2019-06-17 06:00:18

标签: mysql

我想将表的内容从旧数据库(old_db)复制到新数据库(new_db)。 new_db.table1的结构已经设置,但是为空。

SHOW COLUMNS FROM old_db.table1;
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| id        | int(11)     | NO   | PRI | NULL    | auto_increment |
| title     | longtext    | NO   |     | NULL    |                |
| criteria  | varchar(30) | NO   |     | NULL    |                |
| threshold | smallint(6) | YES  |     | NULL    |                |
| parent_id | int(11)     | YES  | MUL | NULL    |                |
| code      | varchar(50) | NO   | UNI | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+

SHOW COLUMNS FROM new_db.table1;
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| id        | int(11)     | NO   | PRI | NULL    | auto_increment |
| title     | longtext    | NO   |     | NULL    |                |
| criteria  | varchar(30) | NO   |     | NULL    |                |
| threshold | smallint(6) | YES  |     | NULL    |                |
| code      | varchar(50) | NO   | UNI | NULL    |                |
| parent_id | int(11)     | YES  | MUL | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+

当我跑步时:

INSERT new_db.table1 SELECT * FROM old_db.table1;

我遇到以下错误。

ERROR 1048 (23000): Column 'code' cannot be null

我意识到由于列的排序,它试图将old_db.parent_id复制到new_db.code

我无法删除new_db.table1

DROP TABLE new_db.table1;

因为它已连接到new_db中的另一个表:

ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails

可能的解决方案是(未尝试)

SET FOREIGN_KEY_CHECKS=0;
ALTER TABLE new_db.table1 MODIFY code varchar(50) NULL;
INSERT new_db.table1 SELECT * FROM old_db.table1;
UPDATE new_db.table1, old_db.table1
  SET new_db.table1.code = old_db.table1.code
  SET new_db.table1.parent_id = old_db.table1.parent_id
  where new_db.table1.id = old_db.table1.id;
ALTER TABLE new_db.table1 MODIFY code varchar(50) NOT NULL;
SET FOREIGN_KEY_CHECKS=1;

有没有一种方法可以从表结构不同的另一个数据库的另一个表中复制一个表?

1 个答案:

答案 0 :(得分:1)

那呢:

INSERT new_db.table1 
SELECT id, title, criteria, threshold, code, parent_id 
FROM old_db.table1;

然后, old_db.table1 的输出具有正确的顺序, new_db.table1