解决方法
如果我们在同一个服务器上讨论两个数据库:是的,存储过程可以访问另一个数据库.您必须确保正在运行该过程的权限的用户对每个数据库具有必要的权限.
例如,假设您在同一服务器mydb1和mydb2上有两个数据库,并且每个包含一个名为具有相同结构的消息的表.假设要将存储过程添加到mydb2中,将mydb2中的消息表清空,并复制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.预选赛.如果存储过程在mydb1数据库中,我将需要这些限定符,但反过来我不需要mydb1.出现在哪里
为了能够运行此过程(可能为了能够定义它),我需要确保我的用户对mydb2具有DELETE和INSERT权限,以及mydb1上的SELECT权限.
不同服务器上的数据库听起来更复杂.