Проверьте, существует ли таблица, и если нет, создайте ее - PullRequest
5 голосов
/ 14 апреля 2010

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

Ответы [ 3 ]

8 голосов
/ 14 апреля 2010

Использование 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 остерегайтесь таких проблем, как чувствительность к регистру имен таблиц, возможность появления вашей таблицы в нескольких схемах и т. д.)
3 голосов
/ 14 апреля 2010

Помимо подхода Влада Романскану к create table if not exists NEW_TABLE_NAME в одном приятном прямом утверждении, всегда есть возможность запросить INFORMATION_SCHEMA. (Я думаю, это то, что предлагает Дерек Кларксон).

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

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

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, является пограничным!

1 голос
/ 14 апреля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...