gpt4 book ai didi

database - [H2 and Firebird]auto_increment, identity or trigger plus generator?

转载 作者:搜寻专家 更新时间:2023-10-30 23:23:36 27 4
gpt4 key购买 nike

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

在 H2 数据库中,有 auto_increment 和 identity 关键字可以做到这一点。

什么是最好的方法?

mysql也用auto_increment,但是并发读和表锁有一些问题,是不是?

谢谢。

最佳答案

没有,没有并发读和表锁的问题。

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

什么是最好的方法并不重要。您应该使用您正在使用的 RDBMS 提供的功能。不幸的是,直到 SQL:2003,伪键才在 ANSI SQL 标准中定义。到那时,每个供应商都创建了自己的专有功能和语法。

  • Oracle 使用类似于 Firebird GENERATOR or SEQUENCESEQUENCE 对象对象。
  • 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 .

关于database - [H2 and Firebird]auto_increment, identity or trigger plus generator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2759750/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com