2011-03-22 74 views
0

假设我有一个表user_count定义如下:这两种实现'重复增量'的方式有什么区别?

id   primary key, auto increment 
    user_id  unique 
    count  default 0 

我想要做的是增量count一个当用户的现有记录存在,否则插入新记录。

目前,我做这样(在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) 

什么是这两种方式之间的区别,哪一个更好?

回答

1

第二个是一个SQL命令,它利用数据库提供的功能准确解决您在这里遇到的问题。

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

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

1

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

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

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

+0

+1 - 例外情况例外。所有这些让数据库能够做他们擅长的事情,而不是为应用程序代码添加额外的条件 – 2011-03-22 01:30:39

相关问题