【问题标题】:Autoincrement ID java db自动增量 ID java db
【发布时间】:2015-04-07 23:27:52
【问题描述】:

我有这样的问题。

我的数据库中有 10 个学生。 当我从 ID 为 2 的数据库学生中删除并且我想添加一个 ID 为 2 的新学生时,它将替换之前删除的学生,它得到 ID 11,没有 2。

我使用脚本

CREATE TABLE student (
    id_student INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), ......

我使用 Java DB。

有没有什么脚本可以解决我的问题?

【问题讨论】:

  • 重新使用标识列是一个非常糟糕的主意。假设学生 2 得了 A,你用一个新学生替换他/她,然后那个 id 为 2 的学生突然得了一个 A。你能发布代码,你是如何在你的数据库中插入新学生“2”的吗?

标签: java database netbeans derby


【解决方案1】:

既然您说“始终生成”,Derby 将始终选择一个新的身份值。

如果您说“默认生成”,那么 Derby 只会在您不提供时选择一个新的标识值。

在这种情况下(“GENERATED BY DEFAULT”),您可以指定值为 2 的新记录,只要没有值为 2 的现有记录,您的新记录就会被接受。

更多信息在这里:http://db.apache.org/derby/docs/10.11/ref/rrefsqlj37836.html

【讨论】:

    【解决方案2】:

    通常,通过设置标志而不是删除整个记录来软删除数据库中的记录是一种很好的做法,并且最好使用自动增量来增加关联的 ID。 您可以通过只计算设置了标志的记录来获得活动的记录数。 希望回答对你有帮助。

    【讨论】:

      【解决方案3】:

      花了很长时间才弄清楚这一点。在 Netbeans 中,您可以运行此脚本来添加表:

      CREATE TABLE MYTABLE
      (
         "ID" INT not null primary key
              GENERATED ALWAYS AS IDENTITY
              (START WITH 1, INCREMENT BY 1),
         "NAME" VARCHAR(99)
      );
      

      注意大写。如果 ID 和 NAME 不是大写,这不起作用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-09
        • 1970-01-01
        • 2012-09-12
        • 2018-04-11
        • 1970-01-01
        • 1970-01-01
        • 2015-04-27
        • 2011-01-01
        相关资源
        最近更新 更多