12-12-2018, Saat: 11:38
(Son Düzenleme: 12-12-2018, Saat: 11:41, Düzenleyen: Tuğrul HELVACI.)
Sanıyorum bu bir seri haline gelecek maalesef. Ama ben, uzun zaman Ferrari (Sql Server) kullandıktan sonra bu MySQL bana at arabası gibi gelmeye başladı. Muhtemelen biliyorsunuzdur ama ben yeni kullandığım için yeni öğrendim:
MySQL'de nested (iç içe) transactionj desteği YOK. ! Gerçekten de yok. İnanılır gibi değil açıkçası. Bir yanlışlık yapıyorumdur diye düşündüm, arkadaşımı çağırdım ve ona sordum; o da teyid etti. Sonra dökümantasyonda da gördüm. Uzun lafın kısası şu şekilde bir şey çalışmıyor.
Göreceğiniz üzere, siz dıştaki transaction'u (Delphi tarafındaki); Rollback etseniz de veriler ilgili tabloya yazılmış olacak. Ayrıca dökümantasyonda bana saçma gelen bir başka nokta daha var, çok dikkatli olmayı gerektirecek.
Beginning a transaction causes any pending transaction to be committed. See Section 13.3.3, “Statements That Cause an Implicit Commit”, for more information.
Dökümantasyonda bulabilirsiniz. Bu kısımda özetle şunu diyor: Sizin açık bir transaction'unuz var ise yeni bir transaction başlatma eylemi açık olan transaction'un commit edilmesi ile neticelenir.
Ben inanamadım, böyle RDBMS mi olur. Aman siz siz olun ya uzak durun ya da çok dikkatli olun.
Son olarak nested (iç içe) transactionlar ile ilgili şu kısa açıklamayı okumak isteyebilirsiniz.
Rezalet
MySQL'de nested (iç içe) transactionj desteği YOK. ! Gerçekten de yok. İnanılır gibi değil açıkçası. Bir yanlışlık yapıyorumdur diye düşündüm, arkadaşımı çağırdım ve ona sordum; o da teyid etti. Sonra dökümantasyonda da gördüm. Uzun lafın kısası şu şekilde bir şey çalışmıyor.
CREATE PROCEDURE sp_Sil() BEGIN START TRANSACTION; INSERT INTO tbl_dandik(Adi) SELECT 'Tuğrul'; COMMIT; END;
procedure SaveData; var AProc : TMyStoredProc; begin AProc := TMyStoredProc.Create(nil); AProc.Connection := VarOlanBirConnection; AProc.Connection.StartTransaction; try AProc.StoredProcName := 'sp_Sil'; AProc.ExecProc; AProc.Connection.Rollback; // Bir nedenden ötürü Rollback yapmak istedik. finally if Assigned(AProc) then FreeAndNil(AProc); end; end;
Göreceğiniz üzere, siz dıştaki transaction'u (Delphi tarafındaki); Rollback etseniz de veriler ilgili tabloya yazılmış olacak. Ayrıca dökümantasyonda bana saçma gelen bir başka nokta daha var, çok dikkatli olmayı gerektirecek.
Beginning a transaction causes any pending transaction to be committed. See Section 13.3.3, “Statements That Cause an Implicit Commit”, for more information.
Dökümantasyonda bulabilirsiniz. Bu kısımda özetle şunu diyor: Sizin açık bir transaction'unuz var ise yeni bir transaction başlatma eylemi açık olan transaction'un commit edilmesi ile neticelenir.
Ben inanamadım, böyle RDBMS mi olur. Aman siz siz olun ya uzak durun ya da çok dikkatli olun.
Son olarak nested (iç içe) transactionlar ile ilgili şu kısa açıklamayı okumak isteyebilirsiniz.
Rezalet
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...