Rumah > pangkalan data > tutorial mysql > Bagaimanakah Pencetus MySQL Dapat Menghalang Kemas Kini Jadual dan Mengendalikan Ralat?

Bagaimanakah Pencetus MySQL Dapat Menghalang Kemas Kini Jadual dan Mengendalikan Ralat?

Mary-Kate Olsen
Lepaskan: 2024-12-13 16:39:11
asal
110 orang telah melayarinya

How Can MySQL Triggers Prevent Table Updates and Handle Errors?

Mencegah Kemas Kini Jadual Menggunakan Pencetus MySQL dengan Pengendalian Ralat

MySQL menyediakan mekanisme yang berkuasa untuk menguatkuasakan integriti data dan peraturan perniagaan melalui pencetus. Satu senario kritikal adalah menghalang kemas kini yang tidak dibenarkan atau tidak sah pada jadual. Artikel ini menunjukkan cara memanfaatkan pencetus MySQL untuk membuang ralat dan menghalang kemas kini sedemikian.

Melempar Ralat dalam Pencetus

Setakat MySQL 5.5, sintaks SIGNAL membenarkan pembangun membuang pengecualian dalam pencetus. Pernyataan SIGNAL mengambil dua parameter:

SIGNAL sqlstate SET message_text = 'Error Message';
Salin selepas log masuk

di mana sqlstate menentukan jenis pengecualian dan message_text mentakrifkan mesej ralat tersuai. Jenis pengecualian hendaklah kod lima digit yang mewakili keadaan ralat yang berkenaan.

Mencipta Pencetus Tersuai untuk Pengendalian Ralat

Pertimbangkan contoh berikut: anda ingin menghalang kemas kini ke jadual jika nilai baharu lajur tertentu adalah negatif. Untuk mencapai matlamat ini, cipta pencetus sebelum operasi kemas kini seperti berikut:

CREATE TRIGGER trg_before_update BEFORE UPDATE ON my_table
FOR EACH ROW
BEGIN
    DECLARE msg VARCHAR(128);
    IF NEW.column_name < 0 THEN
        SET msg = CONCAT('MyTriggerError: Negative value in column_name: ', CAST(NEW.column_name AS CHAR));
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = msg;
    END IF;
END
Salin selepas log masuk

Pencetus menyemak sama ada nilai baharu lajur_nama_lajur adalah negatif. Jika ya, ia membina mesej ralat tersuai dan membuang pengecualian menggunakan pernyataan SIGNAL. 45000 SQLSTATE mewakili pengecualian takrif pengguna yang tidak dikendalikan.

Menguji Pencetus

Laksanakan pernyataan berikut untuk menguji pencetus:

-- Insert valid and invalid data:
INSERT INTO my_table (column_name) VALUES (1), (-1), (2);

-- Display the table contents:
SELECT * FROM my_table;

-- Attempt to insert invalid data:
INSERT INTO my_table (column_name) VALUES (-1);
Salin selepas log masuk

Pernyataan INSERT pertama akan gagal kerana satu baris mengandungi nilai negatif, mencetuskan ralat tersuai yang ditakrifkan dalam pencetus. Pernyataan INSERT seterusnya juga akan gagal kerana pencetus menghalang kemas kini dengan nilai negatif.

Atas ialah kandungan terperinci Bagaimanakah Pencetus MySQL Dapat Menghalang Kemas Kini Jadual dan Mengendalikan Ralat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan