>데이터 베이스 >MySQL 튜토리얼 >트리거 오류 없이 삽입 후 동일한 테이블을 어떻게 업데이트할 수 있습니까?

트리거 오류 없이 삽입 후 동일한 테이블을 어떻게 업데이트할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-10 22:22:10752검색

How Can I Update the Same Table After an Insert Without Trigger Errors?

삽입 후 동일한 테이블 업데이트 트리거: 대체 접근 방식

문제 개요

귀하 이를 기반으로 동일한 테이블의 열을 업데이트하는 ACCOUNTS 테이블에 트리거를 구현하려고 합니다. 새로 삽입된 행의 edit_on 값입니다. 그러나 이를 호출한 트리거 내에서 동일한 테이블을 업데이트하는 것에 대한 제한으로 인해 오류가 발생합니다.

대체 해결 방법: 저장 프로시저

이 제한을 우회하려면, 단일 트랜잭션 내에서 삽입 및 업데이트 작업을 모두 수행하기 위해 저장 프로시저를 사용할 수 있습니다. 이 접근 방식을 사용하면 변경 사항을 수동으로 커밋하여 원하는 업데이트를 활성화할 수 있습니다.

저장 프로시저 구현

다음은 목표를 달성하는 저장 프로시저의 예입니다.

DELIMITER $$
CREATE PROCEDURE InsertAndEditStatus(IN new_pk BIGINT)
BEGIN
  -- Insert new row into ACCOUNTS
  INSERT INTO ACCOUNTS (pk, user_id, edit_on, status)
  VALUES (new_pk, /* user_id */, NULL, 'A');
  
  -- Update existing row in ACCOUNTS
  UPDATE ACCOUNTS SET status='E' WHERE pk = NEW.edit_on;
  
  -- Commit transaction
  COMMIT;
END$$
DELIMITER ;

사용방법

저장된 이것을 사용하려면 프로시저에서 새로 삽입된 행의 기본 키를 인수로 사용하여 호출합니다.

CALL InsertAndEditStatus(2147483726);

이 프로시저는 지정된 기본 키와 기본값을 사용하여 새 행을 삽입한 다음 참조되는 기존 행을 업데이트합니다. 새로 삽입된 행의 edit_on 열은 편집되었음을 나타냅니다.

위 내용은 트리거 오류 없이 삽입 후 동일한 테이블을 어떻게 업데이트할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.