php - Bagaimanakah mysql tidak boleh memasukkan data pendua tanpa menggunakan indeks?
PHP中文网
PHP中文网 2017-05-16 12:58:10
0
2
611

Terdapat dua medan dalam jadual iaitu a dan b.

Sebagai contoh, rekod adalah seperti berikut:
1, 2
1, 3
2, 3
1, 3

Penjelasan:
1 Antaranya, 1 dan 3 adalah data berulang.
2. Data pendua dibenarkan wujud dalam jadual.

Masalah: Apabila pengguna memilih data pendua untuk tidak ditambahkan ke pangkalan data, data yang ditambahkan oleh pengguna adalah seperti berikut.

2, 3
1, 4
1, 3

Hanya 1 dan 4 boleh dimasukkan, tetapi bukan yang lain Bagaimana untuk mencapai keperluan ini? Maaf

PHP中文网
PHP中文网

认证高级PHP讲师

membalas semua(2)
伊谢尔伦

Masalah ini lebih mudah untuk diselesaikan, gunakan penguncian optimistik, langkah-langkahnya adalah seperti berikut:
1 Cipta kunci cincang md5 (HashedKey) bagi (1, 3) tuple ke dalam redis, dan letakkan rekod yang sepadan dalam pertanyaan pertama ke dalam. redis;
2. Apabila memasukkan rekod, masukkan kunci cincang md5 daripada tuple baharu (1,3) ke dalam redis (mekanisme penguncian optimistik, ia membuktikan bahawa kunci itu sudah wujud dan operasi memasukkan). ditolak ;
3. Contoh algoritma hash adalah seperti berikut:

function goHashed($a,$b,&$hashedKey)
{
   //注意对a,b数据格式的判断和异常考虑
   const SALT = "Hello,world"
   $hashedKey = md5($a.SALT.$b.SALT)
}

=== Selepas melihat dengan teliti soalan itu, nampaknya ia mesti diselesaikan menggunakan MySQL ===

Jika anda tidak menggunakan indeks, saya benar-benar tidak mempunyai idea yang bagus Namun, jika anda boleh membina indeks, anda boleh membuat a->b membentuk medan jadual indeks, dan jenis indeks ialah. indeks unik ini juga boleh menyelesaikan masalah sisipan berulang.

为情所困

Tujuan menggunakan kekangan unik adalah untuk mengehadkan data pendua pada lapisan pangkalan data.

Jika anda ingin melepaskan sekatan ini, maka kami hanya boleh mengelakkannya melalui pengaturcaraan.

Penyelesaian yang paling langsung ialah sebelum memasukkan data, kami terlebih dahulu mencari data untuk menentukan sama ada medan yang perlu mempertimbangkan keunikan sudah wujud dengan nilai yang akan dikemas kini Jika wujud, tinggalkan kemas kini, jika tidak lakukan kemas kini operasi. TETAPI, Ini masih tidak dapat mengelakkan kemasukan data berulang Lagipun, masih terdapat situasi kemasukan data berulang yang tinggi

Disarankan apabila kekangan unik boleh digunakan, cuba ada jaminan kekangan yang unik Lagipun, ini adalah lapisan jaminan terakhir untuk sistem.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan