sql >> Base de Datos >  >> RDS >> Mysql

¿Puede un procedimiento almacenado trabajar con dos bases de datos diferentes? ¿Qué tal dos servidores?

Si estamos hablando de dos bases de datos en el mismo servidor:sí, un procedimiento almacenado puede acceder a otra base de datos. Debe asegurarse de que el usuario bajo cuyos privilegios se ejecuta el procedimiento tenga los privilegios necesarios en cada base de datos.

Por ejemplo, suponga que tiene dos bases de datos en el mismo servidor, mydb1 y mydb2 , y que cada uno contiene una tabla llamada messages con la misma estructura. Suponga que desea agregar un procedimiento almacenado a mydb2 que vacía los messages tabla en mydb2 y copia el contenido de los messages tabla en mydb1 . Podrías hacer esto:

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

Vea cómo he calificado completamente las tablas con las bases de datos a las que pertenecen. De hecho, podría argumentar que estoy siendo demasiado entusiasta aquí, porque especificamos que este procedimiento almacenado pertenecerá a mydb2 . No necesito agregar mydb2 . Calificatorio. Si el procedimiento almacenado estuviera en mydb1 base de datos, necesitaría esos calificadores, pero a la inversa no necesitaría mydb1 . donde aparece.

Para poder ejecutar este procedimiento (¿posiblemente para poder definirlo?), necesito asegurarme de que mi usuario tiene DELETE y INSERT privilegios en mydb2 , y también SELECT privilegios en mydb1 .

Las bases de datos en diferentes servidores suenan bastante más complicadas.