java - 提取自增主键的标准做法是什么?

标签 java mysql sql

我有一些对象将被创建并输入到数据库中。除了自动递增主键之外,不能保证它们的任何字段都是唯一的。我希望能够稍后在程序中使用它们的主键访问这些对象。

从数据库中获取此 key 的最佳方法是什么?我可以想到两种方法来将对象的数据添加到数据库后获取主键:

  1. 查找最大主键,因为这是最近的主键 添加。
  2. 删除当前对象,将数据库中的数据与程序中的数据进行比较,然后根据程序中不包含的行创建一个新对象。

这两个看起来都容易出错并且很糟糕,我想知道是否有更标准的方法来做到这一点。

最佳答案

大多数数据库都有办法访问最后生成的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/

相关文章:

java - 如何使用 Hibernate 通过 id 添加属性类?

Java 问题 "UnsatisfiedLinkError"

java - 嵌入了 EditText 的 Android 单选按钮组

javascript - 使用 GraalVM 在 Java 中评估 JavaScript

mysql - 从多个表中添加总计

php - 准备好的语句并检索选定的值

mysql - 使用一个查询从 MySQL 中的多个表中删除

python - 树莓派发送数据到XAMPP数据库

mysql - 使用子查询中的 GROUP BY 查询获取行数

SQL - 与同一张表左连接,使用 ON 语句匹配左右表时出现问题