क्या 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
@ एरोड: क्या आप कृपया एकल-सूत्र के संदर्भ में अंतर बता सकते हैं? धन्यवाद!
Quassnoi

@Quassnoi मुझे विश्वास है कि डीबी को जारी किए गए आदेश अलग-अलग हैं, न? मुझसे गलत हो सकता है
arod

2
@Quassnoi मैंने जो लिंक प्रदान किया, वह यह दिखाने के लिए था कि नेस्टेड लेनदेन अब समर्थित हैं। अब, savepoint शक्तिशाली हैं, लेकिन वे नेस्टेड BEGIN, COMMIT / ROLLBACK (प्रोग्रामिक रूप से बोलना, कमांड-वार) के समान नहीं हैं, हालांकि आप यह सुनिश्चित करते हैं कि "सिंगल-थ्रेडेड संदर्भ" में वे समान हैं। मैंने सीधे प्रश्न को संबोधित करने का इरादा किया (3 साल बाद :) ...
arod

12
@ एरोड: आप जानते हैं कि आपके द्वारा दिए गए लिंक का MySQL से कोई लेना-देना नहीं है, क्या आप नहीं?
क्वासोई

38

MySQL प्रलेखन से:

लेन-देन को नस्ट नहीं किया जा सकता है। जब आप किसी START लेन-देन का विवरण या उसके किसी पर्यायवाची को जारी करते हैं, तो यह किसी भी मौजूदा लेनदेन के लिए की गई निहित कमिट का परिणाम होता है। https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.