我的公司目前正在移动我们的数据库,将一组表从旧的MySQL实例转移到新的MySQL实例中。我们在迁移之前已经完成了一些开发,并且一些表的结构已经从原始表中进行了更改(例如,删除了列)。
所以目前我已经从旧数据库中转储数据,现在正尝试将它们重新插入到新表中。当然,导入borks时,它试图插入的字段比表中的字段多。
最好的方式是什么(最好是可编写脚本的,因为我预见自己要多做几次)才能将我需要的字段导入到新表中?
答案 0 :(得分:3)
更新以下内容以适应:
SELECT 'INSERT INTO NEW_TABLE ... ('+ to.column +');'
FROM OLD_TABLE ot
您需要一个包含列列表的新数据库上的表的INSERT语句。然后根据旧表中的值相应地填充值部分。在旧环境中运行,您将获得包含新环境数据的插入内容 - 只需将'n'paste复制到脚本中。
请注意,必须相应地处理数据类型 - 日期(包括时间),并且必须处理字符串,因为您正在处理文本。
答案 1 :(得分:3)
使用最快的方式,加载数据infile:
- 转储数据
SELECT * INTO OUTFILE 'mybigtable.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM mybigtable
- 加载数据
LOAD DATA LOCAL INFILE 'mybigtable.csv'
INTO TABLE mynewbigtable
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'
(@col1,@col2,@col3,@col4) set name=@col4,id=@col2;
参考:
答案 2 :(得分:2)
首先,使用旧结构或当前数据库中的临时表创建新数据库。然后使用每行的insert语句运行脚本,但是值必须只是那些新结构的字段。
insert into newTable select row1,row2 from tempTable
答案 3 :(得分:0)
如果你正在使用MySQL 5.1,一个强大的,虽然可能在这种情况下过度杀戮,解决方案是做一个xml mysqldump并使用XSLT来转换它。不幸的是,5.0中不支持重新导入该xml文件,您需要5.1,5.4或6.0