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
Qualifikation. Wenn sich die gespeicherte Prozedur in mydb2
nicht hinzufügen .mydb1
befände Datenbank würde ich diese Qualifizierer benötigen, aber umgekehrt würde ich
wo es erscheint.mydb1
nicht benötigen .
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.