小编典典

存储过程可以与两个不同的数据库一起工作吗?两台服务器怎么样?

sql

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


阅读 191

收藏
2021-03-23

共1个答案

小编典典

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

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

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

查看我如何用表所属的数据库对表进行完全限定。实际上,您可能会说我在这里太热心了,因为我们指定了此存储过程将属于mydb2。我不需要添加mydb2`.`限定符。如果存储过程在`mydb1`数据库中,那么我将需要那些限定符,但是相反,我将不需要mydb1.它出现的位置。

为了能够运行此过程(可能是为了对其进行定义?),我需要确保我的用户具有DELETE和的INSERT特权mydb2,还具有的SELECT特权mydb1

不同服务器上的数据库听起来要复杂得多。

2021-03-23