v2.5.2
Giriş yap

Aynı Tabloda TRIGGER işlemi ?

acemi
362 defa görüntülendi

trigger su şekilde

DELIMITER $$
CREATE TRIGGER trigger_tablo AFTER DELETE ON tablo
    FOR EACH ROW 
        BEGIN
            DELETE FROM tablo WHERE altID = OLD.id;
        END$$
DELIMITER ;

tablo sutunları
id | altID | baslik | baslk2
1 0 deneme
2 1 alt baslik alt icerik

tablo bu şekilde 1 nolu id silince altID si 1 olanlarıda normalde
silmesi gerekmiyormu

php tarafında aldığım hata


Can't update table 'tablo' in stored function/trigger 
because it is already used by statement which invoked 
this stored function/trigger 
 //aynı hatayı mysql tarafındada alıyorum.

bu trigger nasıl olmalı acaba.

Cevap yaz
Cevaplar (5)
admin
783 gün önce

foreign key ekleyip de silebilirsin. cascade delete

acemi
783 gün önce

@abdullahx

normalde bende öyle yapıyorum alt silme işlemlerini bağlantılı silme işlemlerini trigger ile yapıyordum hepde
dedim fazla tablo olması bitanesinie aynı tablo içinde yapayım orda sıkıntı çıkardı :)
arkadaşın dediğini yaptım zaten oda kolaylık daha önce denememiştim tecrübe oldu :)

abdullahx
783 gün önce

En güzeli arkadaşın dediği gibi Foreign key kullanmak, tabloları kategorilere ayırıp birbiri ile ilişkili sütunlardan bağlayınca bir bilgiyi sildiğin taktirde onunla bağlantılı olan diğer tablolardaki veriler otomatik olarak silinir. Dersin ne kolaylıklar varmış ben boşuna uğraşmışım bu kadar :) Veri tabanı bütünlüğünü korumanın en etkili yollarından biridir, hatta bence en etkilisidir.
https://www.cozumpark.com/sql-server-uzerinde-veri-butunlugunu-saglama/

acemi
783 gün önce

biraz daha araştırıcam bakalım eve aynı tabloda bu hata normal gibi duruyor php tarafında yaptım şimdilik ama mysql tarafında kolay oluyordu
kaçamadım bu sefer php tarafından :)))

@admin o tarafından pek bilgim yok biraz araştırıcam teşekkürler

@abdullahx sanada teşekkür ederim kardeşim.

abdullahx
783 gün önce

Bir trigger aynı tabloyu udpate, insert, delete işlemlerinden sonra güncelleyemez. Çünkü bunun sonsuz bir döngüye sebep olma ihtimali vardır. Hata almanız normal. Başka bir yöntem deneyin.
Link