将SQL表复制到具有更多列的新表中

问题描述:

我试图挽救已经变质的Gitorious安装。我已经使用mysqldump转储SQL表,但现在我遇到了Gitorious的新版本在几个地方更改其SQL模式的问题。将SQL表复制到具有更多列的新表中

尤其是旧版本有一个表taggings,它看起来像

mysql> describe taggings; 
+---------------+--------------+------+-----+---------+----------------+ 
| Field   | Type   | Null | Key | Default | Extra   | 
+---------------+--------------+------+-----+---------+----------------+ 
| id   | int(11)  | NO | PRI | NULL | auto_increment | 
| tag_id  | int(11)  | YES | MUL | NULL |    | 
| taggable_id | int(11)  | YES | MUL | NULL |    | 
| taggable_type | varchar(255) | YES |  | NULL |    | 
| created_at | datetime  | YES |  | NULL |    | 
+---------------+--------------+------+-----+---------+----------------+ 
5 rows in set (0.00 sec) 

在新版本中,这个表已经得到了三个额外的列:

mysql> describe taggings; 
+---------------+--------------+------+-----+---------+----------------+ 
| Field   | Type   | Null | Key | Default | Extra   | 
+---------------+--------------+------+-----+---------+----------------+ 
| id   | int(11)  | NO | PRI | NULL | auto_increment | 
| tag_id  | int(11)  | YES | MUL | NULL |    | 
| taggable_id | int(11)  | YES | MUL | NULL |    | 
| taggable_type | varchar(255) | YES |  | NULL |    | 
| created_at | datetime  | YES |  | NULL |    | 
| tagger_id  | int(11)  | YES |  | NULL |    | 
| tagger_type | varchar(255) | YES |  | NULL |    | 
| context  | varchar(255) | YES |  | NULL |    | 
+---------------+--------------+------+-----+---------+----------------+ 
8 rows in set (0.00 sec) 

使

grep 'INSERT INTO `taggings`' inuse.sql | mysql -uroot gitorious_production 

不合格

ERROR 1136 (21S01) at line 1: Column count doesn't match value count at row 1 

有没有简单的方法告诉M​​ySQL最后两个字段应该保留其默认值,NULL

(新Gitorious' taggings表开始是空的。)

作为一般的最佳实践,您应该提到在你插入的字段名称:

Insert into taggings (id,tag_id,taggable_id,taggable_type,created_at) values (...your values...) 
+0

工程就像一个魅力!将在10分钟内接受答案。 – 2013-05-03 13:56:43

重新命名新表作为的Tagging taggings_old

创建一个名为表用的Tagging您的旧模式

插入您的数据

添加新列到您的表格标签