php - 在事务中使用父关系批量 MYSQL 插入
问题描述
考虑两个表(我已经简化了一点,实际上有更多相关的表和更多的列):
TABLE 'visit'
-------------
- id (auto increment)
- visit_country
- visit_browser
TABLE 'pageview'
----------------
- id
- visit_id (relates to visit.id)
- page_url
每天,我都想在这些表中插入一个大约有 100.000 次访问和 400.000 次点击的 PHP 数组。加快这个过程的方法是
- 在一个查询中添加多个插入
- 并将整个查询打包成一个事务。
但是,我的问题是,为了插入浏览量,需要父访问的 Last Insert ID。在假设使用一个查询插入 1000 次访问的事务中,我不能再使用 PDO 的 lastInsertId() 方法。
理想情况下,我将所有内容都放在一笔交易中。一个不太理想的解决方案是插入所有访问并添加一个引用列,然后执行,检查每次访问获得的 ID,然后使用新事务插入命中。但这远非理想。
解决这个问题的方法是什么?ORM之类的Doctrine是如何解决这个问题的(我这里需要通过PDO依赖原始SQL)?
解决方案
你可以做这样的查询
$sql = "INSERT INTO `visit` (`id`, `visit_country`, `visit_browser`)
VALUES (NULL, :visit_country, :visit_browser);
INSERT INTO `pageview` (`visit_id`, `page_url`)
VALUES (NULL, LAST_INSERT_ID(), :page_url)";
比准备、绑定参数和执行
推荐阅读
- node.js - 如果不是英文结果,我怎样才能让它重新启动?
- html - 如何使底部段落位于 flexbox 中的标题下方?
- c - malloc 大小的一般建议
- java - 如何在无限滚动(延迟加载)中加载所有条目以解析 Java 中的 HTML
- node.js - 我的环境变量出现未定义
- mysql - Mysql 分组行
- vue.js - 如何将 v-for 与 Range 一起使用并使用 push() 添加其他输入
- angular - 使用 ej2 网格和刷新数据源网格时出现“错误类型错误:无法读取 null 的属性‘refreshUI’”
- powerapps - PowerApps 中每个月每周的第一天
- python - 我可以使用带有迭代器参数的函数生成列表吗?