Sql 存储过程能否与两个不同的数据库一起工作?两台服务器怎么样?
我想知道MySQL的存储过程是否可以在同一台机器上处理两个不同的数据库?如果它们位于不同的服务器上,如何处理一台服务器上的两个数据库,但只有当它们具有相同的登录详细信息时,才能在两台不同的服务器上处理Sql 存储过程能否与两个不同的数据库一起工作?两台服务器怎么样?,sql,mysql,stored-procedures,Sql,Mysql,Stored Procedures,我想知道MySQL的存储过程是否可以在同一台机器上处理两个不同的数据库?如果它们位于不同的服务器上,如何处理一台服务器上的两个数据库,但只有当它们具有相同的登录详细信息时,才能在两台不同的服务器上处理 存储过程在一个数据库连接下执行。连接的登录名可以访问的所有数据库都可以在存储过程中使用 只需使用databasename.tablename表示法即可。远程数据库-我不知道MySQL中有这样的方式。。这在MS SQL Server中是可能的。如果我们讨论的是同一台服务器上的两个数据库:是的,一个存
存储过程在一个数据库连接下执行。连接的登录名可以访问的所有数据库都可以在存储过程中使用 只需使用databasename.tablename表示法即可。远程数据库-我不知道MySQL中有这样的方式。。这在MS SQL Server中是可能的。如果我们讨论的是同一台服务器上的两个数据库:是的,一个存储过程可以访问另一个数据库。您必须确保在其权限下运行过程的用户对每个数据库都具有必要的权限 例如,假设在同一台服务器上有两个数据库,
mydb1
和mydb2
,每个数据库都包含一个名为messages
的表,其结构相同。假设您想向mydb2
添加一个存储过程,该过程清空mydb2
中的messages
表,并复制mydb1
中的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
上具有DELETE
和INSERT
权限,并且在mydb1
上具有SELECT
权限
不同服务器上的数据库听起来相当复杂。您也可以在不同的服务器上使用不同的数据库,但您需要链接它们并使用相同的帐户(例如active directory帐户)如果我希望用户a能够调用一个处理数据库b的过程,但我不希望用户a拥有对数据库b的那些权限,那么这两个数据库都要连接起来,该怎么办呢。。。例如,受控删除:我不允许用户a在数据库b上执行任意的delete语句,但我确实希望他能够删除存储过程中确定的某些信息,如缓存。@santiago Aridti,据我所知,您所描述的行为已经由
SQL安全定义符
子句授予。