在SQLite中模拟MySQL的ON DUPLICATE KEY UPDATE
SQLite 缺少 MySQL 的 ON DUPLICATE KEY UPDATE 子句的直接等效项,该子句可以对具有预定义唯一约束的记录进行高效的更新和插入。但是,可以通过替代方法实现类似的效果。
替代方法
为了在 SQLite 中模拟 upsert,可以使用两种主要方法:
SELECT (INSERT 或 UPDATE):
UPDATE( 如果 UPDATE 失败则 INSERT):
推荐方法
两种方法各有优缺点,但第二种方法(使用 UPDATE( 如果 UPDATE 失败则 INSERT))通常更高效。它只需要单个数据库操作,并且避免了不必要的 SELECT 查询。
建议的代码片段
这是一个使用 "ip" 列上的唯一约束实现第二种方法的建议代码片段:
<code class="language-sql">INSERT OR IGNORE INTO visits VALUES ($ip, 0); UPDATE visits SET hits = hits + 1 WHERE ip LIKE $ip;</code>
或者,来自另一个 Stack Overflow 解决方案的以下代码片段提供了另一个有效的 upsert 实现:
<code class="language-sql">INSERT INTO visits (ip, hits) VALUES ($ip, COALESCE((SELECT hits FROM visits WHERE ip LIKE $ip), 0) + 1);</code>
以上是如何在 SQLite 中高效模拟 MySQL 的 ON DUPLICATE KEY UPDATE?的详细内容。更多信息请关注PHP中文网其他相关文章!