[H2和Firebird] auto_increment,identity或trigger plus generator?

时间:2010-05-03 17:02:27

标签: database firebird auto-increment h2

在Firebird中,拥有自动增量色彩的唯一方法是设置生成器并将其与触发器一起使用。

在H2 db中有auto_increment和identity关键字。

最好的方法是什么?

mysql也使用auto_increment,但是cuncurrence read和table lock存在一些问题,是不是真的?

谢谢。

1 个答案:

答案 0 :(得分:2)

不,并发读取和表锁定没有问题。

使用每个RDBMS本机的伪代理功能的优点是RDBMS引擎以原子方式处理id值的分配,因此并发客户端不会分配相同的id值。它只需要对内部id计数器进行简短锁定,而不是整个表。

最好的方法是什么是无关紧要的。您应该使用您正在使用的RDBMS提供的功能。不幸的是,在SQL SQL 2003之前,没有在ANSI SQL标准中定义伪引用。到那时,每个供应商都创建了自己的专有功能和语法。

  • Oracle使用SEQUENCE个对象,类似于Firebird GENERATOR or SEQUENCE个对象。
  • Microsoft SQL Server使用IDENTITY作为列选项。
  • IBM DB2和PostgreSQL都支持序列,但它们也有一些声明性魔法,可以使列隐含地从序列中获取它们的值。
  • MySQL使用AUTO_INCREMENT列选项,并且还支持伪数据类型SERIAL,以使其与PostgreSQL具有一定的交叉兼容性。
  • SQLite只假设任何整数主键列都是自动递增。

如果H2同时支持IDENTITYAUTO_INCREMENT,则可能会使从MySQL或Microsoft SQL Server迁移的人员更熟悉。我不知道H2,但我猜两种语法形式都可以访问相同的内部功能。

我找到了H2的文档。 IDENTITYAUTO_INCREMENT似乎都使用了SEQUENCE