关于 _ROWID_ 的 IDENTITY 与 BIGINT
IDENTITY vs BIGINT regarding _ROWID_
我的理解是
之间的唯一区别
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_
列。
毕竟,我选择了第四个变体:
CREATE TABLE T(ID BIGINT AUTO_INCREMENT, CONSTRAINT KEY_NAME PRIMARY KEY (ID));
这样做的好处是可以指定主键的名称。
在其他情况下,名称是自动生成的,类似于 CONSTRAINT_0
.
所有这些都与 H2 1.4.190.
我的理解是
之间的唯一区别
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_
列。
毕竟,我选择了第四个变体:
CREATE TABLE T(ID BIGINT AUTO_INCREMENT, CONSTRAINT KEY_NAME PRIMARY KEY (ID));
这样做的好处是可以指定主键的名称。
在其他情况下,名称是自动生成的,类似于 CONSTRAINT_0
.
所有这些都与 H2 1.4.190.