web-dev-qa-db-ja.com

mysqlデータベースリスナー

変更を監視するために、mysqlのテーブルにある種のリスナーをアタッチする方法はありますか?これを検索しようとしましたが、何も見つかりませんでした。ライブアップデートでUIを作成するためにこれを実行したいと思います。

2
Zitrax
show table status like 'tablename'

テーブルが最後に更新された日時に関する詳細が表示されます。

また、テーブルにインクリメントする主キー(auto_increment、timestampなど)がある場合、HANDLERインターフェイスは、テーブルに挿入された新しい行を追跡するのに役立ちます。新しいデータが到着するまでブロックします。

http://dev.mysql.com/doc/refman/5.0/en/handler.html

他の回答で述べたように、テーブルにトリガーを追加するのがおそらく最も柔軟なソリューションです。トリガーは変更を記録する監査テーブルを更新し、アプリは監査テーブルをポーリングして変更を反映することができます。

3
Martin

これを実現する方法はいくつかありますが、データベースよりもアプリコードでこれを行う方がよいと思います。

DBでこれを実行したい場合は、MySQLプロキシとMySQLトリガーの2つのオプションがあります。 MySQLトリガーがSQLの実行以外のことを実行できるかどうかはわかりませんが、それで十分である可能性があります。それらを使用して「更新」テーブルを作成し、定期的にポーリングできます。それをしたくない場合は、LuaでMySQLプロキシスクリプトを記述して必要なことを実行できますが、それははるかに難しいでしょう。

トリガーを扱うMySQLマニュアル: http://dev.mysql.com/doc/refman/5.0/en/triggers.html

MySQLプロキシの概要: http://dev.mysql.com/tech-resources/articles/proxy-gettingstarted.html

2

テーブルのtimestamp_inserted列は役に立ちますか?

新しい列timestamp_insertedがデフォルトでNOW()に設定されている場合、それを追加しても、コードの変更はそれほど深刻ではない可能性があります。 MySQLでは、INSERT時にデフォルトの列を指定する必要はないと思います。

Andrewが言及したトリガーを使用すると、更新や削除など、より多くのイベントを処理できます。

0
Paul

C++を知っている場合は、MySQL ReplicationListenerライブラリを使用してChangeData Captureを実行できます。 https://launchpad.net/mysql-replication-listener