【问题标题】:IDENTITY vs BIGINT regarding _ROWID_关于 _ROWID_ 的 IDENTITY 与 BIGINT
【发布时间】:2015-12-28 12:05:24
【问题描述】:

我的理解是
CREATE TABLE T(ID IDENTITY PRIMARY KEY);之间的唯一区别

CREATE TABLE T(ID BIGINT IDENTITY);
是后者更有效,因为ID 列是行ID,因此对应于_ROWID_ 伪列。

另外,如果我这样做
CREATE TABLE T(ID IDENTITY);
那么ID_ROWID_ 不对应,甚至根本不是主键。

这些假设正确吗?

【问题讨论】:

  • 我怀疑不是。使用第二种方法创建表。添加两条记录,然后删除第一条。选择 id 字段和 rowid 值,看看它们是否仍然相同。接下来,使用对第一个表的外键引用创建另一个表。看看数据库是否允许你这样做。

标签: java sql database h2


【解决方案1】:

按照建议,我做了一些测试。 事实证明,这三个语句似乎都是等价的。
ID 始终是主键,对应于_ROWID_ 列。

毕竟,我选择了第四个变体:
CREATE TABLE T(ID BIGINT AUTO_INCREMENT, CONSTRAINT KEY_NAME PRIMARY KEY (ID));
这样做的好处是可以指定主键的名称。
在其他情况下,名称是自动生成的,类似于CONSTRAINT_0
所有这些都使用 H2 1.4.190。

【讨论】:

    猜你喜欢
    • 2014-07-12
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 2010-10-31
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    相关资源
    最近更新 更多