【发布时间】:2013-02-25 17:43:22
【问题描述】:
问题
我有一个数据表,其中包含一个整数类型的 ID 列(这也是主键)。
当向表中添加新数据条目时,它应该获得一个新 ID,而插入对象的应用程序不知道该 ID,但它应该由数据库提供。例如,ID 应分配为 0、1、2、...
假设我有新条目的所有其他数据,我将如何插入?通常:
insert into T values(123, 'data');
但现在我不知道该放什么而不是 123
- 你会在数据库中创建某种全局变量NEXTID 来提供ID 并在每次插入T 之前查询/更新这个值吗?
问题
- 如何处理此类问题?最好使用并发保存的解决方案。
- 如何使用 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 这不是重复的,但您链接的问题是对可能解决方案的良好支持。谢谢!