Pencetus MySQL menawarkan mekanisme yang berkuasa untuk menguatkuasakan integriti data dengan melaksanakan kod secara automatik sebelum atau selepas operasi pangkalan data. Contoh ini menunjukkan cara pencetus BEFORE INSERT
boleh menghalang sisipan baris dengan tarikh lahir akan datang.
Berikut ialah pencetus yang menyekat INSERT jika birthdate
adalah pada masa hadapan:
<code class="language-sql">CREATE TRIGGER prevent_future_birthdate BEFORE INSERT ON your_table FOR EACH ROW BEGIN IF NEW.birthdate > CURDATE() THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Birthdate cannot be in the future'; END IF; END;</code>
Pencetus ini menandakan ralat SQLSTATE tersuai, memberikan mesej yang jelas menerangkan sebab sisipan gagal.
Pendekatan berbeza melibatkan mengubah suai data dalam pencetus untuk melanggar kekangan NOT NULL
:
<code class="language-sql">CREATE TRIGGER set_birthdate_null BEFORE INSERT ON your_table FOR EACH ROW BEGIN IF NEW.birthdate > CURDATE() THEN SET NEW.birthdate = NULL; END IF; END;</code>
Jika kekangan NOT NULL
ditakrifkan pada lajur birthdate
, menetapkannya kepada NULL
akan menyebabkan INSERT gagal. Walau bagaimanapun, kaedah ini kurang jelas tentang sebab kegagalan. Ingat untuk menggantikan your_table
dengan nama sebenar jadual anda.
Atas ialah kandungan terperinci Bagaimanakah Pemicu MySQL Boleh Menghalang INSERT Berdasarkan Tarikh Lahir Masa Depan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!