aşağıdaki şeylerden üç yapmak bazı örnekler bulmakta sorun yaşıyorum hazırladı.Ham sql işlemleri ifadeleri
2) Hazırlanan ifadeleri kullanın.
3) Sorgu hatalarında geri alma.
Böyle bir şey yapmak istiyorum, ancak hazırlanmış ifadelerle. Ne verir pq: cannot insert multiple commands into a prepared statement
: Bu çalıştırdığınızda
stmt, stmt_err := db.Prepare(`
BEGIN TRANSACTION;
-- Insert record into first table.
INSERT INTO table_1 (
thing_1,
whatever)
VALUES($1,$2);
-- Inert record into second table.
INSERT INTO table_2 (
thing_2,
whatever)
VALUES($3,$4);
END TRANSACTION;
`)
if stmt_err != nil {
return stmt_err
}
res, res_err := stmt.Exec(
thing_1,
whatever,
thing_2,
whatever)
, bu hatayı alıyorum? ACID uyumlu işlemler golang'da bile mümkün mü? Bir örnek bulamıyorum.
EDIT örnek yok here.
Mükemmel çalışır. Teşekkürler dostum. – 1N5818
Gerçekten yararlı yazı, teşekkürler. Ama ne anlamadım ki, 'Bir işlemin bir Commit veya Rollback çağrısı ile bitmesi gerekir.', Tx.Prepare (bazı sql ..) 'nin neden olduğu bir hatayı döndürdüğünüzde, bir Commit veya Rollback yapmıyorsunuz . Neden? Söz konusu işlem bu senaryoda uygun şekilde kapatılmış mı? Temel Veritabanında herhangi bir değişiklik yapılmamasına rağmen, işlemi düzgün bir şekilde kapatmamız gerekmiyor mu? – BARJ
Bu kod, Go1.4 veya önceki sürüm için doğru değil, tx.Commit(), stmt.Close() 'dan önce gerçekleşecek olan havuza ilişkilendirilen bağlantıyı serbest bırakacak, bu da alttaki eşzamanlı erişime neden olabilir bağlantı, bağlantı durumunu tutarsız hale getirir. Burada belirtildiği gibi: http://go-database-sql.org/prepared.html –