переменная база данных - PullRequest
20 голосов
/ 31 марта 2009

Есть ли способ в MySQL поместить имя базы данных в переменную? Например, когда у меня есть база данных с именем 'db1', могу ли я сделать что-то вроде этого:

set @db= 'db1';
select * from @db.mytable;

РЕДАКТИРОВАТЬ: Есть еще один пример того, что я хочу сделать:

set @dbfrom= 'db1';
set @dbto= 'db2';
insert into @dbto.mytable (col1,col2,col3) select col2,col1,col3 from @dbfrom.mytable;

Ответы [ 3 ]

23 голосов
/ 31 марта 2009

Со значительными усилиями, да.

SET @db = 'db1';
SET @q = CONCAT('SELECT * FROM ', @db, '.mycol');
PREPARE stmt FROM @q;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
1 голос
/ 18 ноября 2010

Использование Хаоса Решение 'Prepare Statement' Мне удалось создать хранимую процедуру, которая использует переменное имя базы данных.

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

DELIMITER $$

DROP PROCEDURE IF EXISTS `SampleProcedure` $$
CREATE PROCEDURE `SampleProcedure`(IN HubDatabaseName VARCHAR(255))
BEGIN

SET @db = HubDatabaseName;
SET @q = CONCAT('

/* Import data from Hub database to local database */
INSERT INTO `table_name_in_local_database`
SELECT
  *
FROM
  ', @db ,'.`tablename`

');

PREPARE stmt FROM @q;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

END $$
DELIMITER ;
0 голосов
/ 24 августа 2018

Если у вас установлен PHP, вы можете использовать этот скрипт для замены переменных mysql на их действительное значение:

<?php

$sqlFile = 'migration.sql';
$fromDb = 'db1';
$toDb = 'db2';

echo str_replace(['@fromDb', '@toDb'], [$fromDb, $toDb], file_get_contents($sqlFile));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...