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字段?的主要内容,如果未能解决你的问题,请参考以下文章