java - 自增主键

标签 java sql eclipse

<分区>

我对自动增量有疑问,同时数字发生了变化并且没有保持我定义的增量。 附上表格的代码和图片。

    // Table 3 creation (Coupon)
    try {
    java.sql.Statement stmt3 = conn.createStatement();
    sql = "create table Coupon("
            + "ID bigint not null primary key generated always as identity(start with 1, increment by 1), "
            + "TITLE varchar(30) not null, " 
            + "START_DATE DATE not null, " 
            + "END_DATE DATE not null,"
            + "AMOUNT INTEGER not null," 
            + "TYPE varchar(10) not null," 
            + "MESSAGE varchar(30) not null,"
            + "PRICE double not null,"
            + "IMAGE varchar(200) not null)";
    stmt3.executeUpdate(sql);
    System.out.println("success:" + sql);
    } catch (SQLException e) {
        System.out.println(e.getMessage());
    }

enter image description here

最佳答案

您不使用数据库标记问题。但是,没有数据库保证自动递增/序列/标识列将始终只递增“1”。

这样的保证有很多开销。

相反,保证是当列是唯一的时,下一个值将大于前一个值,并且差异将是增量的倍数。

无间隙增量需要大量工作的一些原因:

  • 删除记录会删除值。
  • 回滚事务可能会“用完”值。
  • 并行数据库可以在不同节点上缓存值。

有很多方法可以解决这个问题,但它们很昂贵而且通常是不必要的。

关于java - 自增主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54482295/

相关文章:

MMMYY 格式的 SQL 日期

c# - 来自存储过程的模式

java - 运行应用程序时 eclipse 挂起(应用程序运行正常,eclipse 挂起)

java - 使用 GlassFish Server 时如何纠正模块部署错误?

java - 如果在selenium java中等待时间到期之前找到一个元素,如何单击该元素?

php - 显示组是否可以访问某些表单

android - Spinner 的提示未显示项目

java - Android - 在内部存储上保存 Int 错误

java - 获取辅助监视器的位置。 (小学的右侧或/左侧)

android - import cz.msebera.android.httpclient.conn.ssl.SSLSocketFactory无法解析