Bu gibi durumlarda verileri taşımak yerine bir flag ile işaretlemek daha sağlıklı çözümdür. Ama bunun için yazdığınız sistemin genelinde değişiklik yapmanız gerekir. Senaryo genelde şu şekilde kurulur.
- Tablonuzda deleted_at ya da is_deleted gibi bir sütun oluşturulur. (Ben deleted_at tercih ediyorum, tipini de tarih yapıyorum ki ne zaman sildiğimi de göreyim.)
- Silme işlemi sırasında aslında sql DELETE sorgusu değil, UPDATE sorgusu çalıştırılır. Bu sayede tehlikeli bir işlemden de kaçınmış olursunuz. Tablo yapınız rollback yapmayı desteklemiyor ya da siz rollback uyumlu kod yazmıyor olabilirsiniz. Yanlış bir silme işlemi veri kaybına sebebiyet verir.
- Sitede kullandığınız herhangi bir SELECT sorgusuna koşul olarak "deleted_at is null" ya da "is_deleted=0" gibi silinmediğini belirten ekler yapmanız gerekir.

Veri taşıma ve ardından silme işlemlerinde, diğer tablonun crash olması ya da o anlık insert sorgusu ile ilgili bir sorun yaşamanız durumunda, eğer exception handler kullanmıyorsanız, delete sorgusu çalışacaktır ve taşıma olmadan silme işlemi olacaktır. Çok düşük bir ihtimal de olsa, veriler bizim için önemli, hiç bir zaman DELETE kullanmayın.

aketasarim adlı üyeden alıntı: mesajı görüntüle
cevaplar için teşekkürler geç gördüm biraz fakat kendi sorunu hallettim.

ben işlemi ters yaptığım için çalıştıramadım sonra mantık hatası olduğunu fakettim

tabloya ekleyip silmek en mantıklısı..

ilginiz için tekrar teşekkürler.