programing

방금 실행한 mysql 문을 취소하려면 어떻게 해야 하나요?

newsource 2022. 9. 24. 12:39

방금 실행한 mysql 문을 취소하려면 어떻게 해야 하나요?

최근에 실행된 mysql 쿼리를 취소하려면 어떻게 해야 하나요?

테이블 타입을 InnoDB로 정의하면 트랜잭션을 사용할 수 있습니다.설정이 필요합니다.AUTOCOMMIT=0및 발행할 수 있는 후COMMIT또는ROLLBACK쿼리 또는 세션이 끝날 때 트랜잭션을 제출하거나 취소할 수 있습니다.

ROLLBACK -- will undo the changes that you have made

이 작업은 트랜잭션 중에만 수행할 수 있습니다.

BEGIN;
INSERT INTO xxx ...;
DELETE FROM ...;

다음 중 하나를 수행할 수 있습니다.

COMMIT; -- will confirm your changes

또는

ROLLBACK -- will undo your previous changes

기본적으로:트랜잭션을 수행할 경우 롤백을 수행합니다.그렇지 않으면 MySQL 조회를 "실행 취소"할 수 없습니다.

ALTER TABLE과 같은 일부 명령에서는 트랜잭션(1과 2)에서도 MySQL에서는 이것이 불가능합니다.

이것으로 처리 중인 쿼리를 중지할 수 있습니다.

=> show process list를 사용하여 쿼리 프로세스의 ID를 찾습니다.

그리고 => kill id;

마지막 쿼리를 취소할 필요가 있을 뿐만 아니라(당신의 질문은 실제로 그것만을 가리키고 있는 것을 알고 있습니다).따라서 트랜잭션이 도움이 되지 않을 경우 이를 위한 회피책을 구현해야 합니다.

쿼리를 커밋하기 전에 원래 데이터를 복사하고 양쪽 테이블에서 동일해야 하는 고유 ID, 즉 롤백 테이블(변경되지 않은 데이터의 복사본 포함)과 실제 테이블("데이터보다 "더 많은" 데이터를 포함)에 따라 필요에 따라 데이터를 다시 씁니다.테이블이 많은 데이터베이스의 경우, 실제 테이블마다 사용하는 것보다 원본 데이터의 구조화된 덤프/데이터를 포함하는 단일 "테이블"을 사용하는 것이 더 좋습니다.실제 테이블의 이름, 행의 고유 ID, 세 번째 필드에는 데이터 구조와 값을 명확하게 나타내는 임의의 형식의 콘텐츠(예를 들어 XML)가 포함됩니다.이 세 번째 필드는 처음 두 개의 필드에 따라 해석되어 실제 테이블에 다시 쓰입니다.타임스탬프가 있는 네 번째 필드는 정리하는 데 도움이 됩니다.그의 롤백 테이블

트랜잭션의 "롤백"에도 불구하고 SQL-dialects에는 실제 실행 취소가 없기 때문에(내가 틀렸다면 정정해 주세요-아마도 지금은 있을 것입니다), 이것이 유일한 방법이며, 스스로 코드를 작성해야 합니다.

언급URL : https://stackoverflow.com/questions/2918831/how-can-i-undo-a-mysql-statement-that-i-just-executed