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

时间:2010-10-25 13:04:49

标签: sql mysql stored-procedures

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

4 个答案:

答案 0 :(得分:21)

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

例如,假设您在同一服务器上有两个数据库mydb1mydb2,并且每个数据库都包含一个名为messages的表,其结构相同。假设您要将存储过程添加到mydb2,以清空messages中的mydb2表,并复制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.限定符。如果存储过程在mydb2数据库中,我需要这些限定符,但相反,我不需要它出现的mydb1

为了能够运行此过程(可能是为了能够定义它?),我需要确保我的用户在{{mydb1.mydb1权限在DELETE上也有1}}和INSERT个权限。

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

答案 1 :(得分:1)

您还可以在不同的服务器上使用不同的数据库,但您需要链接它们并使用相同的帐户(例如活动目录帐户)来连接它们

答案 2 :(得分:0)

恕我直言,它可以在一台服务器上使用2个数据库,但只有当它们具有相同的登录详细信息时才能在2个不同的服务器上使用。

存储过程在一个数据库连接下执行。连接登录可以访问的所有数据库都可以在存储过程中使用。

答案 3 :(得分:0)

只需使用databasename.tablename表示法。远程数据库 - 我在MySQL中不知道这种方式。它可以在MS SQL Server中使用。