简体   繁体   中英

Mysql WHERE clause or php IF condition?

I often have to check a table column before performing an update, insert, or delete in mysql. I'm wondering if this is redundant because the mysql WHERE clause is already a condition.

Example:

  • A database table named private_messages stores private messages for users.

  • A column named read has a default value of 0 and updates to 1 when a user has read a message.

Which one of the two methods is most efficient and accurate for updating the table?

Perform a query, return the value of read , and use an if condition:

if (read == 0) //if user did not read message
{
   UPDATE private_messages
   SET read = 1
   WHERE id = 48 //the unique, auto increment index
}

Or simply add a WHERE AND clause to the query:

UPDATE private_messages
SET read = 1
WHERE id = 48
AND read = 0

and use mysql_affected_rows() to determine if a row was updated.

Edit: Another situation could be deleting a row if a column has a certain value. Should I use if condition or where ?

I believe MySQL checks whether the new value you're trying to insert is the same as the existing value, and only performs the write operation if they are different. So no need for the IF statement.

The first options makes two queries to the database. The second only one. There is your answer.

If you alread have the read variable in memory (ie, queried for other purposes), I would choose the first method, as if the message is not read, you won't need to query the database.

If you don't have the read variable in memory, use the second method, has it will only query the DB one time.

The second option appears to be more efficient, because it requires only a single round-trip to the server. However, benchmarking is the only way to be sure.

You don't need either. You can simply update the row (based on id) without checking for the current value of read . It still guarantees that after the query has been executed, the value of read is 1.

UPDATE private_messages
SET read = 1
WHERE id = 48

1) Makes 1 or 2 db queries. 2) Always makes 2 db queries because of the mysql_affected_rows() part.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM