집 >데이터 베이스 >MySQL 튜토리얼 >트리거 잠금 없이 삽입 후 MySQL에서 기존 행을 업데이트하는 방법은 무엇입니까?
삽입 후 동일한 테이블의 기존 행을 업데이트하기 위한 MySQL 트리거
문제 설명
경우 새 행이 ACCOUNTS 테이블에 삽입되고, pk가 동일한 동일한 테이블의 해당 기존 행이 삽입됩니다. 새로 삽입된 행의 edit_on 열은 상태 열을 'E'로 설정하여 업데이트해야 합니다. 그러나 트리거 내에서 이 업데이트를 시도하면 해당 테이블이 트리거를 호출한 문에서 이미 사용 중이라는 오류가 발생합니다.
해결 방법
트리거 문에 의해 이미 수정되고 있는 트리거 내의 테이블 업데이트에 대한 제한 사항에 대한 대체 접근 방식은 다음과 같습니다. 필수입니다.
저장 프로시저
단일 트랜잭션에서 삽입 및 업데이트 작업을 모두 처리하는 저장 프로시저를 만듭니다. 관련 단계는 다음과 같습니다.
SQL 구문
CREATE PROCEDURE setEditStatus(IN NEW_pk INT, IN NEW_edit_on INT) BEGIN /* Insert new row into ACCOUNTS table */ INSERT INTO ACCOUNTS (pk, user_id, edit_on, status) VALUES (NEW_pk, /* User ID */, NEW_edit_on, 'A'); /* Update existing row */ UPDATE ACCOUNTS SET status = 'E' WHERE pk = NEW_edit_on; /* Commit changes */ COMMIT; END;
트리거
대신 저장 프로시저를 호출하도록 트리거를 수정합니다. 업데이트를 직접 시도하세요.
DELIMITER $$ DROP TRIGGER IF EXISTS `setEditStatus`$$ CREATE TRIGGER `setEditStatus` AFTER INSERT on ACCOUNTS FOR EACH ROW BEGIN CALL setEditStatus(NEW.pk, NEW.edit_on); END$$ DELIMITER ;
이 해결 방법을 사용하면 트리거 내에서 동일한 테이블 업데이트에 대한 제한을 위반하지 않고 원하는 업데이트가 수행되도록 합니다.
위 내용은 트리거 잠금 없이 삽입 후 MySQL에서 기존 행을 업데이트하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!