【问题标题】:Update MySQL table if non-primary key column is duplicate, insert otherwise?如果非主键列重复,则更新 MySQL 表,否则插入?
【发布时间】:2013-01-26 18:29:23
【问题描述】:

我有一个 MySQL 表,其中包含一个自动递增的主键、一个人名列以及一些数据。

是否有一个 MySQL 查询,如果这个人的名字是唯一的,我可以在其中插入一个新行,但如果它是一个重复的名字,那么我会更新该行吗?

ID, Name,        Data
1 , Michael,     x
2 , Stephen,     y
3 , Christopher, z

如果我要使用“qq”数据将“Michael”添加到数据库中,我希望数据库如下所示:

ID, Name,        Data
1 , Michael,     qq
2 , Stephen,     y
3 , Christopher, z

如果我将“John”与“zz”数据相加,数据库将如下所示:

ID, Name,        Data
1 , Michael,     x
2 , Stephen,     y
3 , Christopher, z
4 , John,        zz

我知道命令 ON DUPLICATE KEY UPDATE,但我只想在名称相同时更新,而不是在主键相同时更新。

【问题讨论】:

标签: php mysql


【解决方案1】:

Name 上创建UNIQUE 索引。然后ON DUPLICATE KEY UPDATE 将正常工作。

【讨论】:

    【解决方案2】:

    创建一个存储过程并在查询代码中调用它

    程序:

       DROP PROCEDURE IF EXISTS InsUpdTable $$
            CREATE PROCEDURE InsUpdTable
            (
              IN _name VARCHAR(45),
              IN _data VARCHAR(45)
            )
            BEGIN
            if exists (select ID from mytable where name = _name)
            Then
              update mytable set data = _data where name=_name;
            else
              insert into mytable(name, data) values(_name, _data);
            END IF;
            END $$
            DELIMITER ;
    

    查询:

    call InsUpdTable('John','zzz')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-04
      • 2017-04-19
      • 1970-01-01
      • 1970-01-01
      • 2014-11-29
      • 2011-04-30
      • 1970-01-01
      • 2013-05-31
      相关资源
      最近更新 更多