MySQL에서 중첩 된 트랜잭션이 허용됩니까?


답변:


78

InnoDB지원합니다 SAVEPOINTS.

다음을 수행 할 수 있습니다.

CREATE TABLE t_test (id INT NOT NULL PRIMARY KEY) ENGINE=InnoDB;

START TRANSACTION;

INSERT
INTO    t_test
VALUES  (1);

SELECT  *
FROM    t_test;

 id
---
  1

SAVEPOINT tran2;

INSERT
INTO    t_test
VALUES  (2);

SELECT  *
FROM    t_test;

 id
---
  1
  2

ROLLBACK TO tran2;

SELECT  *
FROM    t_test;

 id
---
  1

ROLLBACK;

SELECT  *
FROM    t_test;

 id
---

20
이것은 질문이 아니었다. "savepoints"는 "중첩 트랜잭션"지원이 진짜 질문이었다. 이 링크를
arod

1
@arod : 단일 스레드 컨텍스트의 차이점을 설명해 주시겠습니까? 감사!
Quassnoi

@Quassnoi DB에 발행 된 명령이 다르다고 생각합니다. 그렇지 않습니까? 나는 착각 할지도 모른다
arod

2
@Quassnoi 내가 제공 한 링크는 중첩 된 트랜잭션이 이제 지원된다는 것을 보여주기위한 것입니다. 이제 세이브 포인트는 강력하지만 중첩 된 BEGIN, COMMIT / ROLLBACK (프로그래밍 방식으로 말하면 명령 방식)과 동일하지 않습니다. 비록 "단일 스레드 컨텍스트"에서 동일하다고 확신 할 수 있습니다. 나는 질문을 직접적으로 다루려고했다 (3 년 후 :) ...
arod

12
@arod : 제공 한 링크가 MySQL과 관련이 없다는 것을 알고 있습니까?
Quassnoi

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.