Halang memasukkan hari lahir akan datang menggunakan pencetus MySQL
Soalan:
Buat pencetus MySQL yang melumpuhkan memasukkan lajur hari lahir dalam baris akan datang.
Jawapan:
Untuk mengelakkan pemasukan apabila lajur hari lahir melebihi tarikh semasa:
<code class="language-sql">CREATE TRIGGER check_birthdate BEFORE INSERT ON table FOR EACH ROW BEGIN IF NEW.birthdate > CURRENT_DATE() THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Birthdate cannot be in the future'; END IF; END;</code>
Arahan:
CREATE TRIGGER
memulakan penciptaan pencetus baharu bernama check_birthdate
. BEFORE INSERT
menyatakan bahawa pencetus harus dilaksanakan sebelum operasi sisipan. ON table
menentukan jadual yang pencetus akan digunakan. FOR EACH ROW
menunjukkan bahawa pencetus harus dilaksanakan untuk setiap baris. IF
menyemak sama ada nilai medan NEW.birthdate
(nilai lajur dalam baris yang disisipkan) lebih besar daripada CURRENT_DATE()
. Jika ya, pencetus meneruskan ke langkah seterusnya. SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Birthdate cannot be in the future'
menimbulkan pengecualian SQL dengan status SQL '45000' (syarat pengecualian yang ditentukan pengguna yang menunjukkan pelanggaran kekangan). Ini akan membatalkan operasi sisipan semasa dan memberikan mesej ralat yang lebih jelas. Pernyataan yang dipertingkatkan termasuk SET MESSAGE_TEXT
, menjadikan mesej ralat lebih mudah difahami dan nyahpepijat. Jawapan yang disemak ini memberikan mesej ralat yang lebih bermaklumat, meningkatkan kebolehgunaan.
Atas ialah kandungan terperinci Bagaimana untuk Mencegah Sisipan Tarikh Lahir Masa Depan dalam MySQL Menggunakan Pencetus?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!