在表中创建仅包含自动生成的字段的行 - SQL

Gre*_*egD 2 sql db2

我有下表:

CREATE TABLE "MIGRATION"."VERSION"
(
ID BIGINT PRIMARY KEY NOT NULL GENERATED BY DEFAULT AS IDENTITY,
VERSION_DATE timestamp DEFAULT CURRENT TIMESTAMP NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

我想在该表中插入一个"新行"但由于所有内容都是自动生成的,我该怎么办呢?

INSERT INTO "MIGRATION"."VERSION" VALUES();
Run Code Online (Sandbox Code Playgroud)

不工作.必须这样做,不能改变.

Luk*_*der 6

SQL标准和大多数数据库支持以下DEFAULT VALUES子句:

INSERT INTO "MIGRATION"."VERSION" DEFAULT VALUES;
Run Code Online (Sandbox Code Playgroud)

这是支持的

  • CUBRID
  • 火鸟
  • H2
  • HSQLDB
  • 安格尔
  • PostgreSQL的
  • SQLite的
  • SQL Server
  • Sybase SQL Anywhere

如果不支持上述内容,您仍可以将此语句编写为变通方法.实际上,第一个由SQL标准指定为等同于第二个:

INSERT INTO "MIGRATION"."VERSION" (ID, VERSION_DATE) VALUES (DEFAULT, DEFAULT);
Run Code Online (Sandbox Code Playgroud)

这将适用于:

  • 访问
  • DB2
  • MariaDB的
  • MySQL的
  • 神谕

有关详细信息,请参阅此博客文章:

http://blog.jooq.org/2014/01/08/lesser-known-sql-features-default-values/