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

Bagaimana menghindari kondisi balapan dengan pemeriksaan unik di Django

Cara standarnya adalah TIDAK menangani ini, seperti:

  1. probabilitas kegagalan dalam kasus Anda mendekati 0;
  2. tingkat keparahan kegagalan sangat rendah.

Jika, karena alasan tertentu, Anda harus yakin bahwa masalahnya tidak akan terjadi, Anda sendirian.

Saya belum menganalisis urutan kejadian secara detail tetapi saya pikir menggunakan tingkat isolasi SERIALIZABLE tidak akan terlalu membantu, itu hanya akan menyebabkan IntegrityError (atau DatabaseError ) untuk dibesarkan di tempat yang berbeda.

Mengganti Model._perform_unique_checks kedengarannya seperti ide yang buruk, Anda sebaiknya menjauh dari patching monyet jika memungkinkan (dan ini dia ini mungkin).

Adapun menggunakan kunci meja untuk mencegah kesalahan yang tidak mungkin terjadi... Yah, saya bukan penggemar berat jadi saya juga tidak bisa merekomendasikannya.

Inilah jawaban yang bagus untuk pertanyaan serupa:https://stackoverflow.com/a/3523439/176186 - Saya setuju bahwa menangkap IntegrityError dan mencoba lagi mungkin merupakan cara termudah untuk mengatasi masalah tersebut.

EDIT:Saya menemukan ini:Symfony2 - bagaimana memulihkan dari kesalahan kendala unik setelah pengiriman formulir? dan saya setuju dengan jawaban @pid.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menggunakan kebalikan dari BETWEEN dalam kueri MySQL?

  2. MySQL ODBC 5.1 Set Nama tidak diizinkan oleh driver

  3. Bisakah kolom yang sama memiliki kunci utama &batasan kunci asing ke kolom lain?

  4. cara mendapatkan id angka terkecil di mysql menggunakan fungsi MIN()

  5. Bagaimana Anda mendapatkan banyak hasil dari satu CallableStatement?