Подтвердить что ты не робот

Установить текущую базу данных в MySQL Script

У меня есть файл script для MySQL, который должен быть запущен примерно на 30 базах данных. Вот фрагмент:

ALTER TABLE <whatever_database>.`tblusers` ADD COLUMN `availability` ...

ALTER TABLE <whatever_database>.`tblusers` ADD COLUMN `reliability` INTEGER ...

В этом script есть еще много строк, и я бы хотел автоматизировать его в цикле текущих баз данных, которые будут обновляться. У меня есть список и цикл с использованием курсоров, но здесь, где я столкнулся с трудностями:

Когда я нахожусь в конкретной базе данных в курсоре, это имя базы данных находится в переменной. Я не могу просто сказать ALTER TABLE curschema. tblusers, потому что script жалуется, что нет базы данных с именем curschema (имя переменной, содержащей имя базы данных, в которую я бы хотел запустить операции). Я смог обойти это, создав и выполнив инструкцию с помощью параметров:

SET @curschema = curschema;
SET @query = NULL;
SET @email = emailAddress;
SET @pass = pass;
SET @statement = CONCAT('SELECT userid INTO @query FROM ', @curschema, '.tbluser 
PREPARE stmt FROM @statement;
EXECUTE stmt;

Проблема в том, что создание исполняемых строк (например, выше) станет очень утомительной задачей с десятками строк кода, которые я должен выполнить. Я надеялся, что существует способ, которым я могу установить текущую базу данных для операций, а затем просто reset, что каждая база данных будет проходить так, чтобы мои общие инструкции могли быть запущены:

(начало моего цикла)

База данных базы данных SET0 - (через базу данных29)

- запускать операторы с базой данных 0.... 29 подразумевается с помощью указанной команды

ALTER TABLE `tblusers` ADD COLUMN `availability` TINYINT(1) UNSIGNED ...

ALTER TABLE `tblusers` ADD COLUMN `reliability` INTEGER UNSIGNED NOT ...

(конец моего цикла)

Существует ли такая команда для установки текущей базы данных, на которой могут выполняться операции? Если такой команды нет, есть ли более простой способ выполнить мою задачу? Я полагаю, что на этом этапе проще всего найти find/replace во всех именах баз данных в 30 раз, чем переписать весь мой файл script как исполняемые/параметризованные строки.

Спасибо!

4b9b3361

Ответ 1

Вы пробовали USE?

USE db_name

В заявлении USE db_name говорится, что MySQL использует базу данных db_name как по умолчанию (текущая) база данных для последующих операторов. База данных остается значением по умолчанию до конца сеанса или другого ИСПОЛЬЗОВАНИЯ выдается отчет.

Пример:

USE db1;
SELECT COUNT(*) FROM mytable;   # selects from db1.mytable
USE db2;
SELECT COUNT(*) FROM mytable;   # selects from db2.mytable