是否可以声明mysql查询?

时间:2011-01-27 09:44:20

标签: mysql

我正在尝试为单个按钮创建一个代码,它将执行两个操作中的任何一个,如果用户当前没有记录,它将添加到数据库,而如果用户将更新用户的记录已有记录。我这样做了:

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

有可能吗?

6 个答案:

答案 0 :(得分:2)

是的,你写的东西会起作用。如果你有办法知道是否已经存在一行而没有为这段代码做一个额外的查询,那么就像你写的一样。

但是,如果您计划从表中首先SELECT查看是否存在行,然后有条件地INSERTUPDATE,则会执行超出必要的查询。

最好是:

  1. 在表格上有PRIMARY KEY或其他约束可防止重复INSERT。然后发出INSERT ... ON DUPLICATE KEY UPDATE个查询。这将尝试INSERT该行,如果它是重复的,则会自动执行指定的UPDATE到该行。

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

  3. 哪一个更合适取决于您的申请。

答案 1 :(得分:2)

您可以使用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

答案 2 :(得分:1)

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

REPLACE INTO table VALUE (...);

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

答案 3 :(得分:1)

是的,您可以尝试插入,如果失败则尝试更新。

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

您还可以使用INSERT ... ON DUPLICATE KEY UPDATE语法 (在此解释 - Link to MYSQL ref似乎最符合您的要求。

答案 4 :(得分:0)

是的,这是可能的

首先编写一个查询,以检查记录是否已存在。

答案 5 :(得分:0)

是的,有可能,它会起作用