是否有与实现无关的方式让 SQL DB 提供 UUID?

Posted

技术标签:

【中文标题】是否有与实现无关的方式让 SQL DB 提供 UUID?【英文标题】:Is there implementation-agnostic way of having SQL DB provide UUIDs? 【发布时间】:2014-01-08 14:32:51 【问题描述】:

对于开发,我使用的是 H2 数据库,在 prod 中它很可能是 Postgres。有没有办法以与实现无关的方式指示数据库自动为表的行提供 UUID?

【问题讨论】:

然后由您的应用程序代码生成 @JarrodRoberson,是的,但我的问题是关于在数据库上执行此操作。 在几乎所有情况下,使用生产中使用的 DBMS 进行开发要好得多。独立于 DBMS 的代码是一个神话 - 它只是意味着代码在所有 DBMS 上都同样糟糕。 【参考方案1】:

可以使用用户定义的函数。

相关(我知道这不是您的问题):请注意,如果表中有很多行(数百万行),并且如果您在此 UUID 上有索引,则应避免随机分布的 UUID性能原因。这适用于所有数据库,除非索引很容易完全适合内存。因此,我个人会尽可能避免使用 UUID 并使用序列。

【讨论】:

【参考方案2】:

显然,就这么简单:

CREATE TABLE items (
  uuid SERIAL,
  PRIMARY KEY (uuid)
)

我没有找到在 H2 上记录的 SERIAL,这里是 the doc for PostgreSQL。我不知道这在多大程度上与 db 无关,但目前它在 H2 和 Postgre 上都运行得很好。

【讨论】:

序列号不是 UUID @a_horse_with_no_name 你是对的。我不知道这是actual standard。感谢您提请我注意。

以上是关于是否有与实现无关的方式让 SQL DB 提供 UUID?的主要内容,如果未能解决你的问题,请参考以下文章

是否有与 SQL Server NewId() 函数等效的 Access?

是否有与 Progress 4GL INTERVAL 函数等效的 SQL Server 函数?

是否有与 C/C++ Eclipse IDE 一起使用的插件来提供代码建议和自动完成功能? [关闭]

ASP - 在启动时核心迁移 EF Core SQL DB

是否有与 Haskell 'let' 等效的 Python

如何让我的 SQL DB 与我的领域驱动设计相匹配