Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Kann eine gespeicherte Prozedur mit zwei verschiedenen Datenbanken arbeiten? Wie wäre es mit zwei Servern?

Wenn wir über zwei Datenbanken auf demselben Server sprechen:Ja, eine gespeicherte Prozedur kann auf eine andere Datenbank zugreifen. Sie müssen sicherstellen, dass der Benutzer, unter dessen Rechten die Prozedur ausgeführt wird, die erforderlichen Rechte für jede Datenbank hat.

Angenommen, Sie haben zwei Datenbanken auf demselben Server, mydb1 und mydb2 , und die jeweils eine Tabelle mit dem Namen messages enthalten mit gleicher Struktur. Angenommen, Sie möchten mydb2 eine gespeicherte Prozedur hinzufügen das leert die messages Tabelle in mydb2 und kopiert den Inhalt der messages Tabelle in mydb1 . Sie könnten dies tun:

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

Sehen Sie, wie ich die Tabellen mit den Datenbanken, zu denen sie gehören, vollständig qualifiziert habe. Tatsächlich könnten Sie argumentieren, dass ich hier übereifrig bin, weil wir angegeben haben, dass diese gespeicherte Prozedur in mydb2 gehören wird . Ich muss mydb2 nicht hinzufügen . Qualifikation. Wenn sich die gespeicherte Prozedur in mydb1 befände Datenbank würde ich diese Qualifizierer benötigen, aber umgekehrt würde ich mydb1 nicht benötigen . wo es erscheint.

Um diese Prozedur ausführen zu können (möglicherweise um sie definieren zu können?), müsste ich sicherstellen, dass mein Benutzer DELETE hat und INSERT Privilegien auf mydb2 , und auch SELECT Privilegien auf mydb1 .

Datenbanken auf verschiedenen Servern klingen etwas komplizierter.