我有一些对象将被创建并输入到数据库中。除了自动递增主键之外,不能保证它们的任何字段都是唯一的。我希望能够稍后在程序中使用它们的主键访问这些对象。
从数据库中获取此 key 的最佳方法是什么?我可以想到两种方法来将对象的数据添加到数据库后获取主键:
- 查找最大主键,因为这是最近的主键 添加。
- 删除当前对象,将数据库中的数据与程序中的数据进行比较,然后根据程序中不包含的行创建一个新对象。
这两个看起来都容易出错并且很糟糕,我想知道是否有更标准的方法来做到这一点。
最佳答案
大多数数据库都有办法访问最后生成的ID,例如SQL Server。
CREATE TABLE [SomeTable] (
ID INT NOT NULL IDENTITY(1,1),
FieldOne VARCHAR(MAX) NOT NULL,
PRIMARY KEY(ID)
)
INSERT INTO [SomeTable](FieldOne) VALUES('a')
SELECT scope_identity() -- returns 1
INSERT INTO [SomeTable](FieldOne) VALUES('b')
SELECT scope_identity() -- returns 2
这样做的优点是对于多个用户/交易来说是安全的。
关于猜测下一个 ID 是什么的第一个建议在这方面并不安全。
如果您有任何引用完整性或存在任何触发器,您的第二个建议将会造成严重破坏。
关于java - 提取自增主键的标准做法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20769536/