Rumah >pangkalan data >tutorial mysql >Bolehkah MySQL Trigger Secara Automatik Menetapkan Nilai Medan kepada IDnya?

Bolehkah MySQL Trigger Secara Automatik Menetapkan Nilai Medan kepada IDnya?

Linda Hamilton
Linda Hamiltonasal
2024-11-08 15:32:02233semak imbas

Can MySQL Triggers Automatically Set a Field's Value to Its ID?

Pencetus MySQL untuk Mengemas kini Medan Berdasarkan IDnya

Menentukan sama ada pencetus boleh digunakan untuk menetapkan nilai medan secara automatik kepada IDnya memerlukan penerokaan pelbagai aspek.

Pencetus Definisi

Sintaks MySQL untuk pencetus yang mengemas kini medan sebelum sisipan berdasarkan syarat adalah seperti berikut:

CREATE TRIGGER trigger_name BEFORE INSERT ON table_name
FOR EACH ROW
BEGIN
  IF NEW.group_id IS NULL
    THEN SET NEW.group_id = NEW.id;
  END IF;
END;

Had Pencetus

Walau bagaimanapun, pendekatan ini menghadapi had. Dalam fasa BEFORE INSERT, nilai ID belum lagi tersedia, jadi jika group_id ialah NULL, ia lalai kepada 0.

Mengubah suai nilai dalam lajur tidak dibenarkan dalam fasa AFTER INSERT, menjadikannya tidak layak untuk ini tujuan.

Penyelesaian Alternatif

Disebabkan Batasan MySQL, penyelesaian pencetus tulen tidak boleh dilaksanakan. Sebaliknya, pendekatan gabungan yang melibatkan kedua-dua sisipan dan kemas kini segera boleh digunakan:

  1. Sisipkan rekod dengan NULL untuk group_id.
  2. Dapatkan ID rekod yang dimasukkan menggunakan LAST_INSERT_ID().
  3. Kemas kini medan group_id dengan nilai ID jika ada NULL.

Pendekatan ini memastikan bahawa medan group_id ditetapkan dengan betul untuk kedua-dua senario: apabila dinyatakan dan apabila ditinggalkan.

Atas ialah kandungan terperinci Bolehkah MySQL Trigger Secara Automatik Menetapkan Nilai Medan kepada IDnya?. 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