Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Pemicu MySQL untuk memperbarui bidang ke nilai id

Saya tidak tahu cara apa pun untuk melakukan ini dalam satu pernyataan, bahkan menggunakan pemicu.

Solusi pemicu yang disarankan @Lucky akan terlihat seperti ini di MySQL:

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

Namun, ada masalah. Di bagian BEFORE INSERT fase, id . yang dibuat secara otomatis nilai belum dihasilkan. Jadi jika group_id adalah null, defaultnya adalah NEW.id yang selalu 0.

Tetapi jika Anda mengubah pemicu ini menjadi aktif selama AFTER INSERT fase, sehingga Anda memiliki akses ke nilai yang dihasilkan dari NEW.id , Anda tidak dapat mengubah nilai kolom.

MySQL tidak mendukung ekspresi untuk DEFAULT kolom, jadi Anda juga tidak bisa mendeklarasikan perilaku ini dalam definisi tabel. *Pembaruan:MySQL 8.0.13 mendukung DEFAULT (<expression>) tetapi ekspresi masih tidak dapat bergantung pada nilai kenaikan otomatis (ini adalah didokumentasikan ).

Satu-satunya solusi adalah melakukan INSERT , lalu segera lakukan UPDATE untuk mengubah group_id jika tidak disetel.

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana menghubungkan jarak jauh ke database MySQL yang terletak di server bersama kami

  2. Peringatan:PDO::__construct():[2002] Tidak ada file atau direktori seperti itu (mencoba terhubung melalui unix:///tmp/mysql.sock) di

  3. Fungsi MySQL LEAST() – Temukan Argumen Terkecil dalam Daftar Argumen

  4. Dapatkan catatan dengan <apa pun> tertinggi/terkecil . per grup

  5. Bagaimana Fungsi UCASE() Bekerja di MySQL