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

Может ли хранимая процедура работать с двумя разными базами данных? Как насчет двух серверов?

Мне интересно, могут ли хранимые процедуры MySQL работать с двумя разными базами данных на одной машине? Как насчет того, находятся ли они на разных серверах?

4b9b3361

Ответ 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.