В MySQL, как избежать выбора, если таблица существует - PullRequest
0 голосов
/ 18 августа 2011

Допустим, я запустил следующий запрос:

CREATE TEMPORARY TABLE IF NOT EXISTS FISH SELECT 'a';

создаст временную таблицу с 'a' внутри. Теперь, если я снова выполню запрос, таблица не будет воссоздана, но выбор произойдет снова, поэтому в таблице будет дважды указано «a». Как я могу предотвратить это, то есть, если таблица существует, никаких действий выполнять не нужно?

1 Ответ

0 голосов
/ 18 августа 2011

Это поведение явно задокументировано в руководстве, цитата:

Для CREATE TABLE ... SELECT, если задано IF NOT EXISTS и таблица уже существует, MySQL обрабатывает инструкцию следующим образом:

  • Определение таблицы, данное в части CREATE TABLE, игнорируется. Ошибка не возникает, даже если определение не соответствует определению существующей таблицы.

  • Если существует несоответствие между количеством столбцов в таблице и количеством столбцов, созданных деталью SELECT, выбранные значения присваиваются самым правым столбцам. Например, если таблица содержит n столбцов и SELECT создает m столбцов, где m

  • Если включен режим строгого SQL, и ни один из этих исходных столбцов не имеет явного значения по умолчанию, инструкция завершается ошибкой.

и нет никакого упоминания о каком-либо способе изменить это поведение, поэтому я полагаю, что ваше единственное решение - сначала проверить существование таблицы с помощью отдельного запроса, а затем CREATE...SELECT таблицы, если она не существует.

...