Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在MySQL中使用延迟插入并检索后续查询的ID?_Mysql_Mysql Insert Id - Fatal编程技术网

是否可以在MySQL中使用延迟插入并检索后续查询的ID?

是否可以在MySQL中使用延迟插入并检索后续查询的ID?,mysql,mysql-insert-id,Mysql,Mysql Insert Id,我正在为网站构建一个分析工具,为了简化我的插入顺序,如下所示: 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 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');
换句话说,有一个中心表和其他表使用主插入的ID链接到它。我想将这些插入转换为延迟插入,这样用户就不会因为负责存储分析数据的数据库服务器过载而无法处理所有写入操作而受到影响。但是,由于延迟插入不允许使用LAST_INSERT_ID(),因此我不确定如何维护表之间的上述关系


除了生成您自己的ID并为其分配唯一的索引,然后在必要时使用它来连接表之外,还有其他简单的方法吗

您可以在
INSERT DELAYED
语句中使用
LAST\u INSERT\u ID()。您不能使用
LAST\u INSERT\u 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中被弃用。考虑一种不同的方法。

你可以编写一个MySQL函数,该函数接受参数,并将所有的插入物插入到不同的表中。然后我很确定你可以延迟运行这个函数,这样用户就不必等待了,但是所有的插入仍然会同时发生,这样你就可以维护你的关系了。