假设我有一个表user_count
定义如下:
id primary key, auto increment
user_id unique
count default 0
当用户的现有记录存在或插入新记录时,我想要做的是将count
增加1。
目前,我这样做(在Python中):
try:
cursor.execute("INSERT INTO user_count (user_id) VALUES (%s)", user.id)
except IntegrityError:
cursor.execute("UPDATE user_count SET count = count+1 WHERE user_id = %s", user.id)
它也可以这样实现:
cursor.execute("INSERT INTO user_count (user_id) VALUES (user_id) ON DUPLICATE KEY UPDATE count = count + 1", user.id)
这两种方式有什么区别,哪种方式更好?
答案 0 :(得分:1)
第一个使用异常来指导程序的流程,这不是你应该做的,除非你没有其他解决方案(例如获得对文件的独占访问)。此外,它需要数据库中的工作,这应该更好地处理案例。
第二个代码处理数据库中的所有工作,这反过来可以非常有效地优化查询计划。
我会使用第二种解决方案,因为数据库通常比自己更了解如何处理案例。
答案 1 :(得分:1)
第二个是单个SQL命令,它利用数据库提供的功能来解决您在此处遇到的问题。
它会使用它,因为它应该更快,更可靠。
如果该功能不可用,那么第一个是后备(较旧的数据库版本?)。