【发布时间】:2011-01-27 09:44:19
【问题描述】:
我正在尝试为单个按钮创建一个代码,它将执行两个操作之一,如果用户当前没有记录,它将添加到数据库中,而如果用户已经有记录了。我是这样做的:
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...");
}
有可能吗?
【问题讨论】:
标签: mysql
是的,您所写的将起作用。如果您有办法知道是否已经存在一行,而无需仅针对这段代码进行额外查询,那么请完全按照您编写的方式进行操作。
但是,如果您计划首先从表中SELECT 以查看是否存在行,然后有条件地INSERT 或UPDATE,您将执行不必要的查询。
最好是:
在表上设置 PRIMARY KEY 或其他约束以防止重复 INSERTs。然后发出INSERT ... ON DUPLICATE KEY UPDATE 查询。这将尝试INSERT 该行,如果它是重复的,则自动对该行执行指定的UPDATE。
发出UPDATE 查询并检查mysql_affected_rows 以查看它是否更新了现有行。如果没有,则发出 INSERT 查询以创建新行。
哪个更合适取决于您的应用程序。
【讨论】:
UPDATE 和affected_rows - 少一个查询。只有一个问题,_affected_rows 如果不需要更新任何内容,也会返回 0(记录存在,但数据相同)
PRIMARY KEY 或UNIQUE 索引的一部分。如果您不允许该条目有两行,则应通过数据库约束来表达。
你可以使用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 ... ON DUPLICATE KEY UPDATE 语法 (在这里解释 - Link to MYSQL ref 这似乎最符合您的要求。
【讨论】:
是的,有可能
首先编写一个查询来检查记录是否已经存在。
【讨论】:
是的,这是可能的,它会起作用的
【讨论】: