Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menetapkan Nilai Medan kepada IDnya dalam MySQL Menggunakan Pencetus?

Bagaimanakah Saya Boleh Menetapkan Nilai Medan kepada IDnya dalam MySQL Menggunakan Pencetus?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-10 14:29:03904semak imbas

How Can I Set a Field Value to Its ID in MySQL Using a Trigger?

MySQL Trigger untuk Menetapkan Nilai Medan kepada ID

Dalam MySQL, tidak mungkin untuk mengemas kini medan secara langsung kepada nilai IDnya menggunakan pencetus. Ini kerana pencetus dilaksanakan sebelum atau selepas baris dimasukkan, dikemas kini atau dipadamkan, tetapi sebelum ID kenaikan automatik dijana.

Untuk mencapai gelagat yang diingini, anda boleh menggunakan penyelesaian berikut:

  1. Buat pencetus yang menyemak sama ada lajur group_id adalah batal untuk setiap yang dimasukkan baris.
  2. Jika batal, tetapkan lajur group_id kepada nilai id.
  3. Gunakan jenis pencetus SEBELUM INSERT, kerana ia dilaksanakan sebelum ID kenaikan automatik dijana.

Berikut ialah pernyataan MySQL untuk pencetus:

CREATE TRIGGER MyTrigger BEFORE INSERT ON MyTable
FOR EACH ROW
BEGIN
  SET NEW.group_id = COALESCE(NEW.group_id, NEW.id);
END

Malangnya, pencetus ini tidak akan berfungsi untuk tingkah laku yang diingini kerana dalam fasa SEBELUM INSERT, nilai ID yang dijana secara automatik belum dijana lagi. Oleh itu, jika group_id adalah batal, ia akan lalai kepada NEW.id, yang sentiasa 0.

Menukar picu kepada api semasa fasa SELEPAS INSERT tidak akan berfungsi sama ada, kerana anda tidak boleh mengubah suai nilai lajur selepas satu baris telah dimasukkan.

Satu-satunya penyelesaian adalah dengan melakukan sisipan dan kemudian segera mengemas kini nilai group_id jika tidak set:

INSERT INTO MyTable (group_id, value) VALUES (NULL, 'a');
UPDATE MyTable SET group_id = COALESCE(group_id, id) WHERE id = LAST_INSERT_ID();

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menetapkan Nilai Medan kepada IDnya dalam MySQL Menggunakan Pencetus?. 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