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());
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 生成器来生成合成身份。
反馈
您对此页面有任何反馈吗? 我们很乐意听取您的意见!