可用版本:Dev (3.21) | 最新版 (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11

IDENTITY 值

适用于 ✅ 开源版   ✅ 专业版   ✅ 企业版

许多数据库支持 IDENTITY 值或 SEQUENCE 生成的 键值的概念。这反映在 JDBC 的 getGeneratedKeys() 方法中。 jOOQ 抽象了此方法的使用,因为许多数据库和 JDBC 驱动程序在生成的键方面表现不同。 假设有以下 SQL Server BOOK 表

CREATE TABLE book (
  ID INTEGER IDENTITY(1,1) NOT NULL,

  -- [...]

  CONSTRAINT pk_book PRIMARY KEY (id)
)

如果您正在使用 jOOQ 的 代码生成器,则上面的表将生成一个带有 IDENTITY 列的 org.jooq.UpdatableRecord。 此信息由 jOOQ 在内部使用,以便在调用 store() 后更新 ID

BookRecord book = create.newRecord(BOOK);
book.setTitle("1984");
book.store();

// The generated ID value is fetched after the above INSERT statement
System.out.println(book.getId());

数据库兼容性

DB2, Derby, HSQLDB, Ingres

这些 SQL 方言非常整洁地实现了该标准。

id INTEGER GENERATED BY DEFAULT AS IDENTITY
id INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1)

H2, MySQL, Postgres, SQL Server, Sybase ASE, Sybase SQL Anywhere

这些 SQL 方言实现了身份,但 DDL 语法不符合标准

-- H2 mimicks MySQL's and SQL Server's syntax
ID INTEGER IDENTITY(1,1)
ID INTEGER AUTO_INCREMENT
-- MySQL and SQLite
ID INTEGER NOT NULL AUTO_INCREMENT

-- Postgres serials implicitly create a sequence
-- Postgres also allows for selecting from custom sequences
-- That way, sequences can be shared among tables
id SERIAL NOT NULL

-- SQL Server
ID INTEGER IDENTITY(1,1) NOT NULL
-- Sybase ASE
id INTEGER IDENTITY NOT NULL
-- Sybase SQL Anywhere
id INTEGER NOT NULL IDENTITY

对于 IDENTITY 列仅被模拟的数据库(例如 12c 之前的 Oracle),还可以配置 jOOQ 生成器来生成合成身份

反馈

您对此页面有任何反馈吗? 我们很乐意听取您的意见!

The jOOQ Logo