我在 H2 中创建下表:
CREATE TABLE TEST
(ID BIGINT NOT NULL PRIMARY KEY)
然后我查看 INFORMATION_SCHEMA.TABLES 表:
SELECT SQL
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'TEST'
结果:
CREATE CACHED TABLE TEST(
ID BIGINT NOT NULL
)
然后我查看 INFORMATION_SCHEMA.CONSTRAINTS 表:
SELECT SQL
FROM INFORMATION_SCHEMA.CONSTRAINTS
WHERE TABLE_NAME = 'TEST'
结果:
ALTER TABLE TEST
ADD CONSTRAINT CONSTRAINT_4C
PRIMARY KEY(ID)
INDEX PRIMARY_KEY_4C
这些语句不是我所说的,因此,问题是:TABLES 和 CONSTRAINS 中的信息是否反映了在数据库中执行的真实 SQL?
- 在原始 CREATE TABLE 语句中没有CACHED字。(不是问题)
- 我从未执行过ALTER TABLE .. ADD CONSTRAINT语句。
我问这个问题的实际原因是我不确定应该执行哪个语句来保证在聚集索引中使用主键。如果您查看我之前的问题H2 数据库:聚集索引支持,那么您可能会在 Thomas Mueller 的回答中找到以下语句:
如果在创建表之后创建主键,则主键存储在新的索引 b-tree 中。
因此,如果语句按照它们显示在 INFORMATION_SCHEMA 中的方式执行,则在创建表后创建主键,因此在聚集索引中不使用 ID(基本上作为数据 b 树中的键)。
有没有一种方法可以保证在 H2 的聚集索引中使用主键?