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

bagaimana menerapkan batasan keunikan bersyarat

Tentukan batasan unik Anda di satu bidang lagi:deleted dan bidang pseudo-unik Anda. Kemudian, untuk mewakili penghapusan lunak, tetapkan id model ke deleted; untuk item yang tidak terhapus, tetapkan 0.

Dengan pendekatan ini, untuk item yang tidak terhapus, karena deleted bidang bernilai konsisten, batasan unik multi-bidang akan secara efektif mengabaikan nilai deleted dan menegakkan keunikan hanya untuk bidang pseudo-unik; untuk item yang dihapus, deleted akan diperhitungkan, dan karena itu unik, batasannya akan selalu terpenuhi - sehingga sejumlah model dengan nilai bidang pseudo-unik yang sama dapat hidup berdampingan.

Misalnya, kode berikut mungkin yang Anda cari.

class Deletable(models.Model):
    deleted = models.IntegerField(default=0)

    class Meta:
       abstract=True

    def soft_delete(self):
       self.deleted=self.id
       self.save()

class ConcreteModel(Deletable):
    a = models.IntegerField()
    b = models.IntegerField()

    class Meta:
       unique_together=('a', 'b', 'deleted')


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. html/php/sql formulir dengan sisipan/perbarui

  2. MySQL GROUP BY rentang usia termasuk rentang nol

  3. Apa perbedaan antara utf8_unicode_ci dan utf8_unicode_520_ci

  4. Mysql - memilih tahun dari cap waktu unix

  5. dapatkan data dari database mysql untuk digunakan dalam javascript