programing

레코드 또는 업데이트가 이미 있는 경우 삽입하는 방법은 무엇입니까?

oldcodes 2023. 10. 6. 21:59
반응형

레코드 또는 업데이트가 이미 있는 경우 삽입하는 방법은 무엇입니까?

저는 기둥이 있는 테이블이 있습니다.record_id(자동 주식회사),sender,sent_time그리고.status.

"sender1"과 같은 특정 발신자의 기록이 없는 경우, 새로운 기록을 삽입해야 합니다. 그렇지 않으면 "user1"에 속한 기존 기록을 업데이트해야 합니다.

그래서 만약 이미 저장된 기록이 없다면, 나는 실행할 것입니다.

# record_id is AUTO_INCREMENT field
INSERT INTO messages (sender, sent_time, status)
VALUES (@sender, time, @status)

그렇지 않으면 UPDATE 문을 실행합니다.

아무튼..필드 발신자 값이 "user1"인 레코드가 없다면 기존 레코드를 업데이트하기 위해 이 두 문장을 결합하는 방법을 아는 사람이 있습니까?

MySQL은 삽입-온-중복 구문을 지원합니다.

INSERT INTO table (key,col1) VALUES (1,2)
  ON DUPLICATE KEY UPDATE col1 = 2;

표에 견고한 제약 조건이 있는 경우 를 사용할 수도 있습니다.MySQL에서 인용한 내용은 다음과 같습니다.

REFRANCE는 표의 이전 행이 Primary KEY 또는 UNIQUE 인덱스의 새 행과 동일한 값을 갖는 경우 새 행을 삽입하기 전에 이전 행이 삭제된다는 점을 제외하고는 INSERT와 동일하게 작동합니다.

구문은 기본적으로 다음과 같습니다.INSERT INTO, 그냥 바꿔치기INSERT타고REPLACE.

INSERT INTO messages (sender, sent_time, status) VALUES (@sender, time, @status)

그렇다면

REPLACE INTO messages (sender, sent_time, status) VALUES (@sender, time, @status)

이 명령어는 다른 DB에서는 발생하지 않는 MySQL 고유의 명령어이므로 휴대성을 염두에 두십시오.

다른 사람들이 언급한 것처럼 "중복 키 업데이트 시 삽입..."을 사용해야 하며, 때로는 "업서트"라고도 합니다.그러나 특정한 경우에는 업데이트에서 정적 값을 사용하지 않고 삽입 문의 values 절에 전달하는 값을 사용할 수 있습니다.

구체적으로 행이 이미 존재하는 경우 두 개의 열을 업데이트해야 한다고 생각합니다.

1) sent_time
2) status

이를 위해 예를 사용하여 다음과 같은 "upert" 문을 사용합니다.

INSERT INTO messages (sender, sent_time, status) 
VALUES (@sender, time, @status)
ON DUPLICATE KEY UPDATE 
  sent_time = values(sent_time),
  status = values(status);

"중복업데이트삽입"을 확인합니다.

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=c+1;

UPDATE table SET c=c+1 WHERE a=1;

한 가지 옵션은 중복 업데이트 구문에서 사용하는 것입니다.

http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html

다른 옵션은 레코드가 존재하는지 확인한 후 inser/update를 선택하는 것입니다.트랜잭션을 사용하는 경우 트랜잭션을 명시적으로 종료하지 않으므로 안전하게 사용할 수 있습니다.

use merge statement :

merge into T1
          using T2
          on (T1.ID = T2.ID)
    when  matched
    then  update set  
                      T1.Name = T2.Name
    when  not matched
    then  insert values (T2.ID,T2.Name);

언급URL : https://stackoverflow.com/questions/1952922/how-to-insert-a-record-or-update-if-it-already-exists

반응형