Как мне проверить, существует ли таблица перед alter table

#mysql #sql #if-statement

#mysql #sql #if-statement

Вопрос:

Мне нужен запрос для обновления всех таблиц и установки ENGINE = INNODB для многих баз данных. Но в некоторых базах данных не все одинаковые таблицы; в некоторых базах данных больше таблиц, чем в других.

Итак, проблема в том, что

 ALTER TABLE `ads` ENGINE = INNODB;
ALTER TABLE `modules` ENGINE = INNODB;
ALTER TABLE `ad_extras` ENGINE = INNODB;
  

Выдает ошибку, когда таблица modules doe не существует. Я вижу, что не могу сделать прямое утверждение IF’Я пытался:

 IF EXISTS (SHOW TABLES LIKE 'modules') BEGIN
ALTER TABLE `modules` ENGINE = INNODB;
END IF
  

Но он выдает

Нераспознанный тип оператора (рядом, ЕСЛИ СУЩЕСТВУЕТ)

Есть идеи?

Комментарии:

1. извлеките информацию о существовании таблицы из INFORMATION_SCHEMA_TABLES .

Ответ №1:

Если это просто специальная задача,

 select concat('ALTER ', TABLE_NAME, " ENGINE = INNODB;") 
from information_schema.TABLES 
where TABLE_SCHEMA = '<your schema>';
  

Снова выполните вывод.

Ответ №2:

Если существует, работает только в хранимой процедуре.

исправленная версия ответа Джейкоба:

 SET SESSION group_concat_max_len = 1000000;

select group_concat(concat('ALTER Table ', TABLE_NAME, ' ENGINE = INNODB;') SEPARATOR 'n')
from information_schema.TABLES 
where TABLE_SCHEMA = 'your_schema_name' and TABLE_TYPE<>'VIEW';
  

Это даст вам скрипт для копирования и запуска отдельно.

Ответ №3:

Как насчет простого тестирования, такого как этот запрос :

 DROP TABLE IF EXISTS `yourtablename`;