我想知道MySQL的存储过程是否可以在同一台机器上使用两个不同的数据库?如果它们在不同的服务器上呢?
如果我们要讨论的是同一台服务器上的两个数据库:是的,存储过程可以访问另一个数据库。您必须确保正在以其特权运行该过程的用户在每个数据库上都具有必需的特权。
例如,假设你有在同一服务器上的两个数据库,mydb1并mydb2和每个包含一个名为表messages具有相同的结构。假设你想存储的过程添加到mydb2该清空messages表mydb2和复制的内容messages表mydb1。您可以这样做:
mydb1
mydb2
messages
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`.`限定符。如果存储过程在`mydb1`数据库中,那么我将需要那些限定符,但是相反,我将不需要
.
为了能够运行此过程(可能是为了对其进行定义?),我需要确保我的用户具有DELETE和的INSERT特权mydb2,还具有的SELECT特权mydb1。
DELETE
INSERT
SELECT
不同服务器上的数据库听起来要复杂得多。