sql >> Databasteknik >  >> RDS >> Mysql

Kan en lagrad procedur fungera med två olika databaser? Vad sägs om två servrar?

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 mydb2 . kval. Om den lagrade proceduren var i mydb1 databasen skulle jag behöva dessa kvalificerare, men omvänt skulle jag inte behöva mydb1 . där det visas.

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.



  1. Vad är det bästa sättet att fråga ett datetime-fält mot datumfält?

  2. oracle Update som jämför Varchar

  3. Automatiskt inkrementellt datumfält och version oracle sql för en tabell

  4. Vad tycker du om att använda textidentifierare i tabellkolumner när du närmar dig databasen med normalisering och skalbarhet i åtanke?