Mysql
 sql >> Base de données >  >> RDS >> Mysql

Une procédure stockée peut-elle fonctionner avec deux bases de données différentes ? Que diriez-vous de deux serveurs?

Si on parle de deux bases de données sur le même serveur :oui, une procédure stockée peut accéder à une autre base de données. Vous devez vous assurer que l'utilisateur sous les privilèges duquel la procédure est exécutée dispose des privilèges nécessaires sur chaque base de données.

Par exemple, supposons que vous ayez deux bases de données sur le même serveur, mydb1 et mydb2 , et que chacun contient une table nommée messages avec la même structure. Supposons que vous souhaitiez ajouter une procédure stockée à mydb2 qui vide les messages table dans mydb2 et copie le contenu des messages table dans mydb1 . Vous pouvez faire ceci :

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

Voyez comment j'ai entièrement qualifié les tables avec les bases de données auxquelles elles appartiennent. En fait, vous pourriez dire que je suis trop zélé ici, car nous avons spécifié que cette procédure stockée appartiendra à mydb2 . Je n'ai pas besoin d'ajouter le mydb2 . qualificatif. Si la procédure stockée était dans le mydb1 base de données, j'aurais besoin de ces qualificateurs, mais à l'inverse je n'aurais pas besoin du mydb1 . où il apparaît.

Afin de pouvoir exécuter cette procédure (éventuellement afin de pouvoir la définir ?), Je dois m'assurer que mon utilisateur a DELETE et INSERT privilèges sur mydb2 , et aussi SELECT privilèges sur mydb1 .

Les bases de données sur différents serveurs semblent un peu plus compliquées.