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!
mysql mengubah suai nama jadual data
MySQL mencipta prosedur tersimpan
Pangkalan data tiga paradigma
Perbezaan antara mongodb dan mysql
Bagaimana untuk menyemak sama ada kata laluan mysql terlupa
mysql mencipta pangkalan data
tahap pengasingan transaksi lalai mysql
Perbezaan antara sqlserver dan mysql