在 Firebird 中,拥有自动增量列的唯一方法是设置生成器并将其与触发器一起使用。
在 H2 db 中有 auto_increment 和 identity 关键字可以做到这一点。
什么是最好的方法?
Mysql 也使用了 auto_increment,但是 cucurrence read 和 table lock 存在一些问题,不是吗?
谢谢你。
在 Firebird 中,拥有自动增量列的唯一方法是设置生成器并将其与触发器一起使用。
在 H2 db 中有 auto_increment 和 identity 关键字可以做到这一点。
什么是最好的方法?
Mysql 也使用了 auto_increment,但是 cucurrence read 和 table lock 存在一些问题,不是吗?
谢谢你。
不,不存在并发读取和表锁的问题。
使用每个 RDBMS 原生的伪键特性的优点是 RDBMS 引擎以原子方式处理 id 值的分配,因此并发客户端不会分配相同的 id 值。它只需要在内部 id 计数器上短暂锁定,而不是任何整个表。
什么是最好的方法并不重要。您应该使用您正在使用的 RDBMS 提供的功能。不幸的是,伪键直到 SQL:2003 才在 ANSI SQL 标准中定义。到那时,每个供应商都创建了自己的专有特性和语法。
SEQUENCE
类似于FirebirdGENERATOR
或SEQUENCE
对象的对象。IDENTITY
用作列选项。AUTO_INCREMENT
column 选项,并且还支持伪数据类型SERIAL
以使其与 PostgreSQL 具有一定的交叉兼容性。如果 H2 同时支持IDENTITY
和AUTO_INCREMENT
,它可能会让从 MySQL 或 Microsoft SQL Server 迁移的人更熟悉它。我不知道 H2,但我猜这两种语法形式都访问相同的内部功能。
我找到了 H2 的文档。它同时出现IDENTITY
并AUTO_INCREMENT
使用SEQUENCE
.