Проверьте, существует ли таблица, и в противном случае создайте ее

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

5
задан Brian Tompsett - 汤莱恩 19 April 2017 в 14:12
поделиться

3 ответа

Используйте CREATE TABLE IF NOT EXISTS.

UPDATE

К сведению, не все РСУБД поддерживают CREATE ... IF NOT EXISTS. MySQL поддерживает, но для тех, кто ищет более портативное решение, знайте, что у вас есть несколько (менее эффективных, но в остальном функциональных) способов добиться того же самого:

  • безусловный выпуск CREATE TABLE; если таблица уже существует, в этом случае просто пропустите ошибку и продолжите
  • SELECT из объекта tables в ANSI information_schema чтобы узнать, существует ли уже данная таблица (как изначально предложил @Derek -- см. ответ @lexu для фактического запроса); в зависимости от результата, либо выдать CREATE TABLE -- либо не выдавать (при обращении к information_schema. tables остерегайтесь таких вопросов, как чувствительность имен таблиц к регистру, возможность появления вашей таблицы в нескольких схемах и т.д.)
8
ответ дан 13 December 2019 в 05:32
поделиться

Я не знаю синтаксис mysql, но все базы данных, которые я когда-либо использовал, предоставляют набор таблиц, содержащих метаданные о данных. Т.е. системные таблицы. Вы можете просто выполнить select count для нужной системной таблицы, используя имя таблицы в предложении where, чтобы узнать, существует ли она. Могут быть и другие способы.

Я бы посоветовал заглянуть в doco по mysql для получения информации о системных таблицах и о том, как к ним обращаться. Поскольку это mysql, все, вероятно, довольно просто.

1
ответ дан 13 December 2019 в 05:32
поделиться

Помимо подхода Влада Романскану к создать таблицу, если не существует NEW_TABLE_NAME в одном приятном прямом операторе, всегда есть возможность запросить ИНФОРМАЦИЯ_СХЕМА. (Я думаю, это то, что предлагает Дерек Кларксон).

Этот подход требует большего количества кодирования на стороне клиента ...

вы можете использовать этот запрос:

select count(TABLE_NAME)
  from INFORMATION_SCHEMA 
 where TABLE_SCHEMA = 'your schema'
   and TABLE_NAME = 'your table'
group by TABLE_NAME

ПРИМЕЧАНИЕ в Mysql у вас может возникнуть соблазн пропустить последнюю 'group by', я склонен быть немного озабоченным этим и оставить это в покое, чтобы у меня не было неприятных встреч при работе с другой СУБД.
Этот случай, который полностью специфичен для MySQL, является пограничным!

3
ответ дан 13 December 2019 в 05:32
поделиться
Другие вопросы по тегам:

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