我希望在我的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 册,则执行以下操作:,如文档所述:https://gorm.io/docs/delete.html#Delete-with-primary-key,则删除第 3 册。db.Delete(&Books{}, 3)所以,如果我再做一个发现,我会得到这个:[ { id: 1, name: "name1", author: 123, }, { id: 2, name: "name2", author: 123, },]当我再创建一本书时,问题就出来了,因为它将有3个作为ID。我希望新创建的书的ID为4,而不是3,所以我将有ID为1,2和4。“查找我希望”的输出是:[ { 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:"-"`}然后,当我进行查找时,我会过滤已删除的=真实...但这会占用我的数据库文件太多空间,所以我需要另一种解决方案。
2 回答
![?](http://img1.sycdn.imooc.com/5458471300017f3702200220-100-100.jpg)
元芳怎么了
TA贡献1798条经验 获得超7个赞
这是因为数据库在book表中的id上生成一个新的序列生成器,每当您添加一本书时,它都会从序列器中获取当前值,将其添加到行中并为下一个值递增。
无法返回并填写从行中删除的 id。这是一件不用担心的事情。在向用户显示时,不要显示错误排列的数字,只显示1,2,3,并且为了执行更新,删除等操作,请使用此ID。
或者,您可以使用 UUID 而不是整数
![?](http://img1.sycdn.imooc.com/54585094000184e602200220-100-100.jpg)
墨色风雨
TA贡献1853条经验 获得超6个赞
考虑到你的策略结构是:
type Books struct {
gorm.Model
Name string `json:"name"`
Author uint `json:"author"`
}
哪里有戈尔姆。模型为您提供字段:ID、创建时、更新时、已删除
当您执行时,它将执行软删除,这意味着 DeleteAt 将从 更新为 .这不会从 DB 中物理删除记录。您仍然可以通过以下方式获取此记录:db.Delete(&Books, 3)nulltimestampdb.Unscoped().Find(&Books)
要永久删除该记录:db.Unscoped().Delete(&Books,3)
我猜(我还没有尝试过这个!)在永久删除记录后,您的ID序列应该会到位。
- 2 回答
- 0 关注
- 74 浏览
添加回答
举报
0/150
提交
取消