7

我的公司目前正在移动我们的数据库,将一组表从旧的 MySQL 实例转移到新的实例中。在这次迁移之前,我们已经做了一些开发,并且一些表的结构已经从原来的改变了(例如,列被删除了)。

所以目前我已经从旧数据库中转储了数据,现在正试图将它们重新插入到新表中。当然,当它尝试插入具有比表更多字段的行时,导入会失败。

仅将我需要的字段导入新表的最佳方法是什么(最好是可编写脚本的,因为我预见自己必须再执行几次)?

4

4 回答 4

3

首先,创建具有旧结构的新数据库,或在当前数据库中创建临时表。然后为每一行运行带有插入语句的脚本,但值必须是新结构中的那些字段。

insert into newTable select row1,row2 from tempTable
于 2009-09-10T03:49:09.110 回答
3

更新以下内容以适应:

SELECT 'INSERT INTO NEW_TABLE ... ('+ to.column +');'
  FROM OLD_TABLE ot

对于新数据库上的表,您需要一个 INSERT 语句,其中包含列列表。然后根据旧表中的值相应地填充值部分。在旧环境中运行,您将插入新环境的数据 - 只需将“n”粘贴到脚本中。

请注意,必须相应地处理数据类型 - 日期(包括时间),并且必须处理字符串,因为您正在处理文本。

于 2009-09-10T05:26:56.923 回答
3

使用最快的方式,在文件中加载数据:

-- 转储数据

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;

参考:

http://dev.mysql.com/doc/refman/5.6/en/insert-speed.html

http://dev.mysql.com/doc/refman/5.6/en/load-data.html

于 2014-03-24T16:27:16.230 回答
0

如果您使用的是强大的 MySQL 5.1,虽然在这种情况下可能有点矫枉过正,但解决方案是执行 xml mysqldump 并使用 XSLT 对其进行转换。不幸的是,5.0 不支持重新导入该 xml 文件,您需要 5.1、5.4 或 6.0

于 2009-09-10T03:47:23.383 回答