Apakah transaksi bersarang diperbolehkan di MySQL?


Jawaban:


78

InnoDB mendukung SAVEPOINTS .

Anda dapat melakukan hal berikut:

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
ini bukan pertanyaannya, "savepoints" adalah satu hal yang mendukung "transaksi bersarang" adalah pertanyaan sebenarnya. Lihat tautan ini
arod

1
@arod: dapatkah Anda menjelaskan perbedaannya dalam konteks utas tunggal? Terima kasih!
Quassnoi

@Quassnoi Saya yakin perintah yang dikeluarkan untuk DB berbeda, bukan? Saya mungkin salah
arod

2
@Quassnoi tautan yang saya berikan adalah untuk menunjukkan bahwa transaksi bersarang sekarang didukung. Sekarang, savepoint sangat kuat, tetapi tidak sama dengan BEGIN bersarang, COMMIT / ROLLBACK (berbicara secara programatik, berdasarkan perintah) meskipun Anda tampaknya cukup yakin bahwa dalam "konteks single-threaded", keduanya setara. Saya bermaksud untuk menjawab pertanyaan tersebut secara langsung (3 tahun kemudian :) ...
arod

12
@arod: Anda tahu bahwa tautan yang Anda berikan tidak ada hubungannya dengan MySQL, bukan?
Quassnoi

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.