这两种实现“复制增量”的方式有什么区别?

时间:2011-03-22 01:23:09

标签: python mysql sql database

假设我有一个表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)

这两种方式有什么区别,哪种方式更好?

2 个答案:

答案 0 :(得分:1)

第一个使用异常来指导程序的流程,这不是你应该做的,除非你没有其他解决方案(例如获得对文件的独占访问)。此外,它需要数据库中的工作,这应该更好地处理案例。

第二个代码处理数据库中的所有工作,这反过来可以非常有效地优化查询计划。

我会使用第二种解决方案,因为数据库通常比自己更了解如何处理案例。

答案 1 :(得分:1)

第二个是单个SQL命令,它利用数据库提供的功能来解决您在此处遇到的问题。

它会使用它,因为它应该更快,更可靠。

如果该功能不可用,那么第一个是后备(较旧的数据库版本?)。