Rumah  >  Artikel  >  pangkalan data  >  Bolehkah MySQL Trigger Menghalang Operasi INSERT daripada Gagal?

Bolehkah MySQL Trigger Menghalang Operasi INSERT daripada Gagal?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-14 09:56:02515semak imbas

Can MySQL Triggers Prevent INSERT Operations from Failing?

Menyebabkan INSERT Gagal dengan Pencetus

Walaupun pencetus dalam MySQL boleh mengubah suai data sebelum sisipan atau kemas kini, pada mulanya dipercayai ia boleh tidak menghalang operasi daripada gagal. Walau bagaimanapun, penerokaan lanjut telah mendedahkan bahawa terdapat kaedah untuk mencapai fungsi ini.

Penyelesaian MySQL

Dalam MySQL versi 5.0 dan 5.1, penyelesaian boleh digunakan untuk membatalkan mencetus dan memberikan mesej ralat. Ini melibatkan percubaan untuk mengakses lajur yang tidak wujud:

CREATE TRIGGER mytabletriggerexample
BEFORE INSERT
FOR EACH ROW
BEGIN
IF(NEW.important_value) < (fancy * dancy * calculation) THEN
    DECLARE dummy INT;

    SELECT Your meaningful error message goes here INTO dummy 
        FROM mytable
      WHERE mytable.id=new.id
END IF; END;

Jika syarat dipenuhi, pencetus cuba untuk memilih mesej ralat daripada jadual yang tidak wujud, menyebabkan sisipan gagal dengan mesej yang diberikan .

RDBMS lain

Keupayaan untuk membuang pengecualian dalam pencetus dan membatalkan operasi tidak disokong secara universal merentas semua RDBMS. Walau bagaimanapun, sesetengah pangkalan data menyediakan mekanisme alternatif untuk mengendalikan ralat pengesahan dalam pencetus. Contohnya:

  • PostgreSQL: Perintah RAISE EXCEPTION boleh digunakan untuk menimbulkan pengecualian dan memberikan mesej ralat.
  • Oracle: Pernyataan SIGNAL membenarkan peningkatan amaran atau ralat dalam pencetus.

Atas ialah kandungan terperinci Bolehkah MySQL Trigger Menghalang Operasi INSERT daripada Gagal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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