如何递增 id 字段的所有存储值

Posted

技术标签:

【中文标题】如何递增 id 字段的所有存储值【英文标题】:How do I increment all of the stored values of an id field 【发布时间】:2011-10-18 16:51:11 【问题描述】:

我有一个名为blocks 的表,主键为blockid。数据以 0 的 blockid 开始。现在,问题是,在另一个表中,blockid's 从 1 开始。所以,我需要让 blocks 中的所有 blockid's 递增1. 我该怎么做? 有没有一个方便的函数可以做到这一点,还是我们需要写一个?或者,我是否必须手动更改所有内容(这不会花费太长时间,但是有超过 100 行,所以,如果我不必这样做,我更喜欢它)。

感谢一切。

【问题讨论】:

这个问题有一些替代解决方案。见:***.com/questions/3439110/… 【参考方案1】:

假设 blockid 不是您的 OP 的主键,一个快速而肮脏的方法可能是依次运行两个更新语句:

UPDATE blocks
SET blockid = blockid + 1001

UPDATE blocks
SET blockid = blockid - 1000

在第一次 UPDATE 中,您将所有 blockid 增加 1001。1000 只是一个任意大的数字,可以让您避免与其他 id 冲突(假设您有唯一性约束。)

在第二个语句中,您减 1000,使所有 id 加 1,同时避免冲突。

如果 1000 不是一个足够大的数字,您可以增加它并使其任意大。只需确保在第二次更新中匹配数字和数学即可。

【讨论】:

是的,效果很好,感谢您提供的简单的解决方案。

以上是关于如何递增 id 字段的所有存储值的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 迁移 - 如何将 `id` 字段更改为主要字段并稍后自动递增

在oracle 怎样设置自动递增的的字段,也就是设置自动递增的ID 主键

在存储的 CLOB 中包含自动递增值

sqlserver字段如何自动更新

如何才能让mysql自动递增的字段重新从1开始呢

如何编写基于 Auto 递增值的 Oracle 触发器?