如何在不丢失数据的情况下自动增加此表?

时间:2011-06-12 11:02:44

标签: mysql sql database

我的实时数据库上有一张表,有几千条记录。

今天早上跟踪一个错误我发现表“id”列没有设置为auto_increment所以我有1000条id = 0的记录。

:(

mysql> explain feed_items;
+--------------+--------------+------+-----+---------+-------+
| Field        | Type         | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| id           | int(11)      | NO   |     | 0       |       |
| feed_id      | int(11)      | YES  | MUL | NULL    |       |
| title        | varchar(255) | YES  |     | NULL    |       |
| description  | text         | YES  |     | NULL    |       |
| item_link    | varchar(255) | NO   |     | NULL    |       |
| item_updated | datetime     | YES  |     | NULL    |       |
| item_id      | varchar(255) | YES  |     | NULL    |       |
| created_at   | datetime     | YES  |     | NULL    |       |
| updated_at   | datetime     | YES  |     | NULL    |       |
| is_hidden    | int(11)      | YES  |     | 0       |       |
+--------------+--------------+------+-----+---------+-------+

奇怪的是旧记录似乎有auto_incremented。所以我的一半记录都有预期的id,其中一半没有

我想要做的是将此列设置为auto_increment,然后运行执行以下操作的语句:

  • 获取所有feed_items,其中id为0,由created_at ASC
  • 排序
  • 对于这些项目,我想将id设置为上一项的id + 1

我对SQL不太热,但我不想破坏我的实时服务器上的数据。

任何人都可以提供建议吗?

1 个答案:

答案 0 :(得分:2)

取决于您的表的大小以及使其脱机的可能性,您只需创建具有相同字段架构的第二个表并插入选择您的数据...

INSERT INTO _YourSecondTableName_  (feed_id,title,description,item_link,item_updated,item_id,created_at,updated_at,is_hidden)  
SELECT feed_id,title,description,item_link,item_updated,item_id,created_at,updated_at,is_hidden  
FROM _YourFirstTableName_  
ORDER BY created_at ASC

然后您可以删除原始表并重命名新表...