AUTO_INCRMENT的标准化方式

Nov*_*tor 8 sql standards

有没有一种标准化的方法可以在 SQL 中创建一个带有自动增量列(我们称之为 ID)的表,以便我基本上可以在所有数据库中使用它?

\n

(例如,在 SQL-92 中标准化)\n如果是这样 - 怎么办?如果没有,为什么?我认为 auto_increment 是一个非常常用的属性,所以我认为标准化它非常重要\xe2\x80\xa6

\n

Nux*_*Nux 2

不,谢谢。MySQL 中有AUTO_INCREMENT,但例如在 MS SQL 中,这被称为IDENTITYPGSQL SERIAL。SQL 中的很多东西并没有真正标准化——而且大多数都在模式创建领域。

这是一团糟,但您可以使用 Hibernate/NHibernate 之类的东西来尝试使用单一代码库。

更新:几年后,一些DBMS 支持更标准的方式(例如 10.0 版的 PG SQL,所以从 2017 年 10 月开始):

  • GENERATED BY DEFAULT AS IDENTITY - 该值具有默认的自动增量,但您可以插入自己的增量。
  • GENERATED ALWAYS AS IDENTITY -- 禁止插入自己的值(在标准查询中,可能会被覆盖)

这应该适用于PG SQL 10+DB2Oracle

DROP TABLE IF EXISTS simple_test;
CREATE TABLE simple_test(
    s_id int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY
);
Run Code Online (Sandbox Code Playgroud)

但请注意,这在 Microsoft SQL Server 中不起作用(甚至在 MS SQL Server 2022 中也不起作用)。MSSQL 不支持生成的关键字。MySQL/MariaDb已生成列,但MariaDb不支持identity语法

所以,是的,10 年后的答案实际上是一样的——它仍然是一团糟,你可能应该使用一个框架来解决这个问题。