Mencegah Sisipan dan Kemas Kini dengan Pencetus dalam MySQL
MySQL tidak mempunyai keupayaan untuk menguatkuasakan kekangan semakan, menjadikannya perlu untuk meneroka kaedah alternatif untuk mencegah pengubahsuaian data tanpa kebenaran.
Pertimbangkan senario yang diterangkan, dengan atribut agensi dalam jadual foo hanya boleh mengambil nilai antara 1 dan 5.
Seseorang boleh cuba menggunakan pencetus untuk memintas sisipan atau kemas kini yang melanggar kekangan ini, seperti yang ditunjukkan dalam coretan kod contoh. Walau bagaimanapun, hanya meninggalkan pernyataan selepas syarat if (seperti yang ditunjukkan oleh #Do nothing?) tidak akan menghalang operasi daripada berlaku.
Isyarat Kata Kunci Penyelamat
Sintaks MySQL SIGNAL menyediakan penyelesaiannya. Ia membolehkan seseorang menimbulkan ralat tersuai dan memberikan mesej ralat yang bermakna. Berikut ialah versi pencetus yang dipertingkatkan:
create trigger agency_check before insert on foo for each row begin if (new.agency < 1 or new.agency >5) then SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Agency must be between 1 and 5'; end if end
Pencetus ini kini akan menimbulkan ralat dengan mesej yang ditentukan jika percubaan dibuat untuk memasukkan atau mengemas kini baris dengan nilai agensi yang tidak sah. Ralat akan dipintas oleh klien MySQL dan dipaparkan kepada pengguna.
Kesimpulan
Dengan menggunakan kata kunci SIGNAL dalam pencetus, kami berjaya mengatasi kekurangan semakan MySQL dengan berkesan penguatkuasaan kekangan dan menyediakan mekanisme untuk menghalang manipulasi data yang tidak dibenarkan. Pendekatan ini memastikan integriti data dan menghalang data tidak sah daripada ditambah atau diubah suai dalam jadual foo.
Atas ialah kandungan terperinci Bagaimanakah Anda Boleh Menguatkuasakan Integriti Data dalam MySQL Apabila Kekangan Semakan Tidak Tersedia?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!