Se parliamo di due database sullo stesso server:sì, una procedura memorizzata può accedere a un altro database. Devi assicurarti che l'utente con i cui privilegi viene eseguita la procedura disponga dei privilegi necessari su ciascun database.
Ad esempio, supponiamo di avere due database sullo stesso server, mydb1
e mydb2
e che ciascuno contiene una tabella denominata messages
con la stessa struttura. Supponiamo di voler aggiungere una stored procedure a mydb2
che svuota i messages
tabella in mydb2
e copia il contenuto dei messages
tabella in mydb1
. Potresti farlo:
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
Guarda come ho qualificato completamente le tabelle con i database a cui appartengono. In effetti potresti sostenere che sono troppo zelante qui, perché abbiamo specificato che questa procedura memorizzata apparterrà a mydb2
. Non ho bisogno di aggiungere il
qualificatore. Se la procedura memorizzata fosse in mydb2
.mydb1
database, avrei bisogno di quei qualificatori, ma al contrario non avrei bisogno del
dove appare.mydb1
.
Per poter eseguire questa procedura (eventualmente per poterla definire?), devo assicurarmi che il mio utente abbia DELETE
e INSERT
privilegi su mydb2
, e anche SELECT
privilegi su mydb1
.
I database su server diversi sembrano piuttosto più complicati.