我想知道MySQL的存储过程是否可以在同一台机器上使用两个不同的数据库?如果他们在不同的服务器上怎么样?
答案 0 :(得分:21)
如果我们在同一台服务器上讨论两个数据库:是的,存储过程可以访问另一个数据库。您必须确保正在运行该过程的用户具有对每个数据库的必要特权。
例如,假设您在同一服务器上有两个数据库mydb1
和mydb2
,并且每个数据库都包含一个名为messages
的表,其结构相同。假设您要将存储过程添加到mydb2
,以清空messages
中的mydb2
表,并复制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
了解我如何使用它们所属的数据库完全限定表。事实上你可能会说我在这里过于热心,因为我们指定这个存储过程属于mydb2
。我不需要添加
限定符。如果存储过程在mydb2
.mydb2
数据库中,我需要这些限定符,但相反,我不需要它出现的mydb1
。
为了能够运行此过程(可能是为了能够定义它?),我需要确保我的用户在{{
和mydb1
.mydb1
权限在DELETE
上也有1}}和INSERT
个权限。
不同服务器上的数据库听起来相当复杂。
答案 1 :(得分:1)
您还可以在不同的服务器上使用不同的数据库,但您需要链接它们并使用相同的帐户(例如活动目录帐户)来连接它们
答案 2 :(得分:0)
恕我直言,它可以在一台服务器上使用2个数据库,但只有当它们具有相同的登录详细信息时才能在2个不同的服务器上使用。
存储过程在一个数据库连接下执行。连接登录可以访问的所有数据库都可以在存储过程中使用。
答案 3 :(得分:0)
只需使用databasename.tablename表示法。远程数据库 - 我在MySQL中不知道这种方式。它可以在MS SQL Server中使用。