Ответ 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
.
Базы данных на разных серверах звучат намного сложнее.