ネストされたトランザクションは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
---

19
これは問題ではありませんでした。「セーブポイント」は「ネストされたトランザクション」のサポートが本当の問題であったことの1つです。このリンクを
arod 2012

1
@arod:シングルスレッドコンテキストの違いを説明していただけますか?ありがとう!
Quassnoi 2012

@Quassnoi DBに発行されるコマンドは違うと思いますよね?私は間違っているかもしれません
arod 2012

2
@Quassnoi私が提供したリンクは、ネストされたトランザクションがサポートされるようになったことを示すためのものでした。現在、セーブポイントは強力ですが、ネストされたBEGIN、COMMIT / ROLLBACK(プログラム的に言えば、コマンドに関して)と同じではありませんが、「シングルスレッドコンテキスト」では同等であると確信しているようです。私は直接質問に答えるつもりでした(3年後:) ...
arod 2012

12
@arod:あなたが提供したリンクはMySQLとは何の関係もないことを知っていますね。
Quassnoi 2012

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.