存储过程可以使用两个不同的数据库吗?两台服务器怎么样?

Pen*_*m10 19 mysql sql stored-procedures

我想知道MySQL的存储过程是否可以在同一台机器上使用两个不同的数据库?如果他们在不同的服务器上怎么样?

Ham*_*ite 21

如果我们在同一台服务器上讨论两个数据库:是的,存储过程可以访问另一个数据库.您必须确保正在运行该过程的用户具有对每个数据库的必要特权.

例如,假设你有在同一服务器上的两个数据库,mydb1mydb2和每个包含一个名为表messages具有相同的结构.假设您要添加一个存储过程来mydb2清空该messagesmydb2并复制该messages表的内容mydb1.你可以这样做:

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
Run Code Online (Sandbox Code Playgroud)

看看我如何使用它们所属的数据库完全限定表.事实上你可能会说我在这里过于热心,因为我们指定这个存储过程属于mydb2.我不需要添加mydb2.限定符.如果存储过程在mydb1数据库中,我需要那些限定符,但相反我不需要mydb1.它出现的位置.

为了能够运行这个过程(可能是为了能够定义它?),我需要确保我的用户拥有权限DELETEINSERT特权mydb2,以及SELECT特权mydb1.

不同服务器上的数据库听起来相当复杂.