
MySQL veri eklemek, güncellemek ve seçmekten çok daha fazlasını yapabilir. Aslında, dünyanın en popüler açık kaynaklı veritabanı, bir gün ihtiyaç duyana kadar asla bilemeyeceğiniz bir sürü inanılmaz faydalı fonksiyona sahiptir – ve sonra onlar olmadan nasıl başa çıkacağınızı merak edersiniz!
Kelimenin tam anlamıyla MySQL’de mevcut yüzlerce yerleşik fonksiyon var ve bunların hepsini burada belirtmek anlamsız olurdu, MySQL kılavuzunun zaten yaptığı bu! Bunun yerine, size daha önce hiç duymadığınız bazı yararlı fonksiyonları ve muhtemelen şimdiye kadar hiç karşılaşmadığınız bazılarını tanıtacağım. Bu yazı yeni fonksiyonlar eklemeye zamanım olduğunca ve zamanla büyümeye yöneliktir.
Not: Genel olarak MySQL büyük / küçük harf duyarlı değildir, bu nedenle aşağıda gösterilen örnekler büyük veya küçük harf olarak çalışabilir. Anlama kolaylığı açısından bir sorgu boyunca büyük harfli kelimeler kullanmanız önerilir.
DATE_FORMAT()
Kullanım: DATE_FORMAT (tarih, format)
DATE_FORMAT(), adından da anlaşılacağı gibi, tarih değerini biçim dizgisine (format string) göre biçimlendirir. Bir tarihi (veya tarih saati) MySQL’in yerel biçimlerinden birinde sakladıysanız, seçtiğiniz tarih biçiminde (örneğin “24 Ocak Pazar” şeklinde) seçebilirsiniz. Bu, PHP’nin date() fonksiyonuna benzer. Ancak MySQL, Unix zaman damgaları yerine kendi (MySQL) tarih damgalarıyla çalışır.
SELECT DATE_FORMAT('2019-01-16', '%W %D %M'); -- 'Wednesday 16th January' şeklinde döndürür. SELECT DATE_FORMAT(`tarih_sutunu`, '%W %D %M') AS `tarih` FROM `tablo`; -- Seçtiğiniz şekilde biçimlendirilmiş kayıtlı DATE(leri) döndürür.
Bir tarihi biçimlendirirken, “AS” değiştiricisini kullanarak farklı bir ad verebilirsiniz, böylece orijinal sütun adını “ORDER BY” yan tümcesinde yine de kullanabilirsiniz.
MySQL kullanıcı kılavuzu: DATE_FORMAT()
REPLACE()
Kullanımı: REPLACE(sutun_adi, eski_deger, yeni_deger)
REPLACE(), bir dizgeyi diğerine değiştirmek için UPDATE sorgusunda yaygın olarak kullanılır. Daha büyük bir dize içindeki bir dizeyi değiştirmenize olanak tanır, örneğin daha büyük bir metin bloğu içindeki bir kelimeyi veya ifadeyi değiştirerek tüm metin bloğunun kendisini güncellemenize gerek kalmaz. Şık bir arama ve değiştirme olanağı sunar.
UPDATE `tablo_adi` SET `sutun_adi` = REPLACE(`sutun_adi`, 'eski ifade', 'yeni ifade'); -- Belirtilen sütunun 'eski ifade' dizelerini 'yeni ifade' olarak değiştirir.
MySQL kullanıcı kılavuzu: REPLACE()
CONCAT()
Kullanımı: CONCAT(str1, str2, …)
CONCAT(), verilen argümanları birleştirmekten kaynaklanan bir dize döndürür. Bağımsız değişkenler, dizeler veya hatta sütun adları olabilir.
SELECT CONCAT('My', 'S', 'QL'); -- 'MySQL' şeklinde döndürür. SELECT CONCAT(`adi`, ' ', `soyadi`) AS `adi_soyadi` FROM `kullanicilar`; -- 'Habip Oğuz' WHERE COLUMN `adi` IS 'Habip' AND `soyadi` IS 'Oğuz' gibi...
Birleşik sütunları ve metni birlikte seçmek için faydalı olmasının yanı sıra, CONCAT() UPDATE sorgularında da kullanılabilir.
MySQL kullanıcı kılavuzu: CONCAT()
NOW()
Kullanımı: NOW()
NOW(), mevcut tarih ve saati ‘YYYY-MM-DD HH:MM:SS’ biçiminde bir değer olarak döndürür.
UPDATE `tablo` SET `son_guncelleme` = 'NOW()' WHERE `no` = 1; -- Belirtilen satırda `son_guncelleme` sütunu şimdiki tarih ve zaman ile güncellenir.
NOW() ile bir sütun değerini mevcut tarih ve saat olarak ayarlamak görüldüğü üzere çok kolaydır.
MySQL kullanıcı kılavuzu: NOW()
UNIX_TIMESTAMP()
Kullanımı: UNIX_TIMESTAMP([tarih])
UNIX_TIMESTAMP(), tarih seçeneği olmadan çağrılırsa bir Unix zaman damgası verir veya bir tarih verilmişse verilen tarihin Unix zaman damgasını döndürür. Tarih, bir DATE dizesi, bir DATETIME dizesi, bir TIMESTAMP veya YYMMDD veya YYYYMMDD biçimindeki bir sayı olabilir.
Tarih sütunu datetime biçimleri yerine tam sayı şeklinde bir Unix zaman damgası olması dışında NOW() işlevine benzer.
UPDATE `tablo` SET `son_guncelleme` = UNIX_TIMESTAMP() WHERE `no` = 1; -- Belirtilen kayıt için `son_guncelleme` sütunun Unix zaman damgası ile günceller. SELECT UNIX_TIMESTAMP('2019-01-16 19:31:57'); -- Verilen tarih ve zamanı Unix zaman damgası biçiminde seçer.
MySQL kullanıcı kılavuzu: UNIX_TIMESTAMP()
FROM_UNIXTIME()
Kullanımı: FROM_UNIXTIME(Unix timestamp[,format])
FROM_UNIXTIME(), UNIX_TIMESTAMP() öğesinin tam tersini yapar, Unix zaman damgasını alır ve datetime biçiminin bir gösterimini döndürür – ‘YYYY-MM-DD HH:MM:SS’. Biçimlendirme argümanı verilirse sonuç, DATE_FORMAT() işleviyle aynı şekilde kullanılan biçim dizgisine göre biçimlendirilir.
SELECT FROM_UNIXTIME(1265917455); -- 2010-02-11 19:44:15 şeklinde döndürür. SELECT FROM_UNIXTIME(1265917455, '%D %M %Y'); -- 11th February 2010 şeklinde döndürür.
MySQL kullanıcı kılavuzu: FROM_UNIXTIME()
IF ()
Kullanımı: IF(ifade1, ifade2, ifade3)
IF(), verilen ifadeyi değerlendirerek farklı değerler elde etmek için bir SQL ifadesinde kullanılabilir.
IF() ifade1 TRUE ise ifade2’yi döndürür; aksi takdirde ifade3’ü döndürür.
SELECT IF(1 < 2, 'Evet', 'Hayır'); -- 'Evet' döner çünkü 1, 2'den küçüktür. UPDATE `personel` SET `durumu` = IF(`yas` >= 18, 'Yetişkin', 'Çocuk'); -- Yaşı 18 ve üstü olanları 'Yetişkin', değilse 'Çocuk' olarak tüm kişileri günceller.
IF(), mevcut verilere bağlı olarak yeni değerlerin değişebileceği bir kaydı güncellemek için kullanışlıdır. Geçerli veriyi seçmek, PHP ile kontrol etmek ve ardından yeni değerlerin ne olması gerektiğine karar vermek yerine, IF() fonksiyonunu kullanarak tek bir UPDATE ifadesinde kendi seçiminizi yapabilirsiniz.
MySQL kullanıcı kılavuzu: IF()
“En Uygun MySQL Veri Tipini Seçmek” başlıklı yazımı da buradan okuyabilirsiniz. Bu yazının da sadece MySQL’de alanlar için tip seçerken değil aslında diğer birçok veritabanında alanlar için tip seçerken yardımcı olacağını umuyorum.
Sağlıcakla kalın.