programing

마리아DB 삽입 위치...선택...0 행에 영향을 주는 중복 키 업데이트 켜기

nicescript 2023. 1. 13. 20:02
반응형

마리아DB 삽입 위치...선택...0 행에 영향을 주는 중복 키 업데이트 켜기

마리아에 다음 테이블을 만들었습니다.DB

테이블 작성

CREATE TABLE `email_templates_pending` (
  `template_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `template_name` varchar(100) NOT NULL,
  `template_data` text,
  `modify_type` varchar(16) NOT NULL,
  `modify_by` varchar(50) NOT NULL,
  `modify_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`template_id`),
  UNIQUE KEY `template_name` (`template_name`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

그리고 그 테이블에 행을 삽입하고template_id = 1아래를 사용하여 행을 업데이트하고 싶었습니다.INSERT INTO...SELECT...ON DUPLICATE KEY UPDATE아래 명세서

SQL 문

INSERT INTO email_templates_pending
          (template_id, template_name, template_data,  modify_by,    modify_type) 
    SELECT template_id, template_name, template_data, 'test@test.com', 'Deleted'
        FROM email_templates WHERE template_id= '1' 
ON DUPLICATE KEY UPDATE modify_type='Deleted'

단, 명령어를 실행하면 정상적으로 반환되지만0 rows affected다른 컬럼 이름을 가진 다른 유사한 테이블이 있습니다.template_id가 프라이머리 키임을 확인했습니다만, 다른 문제는 없는지 잘 모르겠습니다.

email_templates_pending에 행이 1개 있지만 email_templates에는 행이 없습니다.

이것이 0 행이 영향을 받은 이유일 수 있습니다.소스 테이블에 행이 없습니다.

INSERT INTO email_templates_pending ...
SELECT ... FROM email_templates

ID = 1에 대해 업데이트하려는 경우 다음을 사용할 수 있습니다.

INSERT INTO email_templates_pending (template_id, template_name, template_data, modify_by, modify_type) 
SELECT template_id, template_name, template_data, 'test@test.com', 'Deleted' FROM email_templates_pending 
ON DUPLICATE KEY UPDATE modify_type='Deleted';

UPDATE만 수행해야 하는 경우 직접 UPDATE 문을 사용할 수도 있습니다.

UPDATE email_templates_pending SET modify_type='Deleted' WHERE template_id= '1';

id#1이 존재하고 이미 "Deleted"로 표시되어 있으면 "Deleted"로 올바르게 표시됩니다.

이것이 해당되지 않음을 증명하기 위해 다음 출력 결과를 보겠습니다.

SELECT template_id, template_name, template_data,  modify_by,    modify_type
    FROM email_templates WHERE template_id= '1' ;

언급URL : https://stackoverflow.com/questions/35908841/mariadb-insert-into-select-on-duplicate-key-update-affecting-0-rows

반응형