Java和mySQL DB中的自动增量ID字段?

Posted

技术标签:

【中文标题】Java和mySQL DB中的自动增量ID字段?【英文标题】:Auto Increment ID field both in Java and mySQL DB? 【发布时间】:2021-06-13 14:25:41 【问题描述】:

如果一个java对象有一个自增的ID字段,数据库表的字段也应该是自增的吗?

例如

public class Company 
    private static int countID = 0;
    private int companyID;
    private String name;
    private String email;
    private String password;
    private List<Coupon> couponsList;

    public Company(int companyID, String name, String email, String password, List<Coupon> couponsList) 
        this.companyID = companyID+=1;
        this.name = name;
        this.email = email;
        this.password = password;
        this.couponsList = couponsList;
    

可以看到companyID字段是自动生成的。

我已经在我的 SQL 服务器中创建了这个表

CREATE TABLE `companies` (
  `ID` int NOT NULL AUTO_INCREMENT,
  `NAME` varchar(200) DEFAULT NULL,
  `EMAIL` varchar(200) DEFAULT NULL,
  `PASSWORD` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`ID`)

我应该如何将 Java 字段 (commpanID) 连接到 sql 字段 (ID)?

【问题讨论】:

【参考方案1】:

没有。它们是不同的东西。 mysql 中的自动递增列不保证是无间隙的。出现差距可能有多种原因。最常见的是:

并发事务。 删除。

听起来您在 Java 中有一个唯一标识符,它要么是冗余的,要么是数据项。如果是后者,则将其添加为附加列。

不过,您可能需要重新考虑您的设计,因此给定记录只有一个自动递增值。我建议在数据库中使用它,因为无论插入到数据库中的方式如何,它都适用。

【讨论】:

谢谢。那么在创建对象并将其插入数据库时​​,我应该如何处理 C`TOR 中的 ID 字段?我如何将对象的 ID 字段更新为数据库中的 ID 字段? @丹尼尔。 . .不,你只是让数据库计算它。如果您在应用程序中需要它,请使用LAST_INSERTED_ID()【参考方案2】:

在数据库中创建唯一的 id 字段不是强制性的。您可以改为更改表格,例如-->

CREATE TABLE companies (
  'COMPANYID' int NOT NULL,
  `NAME` varchar(200) DEFAULT NULL,
  `EMAIL` varchar(200) DEFAULT NULL,
  `PASSWORD` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`ID`)

由于您将相同的值自动递增两次,因此会产生一些问题。 您的 ID 列将是这样的-->

Id|
---
2 |
---
4 |
--
6 |
--
8 |

它将值增加两次

【讨论】:

以上是关于Java和mySQL DB中的自动增量ID字段?的主要内容,如果未能解决你的问题,请参考以下文章

什么可能导致自动增量主键字段(mysql)上的重复 ID?

为mysql表设置自动增量初始值

如何更改 MySQL 中的自动增量计数器?

MYSQL 自动增量按字段分类

基于外键的增量字段(JPA、Hibernate、Oracle DB)

以编程方式获取自动增量主键列