2010-10-06 3 views
0

создать следующую таблицу в H2:базы данных H2: Информация о первичного ключа в INFORMATION_SCHEMA

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 

Эти заявления не те, которые я уже говорил, поэтому возникает вопрос: ли информация в таблицах и ограничивающего отражает то, как реальный SQL, который был выполнен в базе данных?

  1. В оригинальной CREATE TABLE заявление не было кэшируются слово. (не проблема)
  2. Я никогда не выполнял ALTER TABLE .. ADD CONSTRAINT заявление.

Фактическая причина, почему я задаю вопрос о том, что я не уверен, заявление, которое я должен выполнить, чтобы гарантии, что первичный ключ используется в кластерном индексе. Если вы посмотрите на мой предыдущий вопрос H2 database: clustered index support, то вы можете найти в ответе Томаса Мюллера следующее заявление:

Если первичный ключ создан после того, как таблица была создана, то первичный ключ хранится в новый индекс b-tree.

Поэтому, если операторы выполняются как таковые, они отображаются в INFORMATION_SCHEMA, тогда первичный ключ создается после создания таблицы и, следовательно, идентификатор не используется в кластерном индексе (в основном в качестве ключа в данных b- дерево).

Есть ли способ гарантировать, что первичный ключ используется в кластерном индексе в H2?

ответ

1

Является ли информация в ТАБЛИЦЕ и КОНТРАФИКАХ отражением реального реального SQL, который был выполнен в базе данных?

Да. В основном, это те, которые выполняются при открытии базы данных.

Если вы посмотрите на мой предыдущий вопрос

Ответ «Если первичный ключ создается после того, как таблица была создана ...» было неправильно, я установил его сейчас «Если первичный ключ создается после того, как данные были вставлены ... ».

Есть ли способ гарантировать, что первичный ключ используется как кластерный индекс в H2?

Это теперь лучше описано в H2 documentation на «Как данные хранятся внутри»: «Если один столбец первичного ключа типа BIGINT, INT, SMALLINT, TINYINT задается при создании таблицы (или сразу после создания таблицу, но перед вставкой каких-либо строк), то этот столбец используется в качестве ключа данных b-дерева. "

 Смежные вопросы

  • Нет связанных вопросов^_^