#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`;