我想创建一个单一按钮的代码,它将执行两个操作之一,如果用户当前没有记录,它将添加到数据库,如果用户有更新用户的记录记录已经。我这样做了:是否可以声明到mysql查询?
if() {
mysql_query("INSERT INTO table...");
}
else {
mysql_query("UPDATE table SET...");
}
这可能吗?
我想创建一个单一按钮的代码,它将执行两个操作之一,如果用户当前没有记录,它将添加到数据库,如果用户有更新用户的记录记录已经。我这样做了:是否可以声明到mysql查询?
if() {
mysql_query("INSERT INTO table...");
}
else {
mysql_query("UPDATE table SET...");
}
这可能吗?
是的,你写的会起作用。如果你有办法知道是否已经存在一行或者没有为这些代码进行额外的查询,那么就按照你写的那样完成。
但是,如果您计划从表格中首先检查是否存在某一行,然后有条件地INSERT
或UPDATE
,那么您将执行的查询次数超过必要的次数。
这将是更好的之一:
对表的主键或其他约束防止重复INSERT
秒。然后发出INSERT ... ON DUPLICATE KEY UPDATE
查询。这将尝试到INSERT
该行,并且如果它是重复的,则自动执行指定的UPDATE
而不是该行。
发出UPDATE
查询并检查mysql_affected_rows
以查看它是否更新了现有的行。如果不是,则发出INSERT
查询以创建新行。
哪一个更合适取决于您的应用。
是的,这是可能的
首先写一个查询来检查记录是否已经存在或不存在。
可以使用INSERT ... ON DUPLICATE KEY UPDATE
语法,如:
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;
http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
是的,你可以尝试插入,然后如果失败尝试更新。
但是,您可以使用MYSQL sql“REPLACE”关键字,该关键字将插入新记录(如果不存在)或删除现有记录并插入新记录(如果存在)。
您也可以使用INSERT ...对重复密钥更新语法 (这里解释 - Link to MYSQL ref这似乎是最接近适合您的要求
是的,它是可能的,它会工作
我喜欢`UPDATE`和`affected_rows` - 少一个查询。只有一个问题,`_affected_rows`也将返回0,如果它不需要更新任何东西(记录存在,但数据是相同的) – 2011-01-27 10:17:32