2011-01-27 109 views
0

我想创建一个单一按钮的代码,它将执行两个操作之一,如果用户当前没有记录,它将添加到数据库,如果用户有更新用户的记录记录已经。我这样做了:是否可以声明到mysql查询?

if() { 
    mysql_query("INSERT INTO table..."); 
} 
else { 
    mysql_query("UPDATE table SET..."); 
} 

这可能吗?

回答

2

是的,你写的会起作用。如果你有办法知道是否已经存在一行或者没有为这些代码进行额外的查询,那么就按照你写的那样完成。

但是,如果您计划从表格中首先检查是否存在某一行,然后有条件地INSERTUPDATE,那么您将执行的查询次数超过必要的次数。

这将是更好的之一:

  1. 对表的主键或其他约束防止重复INSERT秒。然后发出INSERT ... ON DUPLICATE KEY UPDATE查询。这将尝试到INSERT该行,并且如果它是重复的,则自动执行指定的UPDATE而不是该行。

  2. 发出UPDATE查询并检查mysql_affected_rows以查看它是否更新了现有的行。如果不是,则发出INSERT查询以创建新行。

哪一个更合适取决于您的应用。

+0

我喜欢`UPDATE`和`affected_rows` - 少一个查询。只有一个问题,`_affected_rows`也将返回0,如果它不需要更新任何东西(记录存在,但数据是相同的) – 2011-01-27 10:17:32

1

如果您已正确设置唯一密钥,则应使用REPLACE,以便您可以删除if

REPLACE INTO table VALUE (...); 

请注意,这是一个MySQL扩展,因此不能移植到其他数据库。

0

是的,这是可能的

首先写一个查询来检查记录是否已经存在或不存在。

1

是的,你可以尝试插入,然后如果失败尝试更新。

但是,您可以使用MYSQL sql“REPLACE”关键字,该关键字将插入新记录(如果不存在)或删除现有记录并插入新记录(如果存在)。

您也可以使用INSERT ...对重复密钥更新语法 (这里解释 - Link to MYSQL ref这似乎是最接近适合您的要求