如果存在则更新否则插入

Taz*_*Taz 17 mysql

我正在尝试创建一个STORED PROCEDURE将用于UPDATE名为machine. 此表包含三列(machine_idmachine_namereg_id)。

在上述表中,reg_id( INT) 是一列,其值可以更改为 a machine_id

我想定义一个QUERY/PROCEDURE来检查reg_id该表中是否已经存在。如果是,则为UPDATE该行,否则INSERT为新行。

有人可以帮我写那个QUERY/PROCEDURE吗?

Bil*_*lli 15

唯一的问题是,您不能像普通查询一样使用它。像IFWHILE这样的控制结构只允许在存储过程或函数中使用。

只需创建一个这样的过程:

delimiter $$
create procedure select_or_insert()
begin
  IF EXISTS (select * from users where username = 'something') THEN
    update users set id= 'some' where username = 'something';
  ELSE 
    insert into users (username) values ('something');
  END IF;
end $$
delimiter ;
Run Code Online (Sandbox Code Playgroud)

并这样称呼它:

call select_or_insert();
Run Code Online (Sandbox Code Playgroud)

并做了


Cra*_*ein 13

希望这会有所帮助,重复密钥更新

create table machine(
  machine_id int not null primary key,
  machine_name varchar(50),
  reg_id int
);

insert into machine (machine_id, machine_name, reg_id)
values(1, 'my_machine', 1);

INSERT INTO machine (reg_id, machine_id, machine_name) VALUES (1, 1, 'test_machine')
  ON DUPLICATE KEY UPDATE machine_name=VALUES(machine_name);
Run Code Online (Sandbox Code Playgroud)

处理SQL Fiddle