Ако говорим за две бази данни на един и същи сървър:да, съхранена процедура може да има достъп до друга база данни. Трябва да се уверите, че потребителят, с чиито привилегии се изпълнява процедурата, има необходимите привилегии за всяка база данни.
Да предположим например, че имате две бази данни на един и същи сървър, 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
.
Базите данни на различни сървъри звучат доста по-сложно.