Мне интересно, могут ли хранимые процедуры MySQL работать с двумя разными базами данных на одной машине? Как насчет того, находятся ли они на разных серверах?
Может ли хранимая процедура работать с двумя разными базами данных? Как насчет двух серверов?
Ответ 1
Если мы говорим о двух базах данных на одном сервере: да, хранимая процедура может обращаться к другой базе данных. Вы должны убедиться, что пользователь, чьи привилегии, выполняемые в этой процедуре, имеет необходимые привилегии для каждой базы данных.
Например, предположим, что у вас есть две базы данных на одном сервере, mydb1
и mydb2
, и каждая из них содержит таблицу с именем messages
с той же структурой. Предположим, вы хотите добавить хранимую процедуру в mydb2
, которая опустошает таблицу messages
в mydb2
и скопирует содержимое таблицы messages
в mydb1
. Вы можете сделать это:
CREATE PROCEDURE `SynchroniseMessages` ()
LANGUAGE SQL
NOT DETERMINISTIC
MODIFIES SQL DATA
SQL SECURITY DEFINER
BEGIN
DELETE FROM `mydb2`.`messages`;
INSERT INTO
`mydb2`.`messages`
SELECT * FROM `mydb1`.`messages`;
END
Посмотрите, как я полностью квалифицировал таблицы с базами данных, к которым они принадлежат. На самом деле вы можете утверждать, что я здесь чрезмерно усердный, потому что мы указали, что эта хранимая процедура будет принадлежать mydb2
. Мне не нужно добавлять квалификатор
. Если хранимая процедура была в базе данных mydb2
.mydb1
, мне нужны эти квалификаторы, но, наоборот, мне не понадобится
, где он появится.mydb1
.
Чтобы иметь возможность запускать эту процедуру (возможно, чтобы ее определить?), мне нужно убедиться, что у моего пользователя есть привилегии DELETE
и INSERT
на mydb2
, а также SELECT
привилегии на mydb1
.
Базы данных на разных серверах звучат намного сложнее.
Ответ 2
Вы также можете использовать разные базы данных на разных серверах, но вам нужно связать их и использовать одну и ту же учетную запись (например, активную учетную запись каталога) для обоих из них для подключения
Ответ 3
IMHO он может работать с 2 базами данных на одном сервере, но только если у них одинаковые данные для входа. Это невозможно на двух разных серверах.
Хранимая процедура выполняется под одним подключением к базе данных. Доступны все базы данных, к которым подключен логин подключения, в хранимой процедуре.
Ответ 4
Просто используйте нотацию databasename.tablename. Удаленные базы данных - я не знаю такого способа в MySQL.. Это возможно в MS SQL Server.