【问题标题】:Create new table entry with new id使用新 id 创建新表条目
【发布时间】:2013-02-25 17:43:22
【问题描述】:

问题

我有一个数据表,其中包含一个整数类型的 ID 列(这也是主键)。

当向表中添加新数据条目时,它应该获得一个新 ID,而插入对象的应用程序不知道该 ID,但它应该由数据库提供。例如,ID 应分配为 0、1、2、...

假设我有新条目的所有其他数据,我将如何插入?通常:

insert into T values(123, 'data');

但现在我不知道该放什么而不是 123 - 你会在数据库中创建某种全局变量NEXTID 来提供ID 并在每次插入T 之前查询/更新这个值吗?

问题

  1. 如何处理此类问题?最好使用并发保存的解决方案。
  2. 如何使用 Java/myBatis 实现这一点?我有一个与表结构对应的 Java 类,应该将一个新对象添加到数据库中,自动获取一个新 ID。

更新

我搜索的是自动增量。

  • 是否有标准的 SQL 方式(独立于数据库)将列声明为自增?我正在使用 Apache Derby,建议使用 GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1) here
  • 插入到包含自增列的表是什么样子的?
  • 当可以同时访问数据库时,在插入后获取创建的自动增量值的最佳方法是什么?

我会接受一个包含声明和插入的解释和 SQL 指令的答案:)

【问题讨论】:

  • 您需要将该列声明为自动增量,并且不要为“id”字段提供任何值。该值将自动生成。
  • 此外,明确指定要填充的列名绝不是一个坏主意:INSERT INTO tablename (columnname1, columnname2, ...) VALUES (value1, value2, ...)。当您需要省略自增列时,在某些 SQL 产品中尤为重要。
  • @AshReva 这不是重复的,但您链接的问题是对可能解决方案的良好支持。谢谢!

标签: java sql mybatis


【解决方案1】:

如果您使用的是 sqlserver,制作标识类型的列将解决类似这样的目的 .

  ALTER TABLE [dbo].[T] ADD [Column1] INT identity (1, 1)

对于像 oracle 这样的其他人,您可以使用简单的数据库序列。

【讨论】:

    【解决方案2】:

    在 MySQL 中你可以使用

    ALTER TABLE table_name ADD id INT AUTO_INCREMENT;
    

    这会自动增加 id 列,您不必在插入时给出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      相关资源
      最近更新 更多