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