自动递增主键

时间:2019-02-01 15:18:43

标签: 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 个答案:

答案 0 :(得分:0)

您不使用数据库标记问题。但是,没有数据库可以保证自动递增/串行/身份列始终仅递增“ 1”。

这种保证有很多开销。

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

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

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

有很多解决方法,但是它们很昂贵,通常是不必要的。