Чи дозволені вкладені транзакції в 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
це не було питання, "точки збереження" - це одне, що справді було підтримкою "вкладених транзакцій". Дивіться це посилання
arod 02

1
@arod: не могли б ви пояснити різницю в однопотоковому контексті? Дякую!
Quassnoi

@Quassnoi Я вважаю, що команди, що видаються БД, різняться, чи не так? Я можу помилитися
arod

2
За допомогою посилання @Quassnoi я мав показати, що вкладені транзакції тепер підтримуються. Зараз точки збереження є потужними, але вони не те саме, що вкладені BEGIN, COMMIT / ROLLBACK (програмно кажучи, командно), хоча ви здаєтесь цілком впевненими, що в "однопотоковому контексті" вони еквівалентні. Я мав намір звернутися до цього питання безпосередньо (через 3 роки :) ...
arod

12
@arod: ви знаєте, що надане вами посилання не має нічого спільного з MySQL, правда?
Quassnoi

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.