MySQL: Insert, ignore, dublicate
MySQL ile tanışalı 10 seneyi geçti; şu hayat kurtaran “ignore” ifadesine bir kere bile denk gelmedim. Bu gece mühim bir işlemi PHP’ye bırakmaksızın sadece veritabanı üzerinden halledeyim diye uğraşırken -kabaca ifadeyle belli bir kriterdeki verileri bir tablodan başka bir tabloya arşivliyordum- hedef tablodaki unique indexler yüzünden canım sorgum “duplicate error” alıyor ve canımı sıkıyordu. Geçen hafta daha da büyük bir datayı işlerken bu tip bir sorun çıktığında işlemi tek bir query ile yapmak yerine aynı vazifeyi görecek update yada insert satırlarınının sql ifadelerini bir txt dosyaya yazıyor ve MySQL client’i üzerinden biner ikişer çalıştırıyordum. Query’ler satır satır olduğundan dublicate hatası veren satırların dışındakiler çalıştığı için işimi görüyordu. Fakat bu gecekinde durum böyle rahat değildi. Olayın tek bir sql ifadesinde olup bitmesi gerekiyordu. Çünkü bu işlem bir fonksiyona bağlanacaktı ve kullanıcı o sayfaya her girdiğinde bu işlem otomatik olarak yapılacaktı. Hasılı bu query’lerle ordan al buraya koy işlemi sırasında oluşan dublicate hatalarını “ignore” edecek bir şey olsa ne iyi olurdu.
Google’a “mysql force insert, skip dublicate entry” yazdım ve geçen hafta çektiğim zahmet yüzünden saçımı başımı yoldum.
Efendim; şöyle basit bir “ignore” ifadesi ile query’niz hata vermeksizin “kalan sağlar bizimdir” mantığıyla çalışacaktır..
insert ignore into tbl_hedef_tablo (sutun1, sutun2, sutun3)
select sutun1, sutun2, sutun3 from tbl_kaynak_tablo