是否有与实现无关的方式让 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 函数?