sql >> Databáze >  >> RDS >> Mysql

Může uložená procedura pracovat se dvěma různými databázemi? Co takhle dva servery?

Pokud mluvíme o dvou databázích na stejném serveru:ano, uložená procedura může přistupovat k jiné databázi. Musíte se ujistit, že uživatel, pod jehož právy se procedura spouští, má potřebná oprávnění ke každé databázi.

Předpokládejme například, že máte dvě databáze na stejném serveru, mydb1 a mydb2 a že každý obsahuje tabulku s názvem messages se stejnou strukturou. Předpokládejme, že chcete přidat uloženou proceduru do mydb2 tím se vyprázdní messages tabulky v mydb2 a zkopíruje obsah messages tabulky v mydb1 . Můžete to udělat takto:

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

Podívejte se, jak jsem plně kvalifikoval tabulky s databázemi, ke kterým patří. Ve skutečnosti můžete namítnout, že jsem zde příliš horlivý, protože jsme určili, že tato uložená procedura bude patřit do mydb2 . Nepotřebuji přidávat mydb2 . kvalifikátor. Pokud by uložená procedura byla v mydb1 databáze, potřeboval bych tyto kvalifikátory, ale naopak bych nepotřeboval mydb1 . kde se objeví.

Aby bylo možné spustit tuto proceduru (možná, abych ji mohl definovat?), musel bych se ujistit, že můj uživatel má DELETE a INSERT oprávnění na mydb2 a také SELECT oprávnění na mydb1 .

Databáze na různých serverech zní poněkud komplikovaněji.



  1. Jak povolit aktualizaci výsledků pohledu v Oracle?

  2. MySQL/PHP - stránkování čísla stránek Zobrazuje občas pouze 10 stránek

  3. Zástupné znaky v Java PreparedStatements

  4. Docker MYSQL '[2002] Připojení odmítnuto'