Om vi pratar om två databaser på samma server:ja, en lagrad procedur kan komma åt en annan databas. Du måste se till att användaren under vars privilegier proceduren körs har nödvändiga privilegier på varje databas.
Anta till exempel att du har två databaser på samma server, mydb1
och mydb2
, och att var och en innehåller en tabell med namnet messages
med samma struktur. Anta att du vill lägga till en lagrad procedur till mydb2
som tömmer messages
tabell i mydb2
och kopierar innehållet i messages
tabell i mydb1
. Du kan göra så här:
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
Se hur jag har kvalificerat tabellerna fullt ut med databaserna som de tillhör. Du kan faktiskt hävda att jag är överivrig här, eftersom vi specificerade att denna lagrade procedur kommer att höra hemma i mydb2
. Jag behöver inte lägga till
kval. Om den lagrade proceduren var i mydb2
.mydb1
databasen skulle jag behöva dessa kvalificerare, men omvänt skulle jag inte behöva
där det visas.mydb1
.
För att kunna köra den här proceduren (möjligen för att kunna definiera den?), måste jag se till att min användare har DELETE
och INSERT
privilegier på mydb2
, och även SELECT
privilegier på mydb1
.
Databaser på olika servrar låter lite mer komplicerat.