27-08-2016, Saat: 11:51
Bu makalede belki de pek bilinmeyen ancak hayatı kolaylaştıran bazı kullanım şekillerine örnek vermek istiyorum.
ON DUPLICATE KEY UPDATE
Bu deyim INSERT INTO ile birlikte kullanılır, amacı INSERT edilen kaydın ilgili tabloda DUPLICATE KEY hatasına sebep olması durumunda yani aynı KEY değerine sahip bir kayda denk gelmesi durumunda INSERT işlemi yerine mevcut kaydı güncellemesidir.
Örneğin parametreleri dikey olarak tuttuğumuz bir tablomuz olsun , programımızda parametreleri kaydedip güncellerken önce ilgili parametre var mı yoksa insert varsa update kontrolü yapmak yerine tek komutta işi bitirebilirsiniz.
Örnek tablomuz ;
Görüldüğü gibi tablomuzda "param_name" PK olarak tanımlı , aşağıda ki SQL ile tablomuza "varsayilan_dil" isimli bir parametreyi ekleyeceğiz varsa da güncelleyeceğiz.
bu cümle "varsayilan_dil" isimli bir parametre yoksa ;
eğer "varsayilan_dil" isimli bir parametre varsa da aşağıdaki gibi çalışma sağlayacaktır.
ON DUPLICATE KEY UPDATE den sonra güncellemek istediğiniz alanları virgül ile ayırarak artırabilirsiniz.
WITH ROLLUP
İstatistiksel bir yapıdır, sonuç setimize dikey olarak ara toplam ve genel toplam ekler.
Örnek tablomuz ;
Örnek verilerimiz ;
Kullanım ;
Kullanım sonucunda aşağı daki görüntüyle karşılaşılır ;
Daha anlaşılır bir görüntü sağlamak için "id" sahalarının NULL geldiği satırlara "GÜN TOPLAMI" , "d" sahasının NULL geldiği satırada "GENEL TOPLAM" diyebiliriz.
ON DUPLICATE KEY UPDATE
Bu deyim INSERT INTO ile birlikte kullanılır, amacı INSERT edilen kaydın ilgili tabloda DUPLICATE KEY hatasına sebep olması durumunda yani aynı KEY değerine sahip bir kayda denk gelmesi durumunda INSERT işlemi yerine mevcut kaydı güncellemesidir.
Örneğin parametreleri dikey olarak tuttuğumuz bir tablomuz olsun , programımızda parametreleri kaydedip güncellerken önce ilgili parametre var mı yoksa insert varsa update kontrolü yapmak yerine tek komutta işi bitirebilirsiniz.
Örnek tablomuz ;
CREATE TABLE `pbs_param` ( `param_name` varchar(20) NOT NULL DEFAULT '', `value` text, PRIMARY KEY (`param_name`) );
Görüldüğü gibi tablomuzda "param_name" PK olarak tanımlı , aşağıda ki SQL ile tablomuza "varsayilan_dil" isimli bir parametreyi ekleyeceğiz varsa da güncelleyeceğiz.
INSERT INTO pbs_param (param_name,value) VALUES ("varsayilan_dil" , "tr") ON DUPLICATE KEY UPDATE value="tr" ;
bu cümle "varsayilan_dil" isimli bir parametre yoksa ;
INSERT INTO pbs_param (param_name,value) VALUES ("varsayilan_dil" , "tr") ;
eğer "varsayilan_dil" isimli bir parametre varsa da aşağıdaki gibi çalışma sağlayacaktır.
UPDATE pbs_param SET value="tr" WHERE param_name="varsayilan_dil";
ON DUPLICATE KEY UPDATE den sonra güncellemek istediğiniz alanları virgül ile ayırarak artırabilirsiniz.
WITH ROLLUP
İstatistiksel bir yapıdır, sonuç setimize dikey olarak ara toplam ve genel toplam ekler.
Örnek tablomuz ;
create table t(d date, id int, hrs int);
Örnek verilerimiz ;
insert into t values ('2013-10-1',1,5), ('2013-10-1',2,6), ('2013-10-1',3,2), ('2013-10-1',3,5), ('2013-10-2',1,1), ('2013-10-2',1,2), ('2013-10-2',2,3), ('2013-10-2',2,4), ('2013-10-3',1,2), ('2013-10-3',1,2), ('2013-10-3',1,2);
Kullanım ;
select d ,id,sum(hrs) as saat from t group by d,id with rollup;
Kullanım sonucunda aşağı daki görüntüyle karşılaşılır ;
Daha anlaşılır bir görüntü sağlamak için "id" sahalarının NULL geldiği satırlara "GÜN TOPLAMI" , "d" sahasının NULL geldiği satırada "GENEL TOPLAM" diyebiliriz.
select d , IF(IFNULL(d,"")="" , "GENEL TOPLAM" , if(IFNULL(id,0)=0,"GÜN TOPLAMI",id)) as id,sum(hrs) as saat from t group by d,id with rollup;