如果非主键列重复,则更新MySQL表,否则插入?

时间:2013-01-26 18:29:23

标签: php mysql

我有一个带有自动增量主键的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

如果我要用“zz”数据添加“John”,数据库将如下所示:

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

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

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:0)

创建存储过程,只需在查询代码中调用它

  

<强> PROCEDURE:

   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')