2013-05-03 77 views
-1

我試圖挽救已經變質的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表開始是空的。)

回答

1

作爲一般的最佳實踐,您應該提到在你插入的字段名稱:

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

工程就像一個魅力!將在10分鐘內接受答案。 – 2013-05-03 13:56:43

0

重新命名新表作爲的Tagging taggings_old

創建一個名爲表用的Tagging您的舊模式

插入您的數據

添加新列到您的表格標籤

相關問題