mysql java如何递增
使用 AUTO_INCREMENT 实现自增主键
在 MySQL 中创建表时,可以通过 AUTO_INCREMENT 属性设置自增主键。例如:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL
);
Java 中插入数据并获取自增 ID
使用 JDBC 插入数据时,可以通过 Statement.RETURN_GENERATED_KEYS 获取自动生成的主键值:

String sql = "INSERT INTO users (username, email) VALUES (?, ?)";
try (PreparedStatement pstmt = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
pstmt.setString(1, "testuser");
pstmt.setString(2, "test@example.com");
pstmt.executeUpdate();
try (ResultSet rs = pstmt.getGeneratedKeys()) {
if (rs.next()) {
long id = rs.getLong(1);
System.out.println("Generated ID: " + id);
}
}
}
使用 JPA/Hibernate 实现自增
在实体类中使用 @GeneratedValue 注解:

@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String email;
// getters and setters
}
手动实现递增序列
如果需要手动控制递增序列,可以创建一个序列表:
CREATE TABLE sequences (
name VARCHAR(50) PRIMARY KEY,
value BIGINT NOT NULL
);
Java 中实现递增逻辑:
public synchronized long getNextSequence(String sequenceName) throws SQLException {
// 先查询当前值
String selectSql = "SELECT value FROM sequences WHERE name = ? FOR UPDATE";
try (PreparedStatement selectStmt = connection.prepareStatement(selectSql)) {
selectStmt.setString(1, sequenceName);
ResultSet rs = selectStmt.executeQuery();
if (rs.next()) {
long currentValue = rs.getLong(1);
// 更新为下一个值
String updateSql = "UPDATE sequences SET value = ? WHERE name = ?";
try (PreparedStatement updateStmt = connection.prepareStatement(updateSql)) {
updateStmt.setLong(1, currentValue + 1);
updateStmt.setString(2, sequenceName);
updateStmt.executeUpdate();
}
return currentValue + 1;
} else {
// 插入初始值
String insertSql = "INSERT INTO sequences (name, value) VALUES (?, 1)";
try (PreparedStatement insertStmt = connection.prepareStatement(insertSql)) {
insertStmt.setString(1, sequenceName);
insertStmt.executeUpdate();
}
return 1;
}
}
}






