我想将表的内容从旧数据库(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;
有没有一种方法可以从表结构不同的另一个数据库的另一个表中复制一个表?
答案 0 :(得分:1)
那呢:
INSERT new_db.table1
SELECT id, title, criteria, threshold, code, parent_id
FROM old_db.table1;
然后, old_db.table1 的输出具有正确的顺序, new_db.table1