0

私はウェブサイト用の分析ツールを構築しており、INSERT のシーケンスを単純化するために次のようにしています。

INSERT INTO visits (id, page, url) VALUES (null, 'http://...', '...');
INSERT INTO params (visit_id, name, val) VALUES (123, 'page', 'product');
INSERT INTO params (visit_id, name, val) VALUES (123, 'product_id', '7');

つまり、中央のテーブルと、メインの INSERT の ID を使用してそれにリンクする他のテーブルがあります。これらの INSERT を DELAYED INSERT に変換して、分析データの保存を担当するデータベース サーバーが過負荷になり、すべての書き込みを処理できなくなった場合にユーザーが苦しまないようにしたいと考えています。ただし、DELAYED INSERT では LAST_INSERT_ID() を使用できないため、テーブル間の上記の関係を維持する方法がわかりません。

独自の ID を生成して一意のインデックスを割り当て、必要に応じてそれを使用してテーブルを結合する以外に、簡単な方法はありますか。

4

1 に答える 1

1

ステートメントLAST_INSERT_ID()で使用できます。遅延ステートメントのIDを取得するためにINSERT DELAYED使用することはできません。LAST_INSERT_ID()代わりに、前の (遅延のない) 挿入の値を返します。

これはうまくいきます:

INSERT INTO visits (id, page, url) VALUES (null, 'http://...', '...');
INSERT DELAYED INTO params (visit_id, name, val) VALUES (LAST_INSERT_ID(), 'page', 'product');
INSERT DELAYED INTO params (visit_id, name, val) VALUES (LAST_INSERT_ID(), 'product_id', '7');

ただし、INSERT DELAYED最新バージョンの MySQL では非推奨です。別のアプローチを検討してください。

于 2013-12-06T19:59:49.557 に答える