Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Um procedimento armazenado pode funcionar com dois bancos de dados diferentes? Que tal dois servidores?


Se estamos falando de dois bancos de dados no mesmo servidor:sim, um procedimento armazenado pode acessar outro banco de dados. Você deve certificar-se de que o usuário sob cujos privilégios o procedimento está sendo executado tenha os privilégios necessários em cada banco de dados.

Por exemplo, suponha que você tenha dois bancos de dados no mesmo servidor, mydb1 e mydb2 , e que cada um contém uma tabela chamada messages com a mesma estrutura. Suponha que você queira adicionar um procedimento armazenado em mydb2 que esvazia as messages tabela em mydb2 e copia o conteúdo das messages tabela em mydb1 . Você poderia fazer isso:
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

Veja como qualifiquei totalmente as tabelas com os bancos de dados aos quais pertencem. Na verdade, você pode argumentar que estou sendo muito zeloso aqui, porque especificamos que esse procedimento armazenado pertencerá a mydb2 . Não preciso adicionar o mydb2 . qualificador. Se o procedimento armazenado estivesse no mydb1 banco de dados, eu precisaria desses qualificadores, mas, por outro lado, não precisaria do mydb1 . onde aparece.

Para poder executar este procedimento (possivelmente para poder defini-lo?), preciso ter certeza de que meu usuário tem DELETE e INSERT privilégios em mydb2 , e também SELECT privilégios em mydb1 .

Bancos de dados em diferentes servidores soam bem mais complicados.