MySQL Fonksiyonları: String, Numeric, User-Defined, Stored

Anonim

Fonksiyonlar nelerdir?

MySQL, verileri depolamak ve almaktan çok daha fazlasını yapabilir . Ayrıca , verileri almadan veya kaydetmeden önce veriler üzerinde manipülasyonlar da yapabiliriz . İşte burada MySQL Fonksiyonları devreye giriyor. Fonksiyonlar basitçe bazı işlemleri gerçekleştiren ve ardından bir sonuç döndüren kod parçalarıdır. Bazı işlevler parametreleri kabul ederken, diğer işlevler parametreleri kabul etmez.

Kısaca MySQL işlevi örneğine bakalım. MySQL, varsayılan olarak tarih veri türlerini "YYYY-AA-GG" biçiminde kaydeder. Bir uygulama oluşturduğumuzu ve kullanıcılarımızın tarihin "GG-AA-YYYY" biçiminde döndürülmesini istediğini varsayalım, bunu başarmak için DATE_FORMAT işlevinde yerleşik MySQL kullanabiliriz. DATE_FORMAT, MySQL'de en çok kullanılan işlevlerden biridir. Dersi açtıkça daha ayrıntılı olarak ele alacağız.

Neden işlevleri kullanmalı?

Girişte verilen örneğe göre, bilgisayar programlama tecrübesi olan kişiler "Neden MySQL Fonksiyonlarını rahatsız ediyor? Aynı etki komut dosyası / programlama dili ile de elde edilebilir?" Diye düşünüyor olabilir. Uygulama programında bazı prosedürler / işlevler yazarak bunu başarabileceğimiz doğrudur.

Giriş bölümündeki DATE örneğimize dönersek, kullanıcılarımızın verileri istenilen formatta alabilmeleri için iş katmanının gerekli işlemleri yapması gerekecektir.

Uygulamanın diğer sistemlerle entegre olması gerektiğinde bu bir sorun haline gelir. DATE_FORMAT gibi MySQL işlevlerini kullandığımızda, bu işlevselliği veritabanına gömebiliriz ve veriye ihtiyaç duyan herhangi bir uygulama onu gerekli formatta alır. Bu , iş mantığında yeniden çalışmayı azaltır ve veri tutarsızlıklarını azaltır.

MySQL işlevlerini kullanmayı düşünmemizin bir başka nedeni , istemci / sunucu uygulamalarında ağ trafiğini azaltmaya yardımcı olabilmesidir . İş Katmanı'nın, verileri değiştirmeye gerek kalmadan yalnızca depolanan işlevlere çağrı yapması gerekir.Ortalama olarak, işlevlerin kullanımı genel sistem performansını büyük ölçüde iyileştirmeye yardımcı olabilir.

İşlev türleri

Yerleşik işlevler

MySQL, bir dizi yerleşik işlevle birlikte gelir. Yerleşik işlevler, MySQL sunucusunda zaten uygulanmış olan basit işlevlerdir. Bu işlevler, veriler üzerinde farklı türlerde manipülasyonlar yapmamıza izin verir. Yerleşik işlevler temel olarak aşağıdaki en çok kullanılan kategorilere ayrılabilir.

  • Dizeler işlevleri - dizi veri türlerinde çalışır
  • Sayısal işlevler - sayısal veri türleri üzerinde çalışır
  • Tarih fonksiyonları - tarih veri türlerinde çalışır
  • Toplama işlevleri - yukarıdaki veri türlerinin tümü üzerinde çalışır ve özetlenmiş sonuç kümeleri üretir.
  • Diğer işlevler - MySQL ayrıca diğer yerleşik işlev türlerini de destekler, ancak dersimizi yalnızca yukarıda belirtilen işlevlerle sınırlayacağız.

Şimdi yukarıda bahsedilen fonksiyonların her birine ayrıntılı olarak bakalım. "Myflixdb" aracımızı kullanarak en çok kullanılan işlevleri açıklayacağız.

Dize fonksiyonları

Dize işlevlerinin ne yaptığına zaten baktık. Bunları kullanan pratik bir örneğe bakacağız. Filmler tablomuzda, film başlıkları küçük ve büyük harf kombinasyonları kullanılarak saklanır. Film başlıklarını büyük harflerle döndüren bir sorgu listesi almak istediğimizi varsayalım. Bunu yapmak için "UCASE" işlevini kullanabiliriz. Bir dizgeyi parametre olarak alır ve tüm harfleri büyük harfe dönüştürür. Aşağıda gösterilen komut dosyası, "UCASE" işlevinin kullanımını göstermektedir.

SELECT `movie_id`,`title`, UCASE(`title`) FROM `movies`;

İŞTE

  • UCASE ("başlık"), başlığı parametre olarak alan ve onu "büyük_ harf_başlığı" takma adıyla büyük harflerle döndüren yerleşik işlevdir.

Yukarıdaki komut dosyasını MySQL çalışma tezgahında Myflixdb ile çalıştırmak bize aşağıda gösterilen aşağıdaki sonuçları verir.

 
movie_id title UCASE('title')
16 67% Guilty 67% GUILTY
6 Angels and Demons ANGELS AND DEMONS
4 Code Name Black CODE NAME BLACK
5 Daddy's Little Girls DADDY'S LITTLE GIRLS
7 Davinci Code DAVINCI CODE
2 Forgetting Sarah Marshal FORGETTING SARAH MARSHAL
9 Honey mooners HONEY MOONERS
19 movie 3 MOVIE 3
1 Pirates of the Caribean 4 PIRATES OF THE CARIBEAN 4
18 sample movie SAMPLE MOVIE
17 The Great Dictator THE GREAT DICTATOR
3 X-Men X-MEN

MySQL bir dizi dize işlevini destekler. Tüm yerleşik dize işlevlerinin tam listesi için, MySQL web sitesinde http://dev.mysql.com/doc/refman/5.0/en/string-functions.html bu bağlantıya bakın.

Sayısal işlevler

Daha önce belirtildiği gibi, bu işlevler sayısal veri türleri üzerinde çalışır. SQL ifadelerindeki sayısal veriler üzerinde matematiksel hesaplamalar yapabiliriz.

Aritematik operatörler

MySQL, SQL ifadelerinde hesaplamalar yapmak için kullanılabilen aşağıdaki aritmatik operatörleri destekler.

İsim Soyisim

Açıklama

DIV

Tamsayı bölümü

/

Bölünme

-

Çıkarma

+

İlave

*

Çarpma işlemi

% veya MOD

Modül

Şimdi yukarıdaki operatörlerin her birinin örneklerine bakalım

Tam Sayı Bölümü (DIV)

SELECT 23 DIV 6 ;

Yukarıdaki betiği çalıştırmak bize aşağıdaki sonuçları verir.

3

Bölüm operatörü (/)

Şimdi bölme operatörü örneğine bakalım. DIV örneğini değiştireceğiz.

SELECT 23 / 6 ;

Yukarıdaki betiği çalıştırmak bize aşağıdaki sonuçları verir.

3.8333

Çıkarma operatörü (-)

Şimdi çıkarma operatörü örneğine bakalım. Önceki iki örnekte olduğu gibi aynı değerleri kullanacağız

SELECT 23 - 6 ;

Yukarıdaki betiği çalıştırmak bize 17 verir

Toplama operatörü (+)

Şimdi toplama operatörü örneğine bakalım. Önceki örneği değiştireceğiz.

SELECT 23 + 6 ;

Yukarıdaki betiği çalıştırmak bize 29 verir

Çarpma operatörü (*)

Şimdi çarpma operatörü örneğine bakalım. Önceki örneklerde olduğu gibi aynı değerleri kullanacağız.

SELECT 23 * 6 AS `multiplication_result`;

Yukarıdaki betiği çalıştırmak bize aşağıdaki sonuçları verir.

multiplication_result

138

Modulo operatörü (-)

Modulo operatörü N'yi M'ye böler ve bize kalanı verir. Şimdi modulo operatörü örneğine bakalım. Önceki örneklerde olduğu gibi aynı değerleri kullanacağız.

SELECT 23 % 6 ;

VEYA

SELECT 23 MOD 6 ;

Yukarıdaki betiği çalıştırmak bize 5 verir

Şimdi MySQL'deki bazı yaygın sayısal işlevlere bakalım.

Kat - bu işlev, bir sayıdan ondalık basamakları kaldırır ve en yakın en düşük sayıya yuvarlar. Aşağıda gösterilen komut dosyası, kullanımını göstermektedir.

SELECT FLOOR(23 / 6) AS `floor_result`;

Yukarıdaki betiği çalıştırmak bize aşağıdaki sonuçları verir.

Floor_result

3

Yuvarlak - bu işlev, ondalık basamaklı bir sayıyı en yakın tam sayıya yuvarlar. Aşağıda gösterilen komut dosyası, kullanımını göstermektedir.

SELECT ROUND(23 / 6) AS `round_result`;

Yukarıdaki betiği çalıştırmak bize aşağıdaki sonuçları verir.

Round_result

4

Rand - bu işlev rastgele bir sayı oluşturmak için kullanılır, işlev her çağrıldığında değeri değişir. Aşağıda gösterilen komut dosyası, kullanımını göstermektedir.

SELECT RAND() AS `random_result`;

Saklanan işlevler

Depolanan işlevler, depolanan işlevi kendiniz tanımlamanız dışında, tıpkı yerleşik işlevler gibidir. Depolanan bir işlev oluşturulduktan sonra, diğer işlevler gibi SQL deyimlerinde kullanılabilir. Depolanan bir işlev oluşturmak için temel sözdizimi aşağıda gösterildiği gibidir

CREATE FUNCTION sf_name ([parameter(s)])RETURNS data typeDETERMINISTICSTATEMENTS

İŞTE

  • "CREATE FUNCTION sf_name ([parametreler])" zorunludur ve MySQL sunucusuna parantez içinde tanımlanan isteğe bağlı parametrelerle sf_name adlı bir işlev oluşturmasını söyler.
  • "RETURNS veri türü" zorunludur ve işlevin döndürmesi gereken veri türünü belirtir.
  • "DETERMINISTIC" , işlevin kendisine aynı bağımsız değişkenler sağlandığında aynı değerleri döndüreceği anlamına gelir.
  • "BİLDİRİMLER" , işlevin yürüttüğü prosedür kodudur.

Şimdi yerleşik bir işlevi uygulayan pratik bir örneğe bakalım. Hangi kiralık filmlerin iade tarihinin geçtiğini bilmek istediğimizi varsayalım. Dönüş tarihini parametre olarak kabul eden ve ardından bunu MySQL sunucusundaki geçerli tarihle karşılaştıran bir depolanmış işlev oluşturabiliriz. Geçerli tarih, film dönüş tarihinden küçükse, "Hayır" döndürür, aksi takdirde "Evet" döndürürüz. Aşağıda gösterilen komut dosyası, bunu başarmamıza yardımcı olur.

DELIMITER |CREATE FUNCTION sf_past_movie_return_date (return_date DATE)RETURNS VARCHAR(3)DETERMINISTICBEGINDECLARE sf_value VARCHAR(3);IF curdate() > return_dateTHEN SET sf_value = 'Yes';ELSEIF curdate() <= return_dateTHEN SET sf_value = 'No';END IF;RETURN sf_value;END|

Yukarıdaki komut dosyasının yürütülmesi saklanan "sf_past_movie_return_date" işlevini yarattı.

Şimdi depolanmış fonksiyonumuzu test edelim.

SELECT `movie_id`,`membership_number`,`return_date`,CURDATE() ,sf_past_movie_return_date(`return_date`) FROM `movierentals`;

Yukarıdaki betiği MySQL çalışma tezgahında myflixdb ile çalıştırmak bize aşağıdaki sonuçları verir.

 
movie_id membership_number return_date CURDATE() sf_past_movie_return_date('return_date')
1 1 NULL 04-08-2012 NULL
2 1 25-06-2012 04-08-2012 yes
2 3 25-06-2012 04-08-2012 yes
2 2 25-06-2012 04-08-2012 yes
3 3 NULL 04-08-2012 NULL

Kullanıcı tanımlı işlevler

MySQL ayrıca MySQL'i genişleten kullanıcı tanımlı işlevleri de destekler. Kullanıcı tanımlı işlevler, C, C ++ vb. Gibi bir programlama dili kullanarak oluşturabileceğiniz ve ardından bunları MySQL sunucusuna ekleyebileceğiniz işlevlerdir. Eklendikten sonra, diğer işlevler gibi kullanılabilirler.

Özet

  • Fonksiyonlar, MySQL'in yeteneklerini geliştirmemize izin verir.
  • Fonksiyonlar her zaman bir değer döndürür ve isteğe bağlı olarak parametreleri kabul edebilir.
  • Yerleşik işlevler, MySQL ile birlikte gelen işlevlerdir. Üzerinde çalıştıkları veri türlerine, yani dizeler, tarih ve sayısal yerleşik fonksiyonlara göre kategorize edilebilirler.
  • Saklanan işlevler, kullanıcı tarafından MySQL sunucusu içinde oluşturulur ve SQL ifadelerinde kullanılabilir.
  • Kullanıcı tanımlı işlevler MySQL dışında oluşturulur ve MySQL sunucusuna dahil edilebilir.