MySQL veritabanında INSERT … ON DUPLICATE KEY UPDATE sözdizimi kullanımı
Genelde bu sözdizimi, güncelleme sayfalarında kullanılır.
Örneğin, web sitenizi ziyaret eden ziyaretçilerinizin IP adreslerini saklayan bir veritabanı tablonuz var. Sitenizi ilk ziyaret eden kişinin IP adresi veritabanında olmadığından dolayı INSERT kullanılacaktır yani yeni bir veri olarak kayıt edilecektir. Eğer ziyaretci daha evvel sitenizi ziyaret etmişse, IP adresi veritabanında olduğundan UPDATE kullanılacaktır, diğer bir deyişle güncellenecektir.
Bunu bir örnekle açıklamaya çalışalım. İlk önce ziyaretci isminde bir tablo oluşturalım. IP adresinin benzersiz bir anahtar (Primary Key) olduğunu unutmayın.
create table ziyaretci(ipadresi int unsigned not null primary key, sayac int unsigned not null, enson_ziyaret timestamp);
Aşağıdaki sözdizimi ile tablomuzu güncelleyelim.
inet_aton and inet_ntoa MySQL fonksiyonları IP adreslerini string’ i int’ e veya int’ i strings’ e çevirmek için kullanılır.insert into ziyaretci values(inet_aton('192.168.0.1'),1,now()) on duplicate key update sayac=sayac+1;
Yukarıda, MySQL 192.168.0.1 IP adresi tablomuzda mevcutsa, UPDATE ile sayacımızı bir arttıracak, mevcut değilse IP adresini tablomuza yeni bir sıra olarak yerleştirecektir.
PHP işlevi ile kullanmak istersek;
// veritabanına bağlantıyı unıtmayın // kullanımı updateZiyaretciSayac(); function updateZiyaretciSayac(){ $ipadresi = $_SERVER['REMOTE_ADDR']; $sql = "insert into ziyaretci values('".inet_aton($ipadresi)."',1,now()) on duplicate key update sayac=sayac+1"; $mysqli->query($sql); return; }