插入mysql extra列导致错误

时间:2014-10-20 21:25:57

标签: php mysql sql

基本上我有一个包含2000万行和5列(字段)的表,当我执行mysql转储时,我想将行导入另一个有6列的表,它返回错误,因为列不一样

INSERT INTO table2 VALUES (value1, value2, value3, value4, value5)

我想插入第6列的所有行,这样我就不会收到错误。 我无法真正编辑.sql转储其2gb。有办法吗? 请记住目标表(要转储数据的位置)已包含大量数据(800万行),因此更改表将永远需要 有什么建议 ?

3 个答案:

答案 0 :(得分:1)

您需要指定要插入的行

INSERT INTO table2(col1,col2,col3,col4,col5)VALUES(value1,value2,value3,value4,value5)

答案 1 :(得分:1)

有几种方法可以做到这一点。

首先,有办法编辑2GB文件(取决于您的操作系统)。 对于Windows,我有EmEditor的良好经验,可以处理Search&替换大文件的操作。

其次,您可以分两个阶段完成: 1.将转储文件打开到包含5列的表中,例如temp。 2.从该表复制到目标表。

INSERT INTO table2 (col1, col2, col3, col4, col5) 
SELECT (col1, col2, col3, col4, col5) 
FROM temp;

这假设table2中的col6(没有数据)具有默认值。 否则:

INSERT INTO table2 (col1, col2, col3, col4, col5, col6) 
SELECT (col1, col2, col3, col4, col5, 'anyDefaultValue') 
FROM temp;

答案 2 :(得分:1)

以下是您的选择:

  1. 在插入中指定列名,不包括第6列(对于插入的所有行,将第6列设置为null,以使列可以为空)
  2. 将null / default值添加到要插入第6列的查询的VALUES
  3. 修改表格并暂时删除第6列,以便插入然后再添加列。这将丢失第6列中的任何现有值
  4. 插入与5列表具有相同结构的不同表(或相同的表名和不同的数据库),然后运行查询以插入到6列表中。一个简单的查询,例如:INSERT INTO newTable SELECT col1, col2, col3, col4, col5, "default value" FROM newTableCopy
  5. 我建议选项4,但确实需要额外的步骤。