Menunda Kekangan Utama Unik/Utama: Menyiasat Masa Penangguhan
Dalam PostgreSQL, kekangan kunci unik dan utama boleh ditakrifkan sebagai sama ada boleh ditangguhkan atau tidak boleh ditangguhkan. Menangguhkan semakan kekangan menawarkan lebih fleksibiliti, membolehkan pengubahsuaian data berlaku sebelum kekangan dikuatkuasakan.
Masa Penguatkuasaan
Apabila kekangan ditandakan sebagai boleh ditangguhkan, masa penguatkuasaannya bergantung pada tetapan awalnya (SEGERA atau DITANGGUH) dan sebarang perubahan seterusnya menggunakan SET KEKANGAN. Berikut ialah ringkasannya:
Analisis Contoh
Mari kita periksa pertanyaan yang diberikan:
UPDATE tbl SET id = t_old.id FROM tbl t_old WHERE (t.id, t_old.id) IN ((1,2), (2,1));
KEMASKINI ini beroperasi pada berbilang baris, berpotensi melanggar asas unik kekangan utama. Walau bagaimanapun, ia berjaya kerana kekangan itu ditakrifkan sebagai DITANGGUHKAN AWALNYA SEGERA. Mengikut peraturan di atas, ini bermakna semakan kekangan berlaku selepas penyataan selesai, membenarkan perubahan digunakan.
Gelagat CTE
CTE yang mengubah suai data, sebagai dilihat dalam contoh, berkelakuan serupa. Walaupun susunan kemas kini tidak dapat diramalkan dalam CTE, semakan kekangan masih digunakan selepas keseluruhan CTE dilaksanakan.
Berbilang Kenyataan KEMASKINI
Apabila berbilang kenyataan KEMASKINI dilaksanakan dalam satu transaksi, semakan kekangan bergantung pada sama ada SET KEKANGAN digunakan. Tanpa KEKANGAN SET, semakan berlaku selepas setiap pernyataan, yang boleh mengakibatkan pelanggaran unik, seperti yang dijangkakan.
Perbezaan Utama Unik/Utama
Adalah penting untuk ambil perhatian bahawa unik dan kekangan utama utama menerima layanan istimewa dalam PostgreSQL. Kekangan kunci unik/utama yang tidak boleh ditangguhkan disemak selepas setiap arahan, tetapi PostgreSQL menasihatkan untuk mentakrifkannya sebagai boleh ditangguhkan dengan SEGERA AWAL untuk tingkah laku yang mematuhi standard.
Kesimpulan
Sementara tingkah laku kekangan kunci unik/utama yang tertunda mungkin berbeza daripada jangkaan tertentu senario, ia tidak semestinya pepijat. Menangguhkan semakan kekangan menawarkan fleksibiliti dalam pengubahsuaian data dan memahami masa penguatkuasaan mereka adalah penting untuk mengoptimumkan prestasi dan mengelakkan ralat yang tidak dijangka.
Atas ialah kandungan terperinci Bagaimanakah Masa Penangguhan Mempengaruhi Penguatkuasaan Kekangan Utama Unik/Utama dalam PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!