0

我正在为网站构建一个分析工具,并简化我的插入序列,如下所示:

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()INSERT DELAYED语句中使用。您只是不能LAST_INSERT_ID()用来获取延迟语句的 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 回答