sql >> Database >  >> RDS >> Mysql

Kan een opgeslagen procedure werken met twee verschillende databases? Wat dacht je van twee servers?

Als we het hebben over twee databases op dezelfde server:ja, een opgeslagen procedure kan toegang krijgen tot een andere database. U moet ervoor zorgen dat de gebruiker onder wiens privileges de procedure wordt uitgevoerd de nodige privileges heeft op elke database.

Stel bijvoorbeeld dat u twee databases op dezelfde server heeft, mydb1 en mydb2 , en dat elk een tabel bevat met de naam messages met dezelfde structuur. Stel dat u een opgeslagen procedure wilt toevoegen aan mydb2 die de messages . leegt tabel in mydb2 en kopieert de inhoud van de messages tabel in mydb1 . Je zou dit kunnen doen:

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

Zie hoe ik de tabellen volledig heb gekwalificeerd met de databases waartoe ze behoren. Je zou zelfs kunnen beweren dat ik hier te ijverig ben, omdat we hebben gespecificeerd dat deze opgeslagen procedure in mydb2 thuishoort. . Ik hoef de mydb2 . niet toe te voegen . kwalificatie. Als de opgeslagen procedure in de mydb1 database, zou ik die kwalificaties nodig hebben, maar omgekeerd zou ik de mydb1 niet nodig hebben . waar het verschijnt.

Om deze procedure te kunnen uitvoeren (mogelijk om het te kunnen definiëren?), moet ik ervoor zorgen dat mijn gebruiker DELETE heeft en INSERT privileges op mydb2 , en ook SELECT privileges op mydb1 .

Databases op verschillende servers klinken wat ingewikkelder.



  1. opencart - Hoe kan ik handmatig een module in een sjabloonbestand weergeven?

  2. rails - postgres-fout:Reden:Incompatibele bibliotheekversie:libpq.5.dylib vereist versie 1.0.0 of hoger,

  3. Wat zijn SQL-beperkingen en de verschillende typen?

  4. Cassandra gebruiken in plaats van memcache?