0

挿入または更新してから、新しいログを別のテーブルに挿入したい。

ステージングテーブルから他のテーブルに情報をプルするための気の利いた小さなクエリを実行しています。

重複キーの更新時にselectに挿入

私がphpまたはトリガーなしでやりたいこと(リード開発者はemが好きではなく、私もそれらに精通していません)は、新しいレコードをロギングテーブルに挿入することです。どのデータが更新または挿入されたか、およびどのテーブルについて報告するために必要です。

ヒントや例はありますか?

注:5万行の処理には約4時間かかりましたが、これはphpで問題なく実行していました。laravel phpフレームワークを使用して、ステージングの各エントリをループすると、他の4つのテーブルのデータとログが、各行に対して8つのクエリに等しくなります(これは、raw sqlではなくlaravelモデルを使用していました)。ログを配列にプッシュしてバッチ処理することで最適化することができました。しかし、そのスループットをすべてバイパスすることによって、mysqlの15秒の処理時間を打ち負かすことはできません。今、私はSQLの方法で素晴らしいことをすることに夢中になっています。

4

3 に答える 3

1

複数のクエリステートメントを実行する必要がある場合。AtomicityACIDの一部)を保証するためにトランザクションを使用してからトリガーすることを参照します。以下のコードはMySqlトランザクションのサンプルです:

START TRANSACTION;
UPDATE ...
INSERT ...
DELETE ...
Other query statement
COMMIT;

トランザクション内のステートメントは、すべてまたはまったく実行されません。

于 2012-09-24T15:26:07.733 に答える
0

2つのこと(ベース行を挿入してログ行を挿入する)を実行する場合は、2つのステートメントが必要になります。2番目はトリガーになる可能性があります(そしてそうすべきです)。

于 2012-09-23T15:33:55.777 に答える
0

トリガーを使用することをお勧めします。これは、ロギングの目的でよく使用されます。

于 2012-09-24T14:39:56.993 に答える