Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 存储过程能否与两个不同的数据库一起工作?两台服务器怎么样?_Sql_Mysql_Stored Procedures - Fatal编程技术网

Sql 存储过程能否与两个不同的数据库一起工作?两台服务器怎么样?

Sql 存储过程能否与两个不同的数据库一起工作?两台服务器怎么样?,sql,mysql,stored-procedures,Sql,Mysql,Stored Procedures,我想知道MySQL的存储过程是否可以在同一台机器上处理两个不同的数据库?如果它们位于不同的服务器上,如何处理一台服务器上的两个数据库,但只有当它们具有相同的登录详细信息时,才能在两台不同的服务器上处理 存储过程在一个数据库连接下执行。连接的登录名可以访问的所有数据库都可以在存储过程中使用 只需使用databasename.tablename表示法即可。远程数据库-我不知道MySQL中有这样的方式。。这在MS SQL Server中是可能的。如果我们讨论的是同一台服务器上的两个数据库:是的,一个存

我想知道MySQL的存储过程是否可以在同一台机器上处理两个不同的数据库?如果它们位于不同的服务器上,如何处理一台服务器上的两个数据库,但只有当它们具有相同的登录详细信息时,才能在两台不同的服务器上处理


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

只需使用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安全定义符
子句授予。