Mysql
 sql >> Database >  >> RDS >> Mysql

Una procedura memorizzata può funzionare con due database diversi? Che ne dici di due server?

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 mydb2 . qualificatore. Se la procedura memorizzata fosse in mydb1 database, avrei bisogno di quei qualificatori, ma al contrario non avrei bisogno del mydb1 . dove appare.

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.