سؤال

هل يسمح MySQL باستخدام المعاملات المتداخلة؟

هل كانت مفيدة؟

المحلول

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
---

نصائح أخرى

من وثائق MySQL:

لا يمكن تداخل المعاملات. هذه نتيجة للالتزام الضمني الذي تم إجراؤه لأي معاملة حالية عند إصدار بيان بدء تشغيل أو أحد المرادفات الخاصة به. https://dev.mysql.com/doc/refman/5.7/ar/implicit-commit.html.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top