同じサーバー上の2つのデータベースについて話している場合:はい、ストアドプロシージャは別のデータベースにアクセスできます。プロシージャを実行している権限を持つユーザーが、各データベースに対して必要な権限を持っていることを確認する必要があります。
たとえば、同じサーバーに2つのデータベース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を追加する必要はありません 。mydb1にあった場合 データベースの場合、これらの修飾子は必要ですが、逆に 表示される場所。mydb1は必要ありません。 。
このプロシージャを実行できるようにするには(おそらくそれを定義できるようにするために?)、ユーザーがDELETEを持っていることを確認する必要があります。 およびINSERT mydb2の権限 、およびSELECT mydb1の権限 。
異なるサーバー上のデータベースはかなり複雑に聞こえます。