问题描述
|
我的活动数据库中有一个表,其中包含数千条记录。
今天早上跟踪一个错误,我发现表\“ id \”列未设置为auto_increment,所以我有1000条ID = 0的记录。
:(
MysqL>解释Feed_items;
+ -------------- + -------------- + ------ + ----- + ------ --- + ------- +
|领域|类型空|关键默认值|额外|
+ -------------- + -------------- + ------ + ----- + ------ --- + ------- +
| id | int(11)|否| | 0 | |
| Feed_id | int(11)|是的MUL | NULL | |
|标题| varchar(255)|是的| NULL | |
|描述|文字|是的| NULL | |
| item_link | varchar(255)|否| | NULL | |
| item_updated |日期时间|是的| NULL | |
| item_id | varchar(255)|是的| NULL | |
| created_at |日期时间|是的| NULL | |
| Updated_at |日期时间|是的| NULL | |
| is_hidden | int(11)|是的| 0 | |
+ -------------- + -------------- + ------ + ----- + ------ --- + ------- +
奇怪的是,较旧的记录似乎已自动递增。因此,我的记录中有一半具有预期的ID,其中一半没有
我要做的是将此列设置为auto_increment,然后运行执行以下操作的语句:
接受id为0的所有Feed_items,由created_at ASC排序
对于这些项目,我想将其ID设置为上一个项目的ID + 1
我对sql不太热衷,也不想破坏实时服务器上的数据。
有人可以建议吗?
解决方法
根据表的大小以及使其脱机的可能性,您可以简单地创建具有相同字段模式的第二张表并插入选择数据...
INSERT INTO _YourSecondTableName_ (feed_id,title,description,item_link,item_updated,item_id,created_at,updated_at,is_hidden)
SELECT feed_id,is_hidden
FROM _YourFirstTableName_
ORDER BY created_at ASC
然后可以删除原始表并重命名新表...