ASID ialah empat ciri yang mesti dimiliki untuk memastikan sesuatu transaksi adalah betul dan boleh dipercayai:
Atomicity: Operasi dalam transaksi berjaya atau gagal pada masa yang sama.
Ketekalan: Transaksi pangkalan data tidak boleh memusnahkan integriti data dan ketekalan logik perniagaan.
Pengasingan: Transaksi tidak menjejaskan operasi transaksi lain.
Ketahanan: Selepas urus niaga selesai, pengubahsuaian yang dibuat oleh urus niaga harus diteruskan dalam pangkalan data dan tidak akan ditarik balik.
Ambil A memindahkan 100 yuan kepada B sebagai contoh:
Atomicity: A Kerugian 100 yuan berlaku pada masa yang sama dengan penerimaan 100 yuan B.
Ketekalan: Akaun A tidak boleh negatif selepas kehilangan 100 yuan.
Pengasingan: Jika akaun A kehilangan 1 yuan dengan melaksanakan transaksi B semasa melaksanakan transaksi ini, maka ia sepatutnya kehilangan 101 yuan antara satu sama lain.
Kegigihan: Akaun A tidak boleh mendapatkannya semula selepas kehilangan 100 yuan.
Transaksi MySQL dilaksanakan oleh enjin storan InnoDB.
Anda boleh memulakan transaksi secara eksplisit dengan arahan berikut:
start transaction / (Begin); #一条或多条sql语句 Commit;
Selain itu, dalam mod autokomit, setiap SQL yang kami laksanakan Penyata adalah transaksi bebas; jika mod autokomit dimatikan, semua penyata SQL berada dalam satu transaksi sehingga komit atau rollback dilaksanakan, urus niaga tamat dan transaksi lain bermula.
Ciri-ciri ACID urus niaga MySQL dilaksanakan oleh mekanisme berikut:
Atomicity: batal log, log logik , rekod maklumat berkaitan pelaksanaan SQL. Apabila pemulangan berlaku, InnoDB akan melakukan perkara yang bertentangan dengan kerja sebelumnya berdasarkan kandungan log buat asal
Kegigihan: buat semula log, yang akan dipanggil apabila urus niaga dilakukan Antara muka fsync mengepam log buat semula.
Pengasingan: Mekanisme kunci dan MVCC.
Ketekalan: Reka bentuk pangkalan data itu sendiri.
Go language Gorm menyediakan sokongan untuk operasi transaksi:
db.Transaction(func(tx *gorm.DB) error { // 在事务中执行一些 db 操作(从这里开始,您应该使用 'tx' 而不是 'db') if err := tx.Create(&Animal{Name: "Giraffe"}).Error; err != nil { // 返回任何错误都会回滚事务 return err } if err := tx.Create(&Animal{Name: "Lion"}).Error; err != nil { return err } // 返回 nil 提交事务 return nil })
Selain itu, sebagai serta operasi seperti transaksi bersarang dan transaksi manual, anda boleh merujuk kepada dokumen Cina: Pengenalan terperinci kepada transaksi Go GORM
public class AClass { @Transactional(rollbackFor = Exception.class) public void aFunction() { //todo: 数据库操作A(增,删,该) } }
@Anotasi transaksi mesti ditambah. kepada kaedah awam , kaedah persendirian dan dilindungi adalah tidak sah.
Secara amnya, adalah disyorkan untuk menambah anotasi @Transactional pada kaedah, kerana @Transactional ditambahkan terus pada kelas atau antara muka dan anotasi @Transactional akan berkesan untuk semua kaedah awam dalam kelas atau antara muka , yang akan menjejaskan prestasi .
Atas ialah kandungan terperinci Ciri-ciri ACID dan kaedah pelaksanaan transaksi pangkalan data hubungan MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!