“Составьте таблицу, если не существует” - как проверить схему, также?

Есть ли (более или менее) стандартный способ проверить не только, назвала ли таблица mytable существует, но также и подобна ли его схема тому, каково это должно быть? Я экспериментирую с базой данных H2, и

CREATE TABLE IF NOT EXISTS mytable (....)

операторы по-видимому только проверяют на имя таблицы. Я ожидал бы получать исключение, если существует таблица с именем, но другая схема.

11
задан Joonas Pulakka 19 March 2010 в 12:37
поделиться

3 ответа

Двойной ответ:

(a) Существование таблицы - это то, что должно обеспечиваться процедурой установки приложения, а не приложением. сам во время выполнения.

(b) Если вы действительно считаете, что у вас есть веская причина для отклонения от (a), вы можете попытаться запросить каталог, который представляет собой базу данных, состоящую из таблиц, структура которых более или менее предписана INFORMATION_SCHEMA из стандарт SQL. Какие таблицы существуют, какие столбцы у них есть, какие типы данных имеют эти столбцы, какие ключи объявлены и т. Д. И т. Д., Все это там.

3
ответ дан 3 December 2019 в 09:19
поделиться

Я не знаю ни одной базы данных, которая бы имела такую возможность.

Я не использовал ее (накатал свой собственный код для этого), но, возможно, Apache DdlUtils сможет помочь.

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

.
1
ответ дан 3 December 2019 в 09:19
поделиться

СОЗДАТЬ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ ... не является стандартным кодом SQL.

Надо проверить, есть ли таблица в каталоге. Например, в Java вы можете сделать что-то вроде: connection.getMetaData (). GetTables (connection.getCatalog (), null, null, null)

Для получения дополнительной информации см. javadoc java.sql.Connection .

4
ответ дан 3 December 2019 в 09:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: