Arka arkaya, belirli bir miktarda oluşturulur sonra Autopruning?

2 Cevap php

Temel soru, üzgünüm. Temelde, bir MySQL girdiye birisi sayfasını ziyaret her zaman yaratan bir komut dosyası var. Bir script günlüğü. Ancak, bunu, diyelim, sonra 100 ziyaret autoprune yapmak istiyorum.

Sözde kod Örneğin:

if amount of rows > 100 { delete rows 1+ until amount of rows == 100 }

Yani kısaca, her zaman yeni bir satır 100 sonra, otomatik olarak küçük id (Benim birincil anahtar) ile satır kaldırmak gerekiyor eklenir.

2 Cevap

Another possible option would be to use database TRIGGERS (http://forge.mysql.com/wiki/Triggers)

It may be overkill in this scenario but would check the table every time a row is inserted. An example (which I haven't tested!) :

Create Trigger prune_MyTable AFTER INSERT ON MyTable FOR EACH ROW BEGIN DECLARE num_rows INTEGER; DECLARE lowest_id INTEGER;

MyTable DAN num_rows INTO SELECT COUNT (*);

IF num_rows > 100 THEN SELECT MIN(id) INTO lowest_id FROM MyTable LIMIT 100;

GÜNCELLEME MyTable NEREDE id DELETE < lowest_id;

END IF; END$$

Büyük olasılıkla sayısını almak için kilit tablo ve daha sonra eski kayıtların "doğru" miktarda silmek zorunda. Bu nedenle yerine 100 sıra SEÇ sınırlamak ve gereksiz olsa bile tablonun daha kayıtlarını tutmak istiyorum. Hala örneğin, eski kayıtları silebilirsiniz kez her x saat veya x rastgele bir olasılık ile bir cron ile per-mile:

if ( 10 > rand(0, 8000) ) {
  LOCK TABLES foo
  SELECT COUNT(*) as cnt FROM foo
  if ( $cnt > 100 ) {
    $cnt -= 100;
    DELETE FROM foo ORDER BY id DESC LIMIT $cnt
  }
  UNLOCK TABLES
}

ya da bunun gibi bir şey ...

(Bildiğim kadarıyla ORDER BY ve DELETE deyimleri için LIMIT deyimi MySQL özeldir. Daha iyi aklınızda tutun.)