Sorunuzun cevabı, birden fazla ifadeye yayılacak bir işlemin içinde olup olmadığınıza bağlıdır. (Soruyu InnoDB ile etiketlediniz, cevap MyISAM ile farklı olacaktır.)
Referans kılavuzundan: http://dev.mysql.com/doc/refman/5.1/en/commit.html
Varsayılan olarak, MySQL otomatik taahhüt modu etkinken çalışır. Bu, bir tabloyu güncelleyen (değiştiren) bir ifadeyi yürüttüğünüz anda MySQL'in güncellemeyi kalıcı hale getirmek için diskte sakladığı anlamına gelir.
Bu nedenle evet, varsayılan olarak, yalnızca kullanıyorsanız INSERT
, eklediğiniz kayıtlar işlenecektir ve bunları geri almaya çalışmanın bir anlamı yoktur. (Bu, etkili bir şekilde her ifadeyi BEGIN
ve arasında kaydırmakla aynıdır COMMIT
.)
Bununla birlikte, işlemlerle açıkça ilgileniyorsanız COMMIT
, kayıtları saklamak için kullanmanız gerekecek, ancak kullanabileceksiniz ROLLBACK
.
Bir işlemi START TRANSACTION
(veya BEGIN
) kullanarak açıkça başlatabilirsiniz . Bu autocommit
ayardan bağımsızdır (varsayılan olarak açık):
İŞLEMİ BAŞLAT seçeneğinde, siz COMMIT veya ROLLBACK ile işlem bitene kadar otomatik taahhüt devre dışı kalır. Otomatik devreye alma modu daha sonra önceki durumuna geri döner.
Alternatif olarak, eğer autocommit=0
, işlemin başka bir sonunu izleyen herhangi bir ifade, bir işlem başlatacağını düşünüyorum (ama yine de START TRANSACTION
açıkça kullanabilirsiniz ); en azından bunu yorumlamamın yolu :
Otomatik devreye alma modu. 1 olarak ayarlanırsa, tablodaki tüm değişiklikler hemen geçerli olur. 0 olarak ayarlanırsa, bir işlemi kabul etmek için COMMIT veya iptal etmek için ROLLBACK kullanmalısınız. Otomatik taahhüt 0 ise ve bunu 1 olarak değiştirirseniz, MySQL herhangi bir açık işlemin otomatik COMMIT'ini gerçekleştirir. Bir işleme başlamanın başka bir yolu da bir START TRANSACTION veya BEGIN deyimi kullanmaktır. Bkz. Bölüm 12.3.1, “İŞLEMİ BAŞLAT, KOMİTE VE GERİ BESLEME Sözdizimi”.
Daha spesifik olarak "bir işleme başlamanın başka bir yolu", "autocommit = 0" ayarının bir işlemi başlatmak için yeterli olduğu anlamına gelir (en azından bir oturumun başlangıcındaki her bir ifadeden hemen önce veya COMMIT
/ öğesini izleyen ROLLBACK
). İşlemin ne zaman başladığını veya bittiğini görmeyi daha net hale getirebileceğinden bile , açıkça BEGIN
veya START TRANSACTION
yine de kullanmanızı öneririm autocommit=0
.
(Bir işlemi nasıl başlatacağınız, uygulamanızın MySQL'i kullanma şekline bağlı olabilir.)