Les transactions imbriquées sont-elles autorisées dans MySQL?


Réponses:


78

InnoDBprend en charge SAVEPOINTS.

Vous pouvez faire ce qui suit:

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
ce n'était pas la question, les "points de sauvegarde" sont une chose que le support des "transactions imbriquées" était la vraie question. Voir ce lien
arod

1
@arod: pourriez-vous expliquer la différence dans un contexte à un seul thread? Merci!
Quassnoi le

@Quassnoi Je crois que les commandes envoyées à la base de données diffèrent, n'est-ce pas? Je pourrais me tromper
arod

2
@Quassnoi le lien que j'ai fourni était de montrer que les transactions imbriquées sont désormais prises en charge. Maintenant, les points de sauvegarde sont puissants, mais ils ne sont pas les mêmes que BEGIN, COMMIT / ROLLBACK imbriqués (en parlant de programme, en termes de commandes) bien que vous sembliez assez sûr que dans un «contexte à un seul thread», ils sont équivalents. J'avais l'intention de répondre directement à la question (3 ans plus tard :) ...
arod

12
@arod: vous savez que le lien que vous avez fourni n'a rien à voir avec MySQL, n'est-ce pas?
Quassnoi le

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.