gpt4 book ai didi

mysql - INSERT...ON DUPLICATE KEY UPDATE 与客户端流量控制 : pros and cons

转载 作者:行者123 更新时间:2023-11-29 03:07:07 30 4
gpt4 key购买 nike

我有一个 SQL 表,我必须根据主键的存在向其中插入或更新数据。上下文是在 MySQL 上运行的基于 CodeIgniter 的 PHP Web 应用程序。我发现了完全符合我需要的 INSERT...ON DUPLICATE KEY UPDATE 语句,但在此之前,代码是基于 CI 的 Active Record 实现的,看起来像这样:

$res = $this->db->get_where('table', array('id' => $this->_id));
if(count($res->result_array()) > 0) { // update if present
$this->db->where(array('id' => $this->_id));
$this->db->update('table', $hash);
return 2;
} else { // new entry if not present
$personal_data['id'] = $this->_id;
$this->db->insert('table', $hash);
return 1;
}

这个项目中的其他开发人员要求我保持简单,并且更喜欢使用 Active Record 代码而不是直接的 SQL 和准备好的查询,经过一段时间的思考后,我不确定什么最适合这种情况,因为两种情况都有利有弊。

例如,Active Record 解决方案从流量控制的角度来看非常简单,但在性能方面有很大的缺点,潜在的并发问题更大的缺点(如果第一个查询声明的条件在执行前发生变化)第二个查询的结果是不可预测的)。

另一方面,INSERT...ON DUPLICATE KEY UPDATE 工作正常并避免了并发问题,但它仅适用于 MySQL,可能导致可移植性问题,而且无法使用 CI 的 Active Record 构建我需要一个准备好的查询。

在这种情况下,最佳做法是什么?是否有其他更好的方法来实现预期结果?

最佳答案

最佳做法是让数据库处理此类约束,原因很简单,否则您需要信任应用程序的行为。

如果将其留给数据库,您可以允许任何/多个应用程序操作数据,而不必担心它们会破坏数据库架构。

关于mysql - INSERT...ON DUPLICATE KEY UPDATE 与客户端流量控制 : pros and cons,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13565927/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com