【发布时间】:2021-10-14 10:57:32
【问题描述】:
我想在我的 gorm 数据库中拥有唯一且自动递增的 id,即使来自之前创建和删除的条目也是如此。
我的数据库中有这个模型:
type Books struct {
ID uint `json:"-" gorm:"autoIncrement"`
Name string `json:"name"`
Author uint `json:"author"`
}
假设我创建了 3 本书,如果我运行 db.Find(&Books{}),输出将是这样的:
[
{
id: 1,
name: "name1",
author: 123,
},
{
id: 2,
name: "name2",
author: 123,
},
{
id: 3,
name: "name3",
author: 123,
},
]
如果我按 ID 删除书 3,执行以下操作:db.Delete(&Books{}, 3),如文档所述:https://gorm.io/docs/delete.html#Delete-with-primary-key,则删除书 3。
所以,如果我再次查找,我会得到这个:
[
{
id: 1,
name: "name1",
author: 123,
},
{
id: 2,
name: "name2",
author: 123,
},
]
当我再创建一本书时,问题就出现了,因为它的 ID 为 3。
我希望新创建的书的 ID 为 4,而不是 3,所以我的 ID 为 1、2 和 4。
我想要的 Find 的输出是:
[
{
id: 1,
name: "name1",
author: 123,
},
{
id: 2,
name: "name2",
author: 123,
},
{
id: 4,
name: "name4",
author: 123,
},
]
所以这基本上是我的问题。
我也想过做类似的事情:
type Books struct {
ID uint `json:"-" gorm:"autoIncrement"`
Name string `json:"name"`
Author uint `json:"author"`
Deleted bool `json:"-"`
}
然后,当我进行查找时,我会过滤 deleted=true 的...但这会占用我的数据库文件太多空间,所以我想要另一个解决方案。
【问题讨论】:
-
不是GORM的,是从数据库来的!
-
你用的是什么数据库?
-
@mkopriva 我正在使用 sqlite