GÜNCELLEME sonrasında GÜNCELLEME tetiklensin mi?


13

Herhangi bir güncelleme zamanını kaydetmek için bir tetikleyici yapmak istiyorum:

CREATE TRIGGER col_update
AFTER UPDATE ON col
FOR EACH ROW BEGIN
UPDATE col SET updated=NOW() WHERE id=NEW.id; // or OLD.id
END

Sorun, bu tetikleyici updatedsütunu güncellemeye çalıştığında , aynı zamanda tetikleyiciyi çalıştıran başka bir güncelleme olayı olmasıdır. Bu, çalışmayan sonsuz bir döngü oluşturur.

Güncelleme süresini ilgili sütuna nasıl kaydedebilirim?

Bir tetikleyici kullanmak istiyorum, çünkü tabloda çok sayıda sütun var. Güncelleme süresini manuel olarak ayarlamaya çalışırsam, birçok sorguyu değiştirmem gerekir.

Yanıtlar:


17

BEFOREBunun yerine bir tetikleyici kullanın ve updatedbir değer atayan sütunu ayarlayın NEW.updated(bu basit bir atama olur, an değil UPDATE). Bu şekilde ek tetiklemezsiniz UPDATE.

Tetikleyici gövdeniz basitçe

SET NEW.updated = NOW()

Genellikle AFTERtetikleyicileri yalnızca diğer tabloları BEFOREdeğiştirmek, yeni (veya güncellenmiş) satırı değiştirmek veya bastırmak için kullanırım DELETE.


1

Sizin durumunuzda olduğu gibi, kayıt her değiştiğinde güncellenen alanı değiştirmek istiyorsanız, bir tetikleyiciye ihtiyacınız yoktur.

MySQL'in otomatik başlatma / güncellemesini şu şekilde kullanabilirsiniz:

ALTER TABLE `yourtabelname` ADD `updated` DATETIME on update CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

Veya tablo oluşturulurken dokümanlardan :

CREATE TABLE t1 (
  ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.