MySQL có cho phép sử dụng các giao dịch lồng nhau không?Các giao dịch lồng nhau có được phép trong MySQL không?
Trả lời
InnoDB
hỗ trợ SAVEPOINTS
.
Bạn có thể làm như sau:
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
---
Cảm ơn, tôi sẽ ghi nhớ điều này để tham khảo trong tương lai. –
đây không phải là câu hỏi, "savepoints" là một điều "lồng nhau giao dịch" hỗ trợ là câu hỏi thực sự. Xem [liên kết này] (http://docs.oracle.com/cd/E17076_02/html/gsg_txn/C/nestedtxn.html) – arod
@arod: bạn có thể giải thích sự khác biệt trong ngữ cảnh một luồng không? Cảm ơn! – Quassnoi
Nếu bạn sử dụng php, sau đó bạn có thể là thú vị trong https://github.com/Enelar/phpsql Nó hỗ trợ mysql và pgsql, và mở rộng để kết nối khác.
function TransferMoney()
{ // Nested transaction code could not even know that he nested
$trans3 = db::Begin();
if (!db::Query("--Withdraw money from user", [$uid, $amount], true))
return $trans3->Rollback();
db::Query("--Deposit money to system");
return $trans3->Commit();
}
$trans = db::Begin();
db::Query("--Give item to user inventory");
$trans2 = $trans->Begin();
$trans2->Query("--Try some actions and then decide to rollback");
$trans2->Rollback();
// Commit or rollback depending on money transfer result
return $trans->Finish(TransferMoney());
Từ tài liệu MySQL:
Giao dịch không thể được lồng vào nhau. Đây là hậu quả của cam kết ngầm được thực hiện cho bất kỳ giao dịch hiện tại nào khi bạn phát hành một câu lệnh START TRANSACTION hoặc một trong các từ đồng nghĩa của nó. https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html
- 1. Các giao dịch lồng nhau trong TSQL
- 2. giao dịch lồng nhau trong SQL Server
- 3. Giao dịch lồng nhau trong postgresql 8.2?
- 4. giao dịch lồng nhau với TransactionScope
- 5. Mục đích của các giao dịch lồng nhau
- 6. Lớp lồng nhau bên trong giao diện
- 7. 'DeferRefresh' không được phép trong giao dịch AddNew hoặc EditItem
- 8. vòng lồng nhau trong MySQL
- 9. Giao dịch lồng nhau sử dụng Spring và Hibernate
- 10. Phương pháp mở rộng không được phép trong các lớp tĩnh lồng nhau?
- 11. SQL SERVER 2008R2 Giao dịch lồng nhau với RAISERROR
- 12. Làm cách nào để tránh lỗi giao dịch lồng nhau không được hỗ trợ?
- 13. Truy vấn MySQL lồng nhau
- 14. Tối ưu hóa MySQL lồng nhau được chọn với phép tính số học
- 15. Làm cách nào để bật các giao dịch lồng nhau với ADO.NET và SQL Server?
- 16. Làm cách nào để đảm bảo rằng các giao dịch lồng nhau được cam kết độc lập với nhau?
- 17. Có phải khối lồng nhau được lồng trong Objective-C không?
- 18. Đối số lồng nhau không biên dịch
- 19. Các loại lồng nhau được công khai
- 20. Số giao dịch lồng nhau và/hoặc kết nối lồng nhau gây ra sự gia tăng MSDTC
- 21. Có thể giao dịch giữa các EJB từ các ứng dụng khác nhau trong Weblogic không?
- 22. Tại sao các phương thức mở rộng chỉ được phép trong lớp tĩnh không lồng nhau, không chung chung?
- 23. Cuộc sống không có giao dịch (MyISAM)
- 24. Thực hiện giao diện chung lồng nhau
- 25. Giao dịch mới không được phép vì có các chủ đề khác đang chạy trong phiên LINQ To Entity
- 26. MySQL INSERT với nhiều SELECT lồng nhau
- 27. Giao dịch có dừng tất cả các vấn đề về chủng tộc trong MySQL không?
- 28. Các mục QTreeView phẳng - không được lồng vào nhau
- 29. Cần trợ giúp với các hoạt động nguyên tử lồng nhau liên quan đến các giao dịch PDO
- 30. CA1034: Các loại lồng nhau không được hiển thị
mysql không hỗ trợ giao dịch lồng nhau – hamedkh