【问题标题】:Is it possible to declare to mysql queries?是否可以向 mysql 查询声明?
【发布时间】:2011-01-27 09:44:19
【问题描述】:

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

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

有可能吗?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    是的,您所写的将起作用。如果您有办法知道是否已经存在一行,而无需仅针对这段代码进行额外查询,那么请完全按照您编写的方式进行操作。

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

    最好是:

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

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

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

    【讨论】:

    • 我喜欢UPDATEaffected_rows - 少一个查询。只有一个问题,_affected_rows 如果不需要更新任何内容,也会返回 0(记录存在,但数据相同)
    • 能否请您给我一个 INSERT...ON DUPLICATE KEY UPDATE 的示例?当我首先使用 SELECT 时 -shire
    • 你不要先做一个 SELECT ......这就是重点。我的答案中的文本链接到带有示例的手册页。
    • 如果不应该重复的行不是主键怎么办?
    • 使其成为PRIMARY KEYUNIQUE 索引的一部分。如果您不允许该条目有两行,则应通过数据库约束来表达。
    【解决方案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

    【讨论】:

      【解决方案3】:

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

      REPLACE INTO table VALUE (...);
      

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

      【讨论】:

        【解决方案4】:

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

        但是您可以使用 MYSQL sql "REPLACE" 关键字,如果它不存在,它将插入一条新记录,或者删除现有记录,如果存在则插入您的新记录。

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

        【讨论】:

          【解决方案5】:

          是的,有可能

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

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-01-07
              • 1970-01-01
              • 2017-11-21
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多