Mysql WHERE子句还是php IF条件?

时间:2011-07-29 21:18:37

标签: php mysql where-clause

在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

6 个答案:

答案 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查询。