我有一个带有自动增量主键的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,但我只想更新名称是否相同,而不是主键是否相同。
答案 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')