Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL AUTO_INCREMENT tidak ROLLBACK

Itu tidak bisa bekerja seperti itu. Pertimbangkan:

  • program satu, Anda membuka transaksi dan memasukkan ke dalam tabel FOO yang memiliki kunci utama autoinc (secara sewenang-wenang, kami mengatakan itu mendapat 557 untuk nilai kuncinya).
  • Program dua dimulai, membuka transaksi dan memasukkan ke dalam tabel FOO mendapatkan 558.
  • Program dua sisipan ke dalam tabel BAR yang memiliki kolom yang merupakan kunci asing untuk FOO. Jadi sekarang 558 terletak di FOO dan BAR.
  • Program dua sekarang dijalankan.
  • Program tiga dimulai dan menghasilkan laporan dari tabel FOO. Catatan 558 dicetak.
  • Setelah itu, program satu akan diputar kembali.

Bagaimana database mendapatkan kembali nilai 557? Apakah itu masuk ke FOO dan mengurangi semua kunci utama lainnya yang lebih besar dari 557? Bagaimana cara memperbaiki BAR? Bagaimana cara menghapus 558 yang tercetak pada program laporan tiga keluaran?

Nomor urut Oracle juga tidak bergantung pada transaksi karena alasan yang sama.

Jika Anda dapat memecahkan masalah ini dalam waktu yang konstan, saya yakin Anda dapat menghasilkan banyak uang di bidang basis data.

Sekarang, jika Anda memiliki persyaratan bahwa bidang kenaikan otomatis Anda tidak pernah memiliki celah (untuk tujuan audit, katakanlah). Maka Anda tidak dapat mengembalikan transaksi Anda. Alih-alih, Anda harus memiliki bendera status di catatan Anda. Pada insert pertama, status record adalah "Incomplete" kemudian Anda memulai transaksi, melakukan pekerjaan Anda dan memperbarui status menjadi "compete" (atau apa pun yang Anda butuhkan). Kemudian ketika Anda melakukan, catatan itu hidup. Jika transaksi dibatalkan, catatan yang tidak lengkap masih ada untuk diaudit. Ini akan menyebabkan Anda banyak sakit kepala lainnya tetapi merupakan salah satu cara untuk menangani jejak audit.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. meneruskan LIMIT sebagai parameter ke MySQL sproc

  2. Kesalahan saat mengganti nama kolom di MySQL

  3. Urutan MySQL berdasarkan kecocokan terbaik

  4. Cara Bergabung dengan MySQL dan Postgres dalam Tampilan Terwujud Langsung

  5. Tidak ada penyedia Entity Framework yang ditemukan untuk penyedia ADO.NET 'MySql.Data.MySqlClient'