如果存在,则更新,否则插入


14

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

在上述表中,reg_idINT)是一列,其值可以更改为machine_id

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

一个人可以帮我写QUERY/ PROCEDURE

Answers:


12

希望对您有所帮助,复制密钥更新

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

SQL Fiddle上工作


他们可能也需要reg_id = VALUES(reg_id)
ypercubeᵀᴹ

如果我们有两个查询条件,我的意思是不仅键是唯一的?
山姆

11

唯一的问题是,您不能像普通查询一样使用它。诸如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 ;

并这样称呼它:

call select_or_insert();

并做了


1
您好@Taz,您能核对一下答案吗?
Craig Efrein 2015年

@Craig Efrein嗨。我去了第一个。您的答案。再次感谢。
塔兹2015年

@Taz我很高兴此信息对您有所帮助,如果此答案可以消除您的疑问,请继续解决问题。
Bill N. Varelli 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.