0

我正在尝试挽救一个坏掉的Gitorious安装。我已经使用 转储了 SQL 表mysqldump,但现在我遇到了新版本的 Gitorious 在几个地方更改了其 SQL 架构的问题。

特别是,旧版本有一个 table 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

有没有一种简单的方法来告诉 MySQL 最后两个字段应该保留它们的默认值NULL

(新的 Gitorioustaggings桌子一开始是空的。)

4

2 回答 2

1

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

Insert into taggings (id,tag_id,taggable_id,taggable_type,created_at) values (...your values...)
于 2013-05-03T13:54:33.733 回答
0

将新表标记重命名为 taggings_old

使用旧架构创建一个名为 taggings 的表

插入您的数据

将新列添加到表标记中

于 2013-05-03T13:56:07.353 回答