我在一个插件环境中工作,在这个环境中我有运行时可用的sqlite驱动程序。不过,我最近开始编写一些sql语句,这些语句利用了“on conflict”特性,效果很好。但我注意到,在使用sqlite驱动程序的不同版本时,该特性(关于冲突)不能正常工作,或者根本不存在。它在3.25.2及更高版本中运行良好,这是我正在使用的软件的新版本所提供的功能,但是当我尝试支持旧版本(3.21.0.1驱动程序的阴影)时,我在“on conflict”附近遇到了一个sql语法错误。声明如下:
INSERT INTO data(player_uuid, player_name, flags_domains, flags_ipv4, flags_words)
VALUES (?, ?, ?, ?, ?)
ON CONFLICT(player_uuid)
DO UPDATE SET flags_words = flags_words + 1, player_name = ?;
如前所述,在新的驱动程序上它确实正常工作,我甚至尝试在sqlite changelog网站上搜索一些东西,但我没有找到它不工作的原因,任何人都知道我如何解决“on conflict”?
1条答案
按热度按时间nlejzf6q1#
如果您的sqlite版本不支持upsert,那么您可以使用2条语句执行您想要的操作。
第一次更新:
如果
player_uuid
存在于表中,则该行将被更新。如果它不存在,什么也不会发生。
然后尝试插入
INSERT OR IGNORE
:如果
player_uuid
存在于表中不会发生任何事情。如果不存在,则插入新行。