2

MySQLでクロスデータベースアクセスにトリガーを適用することは可能ですか?その場合、1つの例を挙げてください。私の目的は、database1に新しいデータが挿入/更新/削除された場合に、database2にデータを挿入/更新/削除することです。MySQL5.1を使用しています

4

2 に答える 2

4

はい、できます。プロシージャを作成して、トリガーで呼び出すことができます。手順例:

DELIMITER //

CREATE PROCEDURE delete(in table VARCHAR(300), in db VARCHAR(300), in id INT)
BEGIN

set @query0 = CONCAT('DELETE FROM ', new_db, '.', tabela, ' WHERE id=',id);

PREPARE select_query0 FROM @query0;
EXECUTE select_query0;
DEALLOCATE PREPARE select_query0;

END; //

DELIMITER ;

そして、トリガーを作成するには:

CREATE TRIGGER del_trigger BEFORE DELETE ON table
  FOR EACH ROW BEGIN
    CALL delete(db, table, OLD.id); 
  END;
于 2012-09-14T09:38:17.210 に答える
4

私はそれが古いトピックであることを知っていますが、私は自分でクロスデータベーストリガーを実装する必要がありました。他の読者がそれから利益を得るかもしれないので、ここで解決策を示したいと思います。

トリガーのコード内で、フルネームでターゲットデータベースを参照することができますdatabase_name.table_name

同じサーバー上に2つのデータベースがあるとします:database1database2。2つのデータベースのそれぞれに、次の表があります。

CREATE TABLE 'test' (
  'id' int(10) DEFAULT NULL,
  'name' varchar(100) DEFAULT NULL
)

で、次のINSERTトリガーを作成しdatabase1ます。

USE database1;

DELIMITER //
CREATE TRIGGER sync_insert AFTER INSERT ON test 
FOR EACH ROW
BEGIN
INSERT INTO database2.test SET id = NEW.id, name=NEW.name;
END; //
DELIMITER ;

UPDATEとDELETEに対して同様のトリガーを定義します。

このソリューションは、手順を使用するよりも単純で簡単だと思います。

上記をMySQL5.1.73とMariaDB10.2.13でテストしました。

于 2018-03-23T14:35:14.117 に答える