Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Mengubah Medan kepada ID Dijana Auto dalam MySQL Menggunakan Pencetus?

Bagaimana untuk Mengubah Medan kepada ID Dijana Auto dalam MySQL Menggunakan Pencetus?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-06 22:14:03900semak imbas

How to Default a Field to the Auto-Generated ID in MySQL Using Triggers?

MySQL Trigger to Default Field to the Value of Auto-Generated ID

Dalam MySQL, adalah mungkin untuk mencipta pencetus untuk melaksanakan fungsi tertentu operasi pada data jadual sebelum atau selepas pengubahsuaian berlaku. Satu kes penggunaan biasa ialah melalaikan medan kepada nilai kunci utama (ID) yang dijana secara automatik dalam situasi di mana ia dibiarkan batal semasa dimasukkan.

Pernyataan Masalah:

Untuk mencapai matlamat ini, mari kita pertimbangkan jadual dengan tiga lajur: id (kunci utama), group_id (integer) dan nilai (varchar). Objektifnya adalah untuk mempunyai tingkah laku berikut semasa pemasukan rekod:

  • Jika group_id disediakan, jangan ubah suainya.
  • Jika group_id diabaikan, tetapkan kepada nilai yang baru id yang dijana.

Pelaksanaan Pencetus:

Walaupun adalah wajar untuk melaksanakan operasi ini dalam satu pernyataan atau pencetus, pengehadan MySQL menghalangnya. Satu penyelesaian adalah dengan menggunakan pendekatan dua langkah:

  1. Buat pencetus SEBELUM INSERT untuk menetapkan group_id kepada id jika group_id tidak dinyatakan:
CREATE TRIGGER MyTrigger BEFORE INSERT ON MyTable
FOR EACH ROW BEGIN
  SET NEW.group_id = COALESCE(NEW.group_id, NEW.id);
END
  1. Memandangkan MySQL tidak membenarkan pengubahsuaian nilai lajur selepas INSERT, pernyataan KEMASKINI mesti dilakukan sejurus selepas sisipan untuk mengendalikan kes di mana group_id telah ditinggalkan:
INSERT INTO MyTable (group_id, value) VALUES (NULL, 'a');
UPDATE MyTable SET group_id = COALESCE(group_id, id) WHERE id = LAST_INSERT_ID();

Keterbatasan:

Adalah penting untuk ambil perhatian bahawa pencetus SEBELUM INSERT tidak boleh mengakses nilai id yang baru dijana kerana ia masih belum ditetapkan. Walau bagaimanapun, menggunakan pencetus AFTER INSERT untuk mengakses nilai yang dijana bukanlah pilihan kerana nilai lajur tidak boleh diubah suai dalam fasa tersebut.

Oleh itu, pendekatan dua langkah yang dibentangkan di atas menyediakan penyelesaian kepada tingkah laku yang diingini dalam MySQL .

Atas ialah kandungan terperinci Bagaimana untuk Mengubah Medan kepada ID Dijana Auto 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