在mysql中执行更新,插入或删除之前,我经常需要检查一个表列。我想知道这是否多余,因为mysql WHERE
子句已经是一个条件。
示例:
名为private_messages
的数据库表存储私人消息
用户。
名为read
的列的默认值为0
,并更新为1
当用户阅读邮件时。
更新表格时,哪两种方法最有效,最准确?
执行查询,返回read
的值,并使用if
条件:
if (read == 0) //if user did not read message
{
UPDATE private_messages
SET read = 1
WHERE id = 48 //the unique, auto increment index
}
或者只是在查询中添加WHERE AND
子句:
UPDATE private_messages
SET read = 1
WHERE id = 48
AND read = 0
并使用mysql_affected_rows()
确定某行是否已更新。
编辑:如果列具有特定值,则另一种情况可能是删除行。我应该使用if
条件还是where
?
答案 0 :(得分:4)
我相信MySQL会检查您尝试插入的新值是否与现有值相同,并且只有在它们不同时才执行写入操作。所以不需要IF语句。
答案 1 :(得分:3)
第一个选项对数据库进行两次查询。第二个。有你的答案。
答案 2 :(得分:3)
如果你已经在内存中有read
变量(即,查询其他用途),我会选择第一种方法,就好像没有读取消息一样,你不需要查询数据库。
如果内存中没有read
变量,请使用第二种方法,它只会查询数据库一次。
答案 3 :(得分:1)
第二个选项似乎更有效,因为它只需要一次往返服务器。但是,基准测试是唯一可行的方法。
答案 4 :(得分:1)
你也不需要。您只需更新行(基于id),而无需检查read
的当前值。它仍然保证在执行查询后,read
的值为1。
UPDATE private_messages
SET read = 1
WHERE id = 48
答案 5 :(得分:0)
1)进行1或2个db查询。 2)由于mysql_affected_rows()部分,总是进行2个db查询。