존재하는 경우 다른 업데이트를 업데이트하십시오.


14

이라는 테이블에 STORED PROCEDURE사용될 을 만들려고합니다 . 이 테이블은 세 개의 열이 있습니다 ( , 및 ).UPDATEmachinemachine_idmachine_namereg_id

위에서 언급 한 표에서 reg_id( INT)는 값을 변경할 수있는 열입니다 machine_id.

해당 테이블에 이미 존재 하는지 확인하기 위해 QUERY/ 를 정의하고 싶습니다 . 그렇다면 해당 행, 그렇지 않으면 새 행.PROCEDUREreg_idUPDATEINSERT

누군가가 그 작성에 도움 저를 기쁘게 할 수 QUERY/을 PROCEDURE?

답변:


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ᵀᴹ

쿼리에 두 가지 조건이있는 경우 키만 고유하지 않다는 의미는 무엇입니까?
Sam

11

유일한 문제는 일반적인 쿼리처럼 사용할 수 없다는 것입니다. IF 또는 WHILE 과 같은 제어 구조 는 저장 프로시 저나 함수에서만 허용됩니다.

다음과 같은 절차를 만드십시오.

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

@Craig Efrein 안녕하세요. 나는 첫 번째와 함께 갔다. 당신의 대답. 다시 감사합니다.
Taz

@Taz이 정보가 도움이되었다 니 다행입니다.이 답변으로 의심을 제거 할 수 있다면 질문을 닫으십시오.
Bill N. Varelli
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.