2

我有一个带有自动递增主键的 MySQL 表、一个人名列和一些数据。

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

IE

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,但我只想在名称相同时更新,而不是在主键相同时更新。

4

2 回答 2

7

Create a UNIQUE index on Name. ON DUPLICATE KEY UPDATE will then work correctly.

于 2013-01-26T18:44:22.507 回答
0

创建一个存储过程并在您的查询代码中简单地调用它

程序:

   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')
于 2013-01-26T18:57:00.207 回答