Rumah  >  Artikel  >  pangkalan data  >  Bolehkah Pencetus MySQL Secara Terus Menyebabkan Kegagalan INSERT?

Bolehkah Pencetus MySQL Secara Terus Menyebabkan Kegagalan INSERT?

Linda Hamilton
Linda Hamiltonasal
2024-11-18 08:37:02247semak imbas

Can MySQL Triggers Directly Cause INSERT Failures?

Adakah Kemungkinan Gagal INSERT Menggunakan Pencetus?

Dalam MySQL, pencetus mempunyai keupayaan untuk mengubah suai data sebelum sisipan dan kemas kini. Walau bagaimanapun, telah diperhatikan bahawa pencetus ini tidak dapat secara langsung menyebabkan operasi sisipan atau kemas kini yang sepadan gagal, meninggalkan ruang untuk kebimbangan pengesahan.

Had ini berpunca daripada ketiadaan mekanisme pengendalian pengecualian khusus dalam MySQL pencetus. Walaupun standard SQL mentakrifkan pernyataan SIGNAL dan RESIGNAL untuk pengendalian ralat, ia masih belum dilaksanakan dalam MySQL.

Walau bagaimanapun, penyelesaian telah dibangunkan untuk meniru fungsi ini dengan cuba secara paksa menggunakan lajur yang tidak wujud dalam pencetus. Ini mencetuskan ralat dalam MySQL, yang boleh digunakan untuk menunjukkan operasi yang gagal. Kod berikut menggambarkan teknik ini:

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;

Pencetus ini akan menilai lajur important_value dan melakukan pengiraan yang diperlukan. Jika syarat tidak dipenuhi, ia akan cuba memilih data daripada lajur yang tidak wujud, mencetuskan ralat dan menyebabkan operasi sisipan gagal.

Atas ialah kandungan terperinci Bolehkah Pencetus MySQL Secara Terus Menyebabkan Kegagalan INSERT?. 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