MYSQL veritabanı saklı yordamlarının ve işlev sözdizimi özetinin ayrıntılı açıklaması

Depolanan yordam nedir

Basit ifadeyle, Bir dizi SQL deyimi, güçlü işlevler, bazı daha karmaşık mantık işlevlerini gerçekleştirebilir, JAVA dilindeki yönteme benzer;

ps: Depolanan prosedürler, tetikleyicilere biraz benzer, her ikisi de bir SQL kümeleridir, ancak depolanan prosedürler aktif olarak çağrılır ve tetikleyicilerden daha güçlü işlevlere sahiptir.Tetikleyiciler, bir şey tetiklendikten sonra otomatik olarak çağrılır;

Saklanan prosedür özellikleri

  • Giriş ve çıkış parametreleri vardır, değişkenler bildirilebilir, if / else, case, while, vb. Kontrol ifadeleri vardır, saklı prosedürler yazılarak karmaşık mantık fonksiyonları gerçekleştirilebilir;
  • Fonksiyonların genel özellikleri: modülerleştirme, kapsülleme, kod yeniden kullanımı;
  • Hızlı hız, yalnızca ilk yürütmenin derleme ve optimizasyon adımlarından geçmesi gerekir ve sonraki çağrılar, yukarıdaki adımlar ortadan kaldırılarak doğrudan yürütülebilir;
  • MySQL saklı yordam oluşturma

    1. Dilbilgisi

    PROSEDÜR OLUŞTUR sp_name () rutin_body

    PROSEDÜR OLUŞTUR yordam adı () yordam gövdesi

    DELIMITER // PROSEDÜR OLUŞTURMA myproc (OUT s int) BAŞLA Öğrencilerden COUNT (*) İÇERİĞİ SEÇİN; SON // DELIMITER;

    MySQL varsayılan olarak sınırlayıcı olarak ";" kullanır. Sınırlayıcı bildirilmezse, derleyici saklı yordamı işleme için bir SQL ifadesi olarak değerlendirir, bu nedenle derleme işlemi bir hata bildirir, bu nedenle geçerli segment sınırlayıcısını önceden "DELIMITER //" ile bildirmeniz gerekir. Derleyicinin iki "//" arasındaki içeriği saklı yordamın kodu olarak görmesine izin verin ve bu kodları çalıştırmasın; "DELIMITER;" ayırıcıyı geri yüklemek anlamına gelir.

    2. Parametreler

    Depolanan prosedür ihtiyaçlara göre girdi, çıktı, girdi ve çıktı parametrelerine sahip olabilir. Birden fazla parametre varsa, bunları ayırmak için "," kullanın. MySQL saklı yordamının parametreleri, saklı yordamın tanımlanmasında kullanılır.Üç tür parametre vardır, IN, OUT, INOUT:

    • IN parametresinin değeri, saklı yordam çağrıldığında belirtilmelidir. Depolanan yordamdaki parametrenin değerini değiştirmek döndürülemez ve varsayılan değerdir
    • OUT: Değer, saklı yordam içinde değiştirilebilir ve geri döndürülebilir
    • INOUT: arama sırasında belirtilir ve değiştirilebilir ve iade edilebilir

    Bunlar arasında sp_name parametresi, saklı yordamın adıdır; proc_parameter, saklı yordamın parametre listesini temsil eder; karakteristik parametre, saklı yordamın özelliklerini belirtir; rutine_body parametresi, SQL kodunun içeriğidir ve SQL kodunun başlangıcını ve sonunu işaretlemek için BEGIN ... END öğesini kullanabilirsiniz.

    İpucu: Bir saklı yordam oluştururken, sistem varsayılan olarak CONTAINS SQL'i belirtir; bu, saklı yordamda SQL ifadelerinin kullanıldığı anlamına gelir. Ancak, saklı yordamda SQL deyimi kullanılmazsa, en iyisi bunu NO SQL olarak ayarlamaktır. Dahası, saklı yordamın YORUM bölümünde saklı yordamı basitçe yorumlamak en iyisidir, böylece gelecekte saklı yordamın kodunu okumak daha uygun olacaktır.

    Depolanan prosedür örneği

    Ardından, num_from_employee adlı bir saklı yordam oluşturun.

    Yukarıdaki saklı yordamın adı num_from_employee'dir; giriş değişkeni emp_id'dir; çıktı değişkeni count_num'dur. SELECT ifadesi, d_id değeri emp_id değerine eşit olan kayıtlar için çalışan tablosunu sorgular ve aynı d_id değerine sahip kayıtların sayısını hesaplamak için COUNT (*) kullanır ve son olarak hesaplama sonucunu sayım_sayısında depolar. Sonuçlar aşağıdaki gibidir:

    Yürütme tamamlandıktan sonra herhangi bir hata mesajı bildirilmezse bu, depolama işlevinin başarıyla oluşturulmuş olduğu anlamına gelir. Bu saklı yordam daha sonra çağrılabilir ve saklı yordamdaki SQL deyimi veritabanında çalıştırılır.

    Not: MySQL'deki varsayılan ifade bitiş karakteri noktalı virgüldür (;). Depolanan yordamdaki SQL deyiminin sona ermesi için noktalı virgül gerekir. Çakışmalardan kaçınmak için, MySQL sonlandırıcısını ayarlamak için önce "DELIMITER" kullanın. Son olarak, sonlandırıcıyı bileşen numarasına geri yüklemek için "DELIMITER;" kullanın. Bu, bir tetikleyici oluştururkenki ile aynıdır.

    işlevi

    MySQL'de, depolanmış bir işlev oluşturmanın temel biçimi aşağıdaki gibidir:

    FONKSİYON OLUŞTUR sp_name () RETURNS type rutine_body

    Bunlar arasında, sp_name parametresi, depolama işlevinin adıdır; func_parameter, depolama işlevinin parametre listesini temsil eder; RETURNS türü, dönüş değerinin türünü belirtir; karakteristik parametre, depolama işlevinin özelliklerini belirtir ve bu parametrenin değeri, depolama işlemindeki değerle aynıdır; Rutine_body parametresi, SQL kodunun içeriğidir ve SQL kodunun başlangıcını ve sonunu işaretlemek için BEGIN ... END öğesini kullanabilirsiniz.

    func_parameter, her biri bir parametre adı ve bir parametre türünden oluşan birden çok parametreden oluşabilir ve biçimi aşağıdaki gibidir: param_name type

    Bunlar arasında, param_name parametresi, depolama işlevinin parametre adıdır; tür parametresi, MySQL veritabanının herhangi bir veri türü olabilen depolama işlevinin parametre türünü belirtir.

    İşlev örneği

    Çalışanın_adından_adında bir depolama işlevi oluşturalım.

    Yukarıdaki depolama işlevinin adı çalışan_adından_adıdır; bu işlevin parametresi emp_id'dir ve dönüş değeri VARCHAR tipindedir. SELECT ifadesi, çalışan tablosundaki num değeri emp_id'ye eşit olan kaydı sorgular ve kaydın ad alanının değerini döndürür. Sonuçlar aşağıdaki gibidir:

    Sonuç, depolanan işlevin başarıyla oluşturulduğunu gösterir. Bu işlevin kullanımı MySQL dahili işlevleriyle aynıdır.

    Değişkenlerin kullanımı

    Depolanan prosedürlerde ve işlevlerde değişkenleri tanımlayabilir ve kullanabilirsiniz. Kullanıcılar, değişkenleri tanımlamak için DECLARE anahtar sözcüğünü kullanabilir. Ardından değişkenlere değerler atayabilirsiniz. Bu değişkenlerin kapsamı BEGIN ... END bloğundadır.

    1. Değişkenleri tanımlayın

    MySQL'de değişkenleri tanımlamak için DECLARE anahtar sözcüğünü kullanabilirsiniz. Değişkenleri tanımlamak için temel sözdizimi aşağıdaki gibidir:

    Var_name türü BİLDİRİN

    Bunlar arasında, DECLARE anahtar sözcüğü değişkenleri bildirmek için kullanılır; var_name parametresi, aynı anda birden çok değişkenin tanımlanabildiği değişkenin adıdır; tür parametresi, değişkenin türünü belirtmek için kullanılır; DEFAULT değer deyimi, değişkenin varsayılan değerini kullanılmayan değere ayarlar DEFAULT yan tümcesinde varsayılan değer NULL'dur.

    My_sql değişkeni aşağıda tanımlanmıştır, veri türü INT'dir ve varsayılan değer 10'dur.

    My_sql INT DEFAULT 10 BEYAN;

    2. Değişkenlere değer atayın

    MySQL, değişkenlere değer atamak için SET anahtar sözcüğünü kullanabilir. SET ifadesinin temel sözdizimi aşağıdaki gibidir:

    SET var_name = ifade ...

    Bunlar arasında, SET anahtar sözcüğü bir değişkene bir değer atamak için kullanılır; var_name parametresi değişkenin adıdır; ifade parametresi bir atama ifadesidir. Bir SET ifadesi aynı anda birden çok değişkene değer atayabilir ve her değişkenin atama ifadeleri virgülle ayrılmıştır.

    Aşağıdaki my_sql değişkeni için 30 değeridir.

    SET my_sql = 30;

    MySQL'de değişkenlere değer atamak için SELECT ... INTO deyimlerini de kullanabilirsiniz. Temel sözdizimi aşağıdaki gibidir:

    Tablo_adı WEHRE koşulundan var_adı İÇİNDE sütun_adı SEÇ

    Bunlar arasında, col_name parametresi sorgu alanının adını temsil eder; var_name parametresi değişkenin adıdır; table_name parametresi tablonun adını; koşul parametresi ise sorgu koşulunu ifade eder.

    Daha sonra, çalışan tablosundan 2 no'lu kaydı sorgulayın ve kaydın d_id değerini my_sql değişkenine atayın.

    Çalışan WEHRE'den my_sql'ye d_id SEÇİN id = 2;

    MySQL saklı yordam yazımının özeti

    1. Parametresiz bir saklı yordam oluşturun.

    prosedür ürünü oluştur () başla kullanıcıdan * seçin; son;

    Basit bir saklı yordam oluşturma ifadesi, şu anda çağrılan ifade şudur:

    çağrı prosedürü ();

    2. Parametrelerle saklı bir prosedür oluşturun

    Parametreli depolama iki parametre içerir,

    Bunlardan biri parametreleri aktarmaktır;

    Biri giden parametredir;

    Örneğin, bir saklı yordam:

    prosedür prosedürü oluşturun2 ( out p1 ondalık (8,2), out p2 ondalık (8,2), p3 int'te ) başla sipariş_adı = p3 olan kullanıcıdan p1'e toplamı (uid) seçin; kullanıcıdan p2'ye avg (uid) seçin; son;

    Yukarıdaki sql ifadesinden de görülebileceği gibi, p1 ve p2 değeri almak ve iletmek için kullanılır ve p3 bunu çağırarak iletilen belirli bir değere sahip olmalıdır.

    Özel arama süreci:

    call product (); // Parametre yok

    call Proced2 (@ userSum, @ userAvg, 201708); // Parametrelerle

    Kullanıldığında, userSum ve userAvg değerlerini doğrudan sorgulayabilirsiniz:

    @userSum, @userAvg seçin;

    Sonuçlar aşağıdaki gibidir:

    3. Depolanan prosedürü silin

    Sözdizimi: drop prosedürü_adı;

    Daha sonra daha fazla devop ve DBA içeriği paylaşacağım ve ilgilenen arkadaşlar buna dikkat edebilir ~

    Linux sistem CPU yükü ve CPU kullanımının derinlemesine araştırılması
    önceki
    Bu platform yalnızca 1 ürün satıyor, ancak e-ticaretin% 90'ından fazlasını yapıyor
    Sonraki
    Ülke vuruşu! Hebei'den bu tür bir eve sahip insanlar çabucak bakıyor! Eviniz mühürlenmiş olabilir ...
    Bankalar dumanla dolu, Alipay ve WeChat ateş ekliyor, ETC neden bu kadar şiddetli?
    Oracle veritabanı, toplamaya değer büyük nesne veri türü alan özeti lob
    Youku Oniki Saat
    Optimizasyon sistemi-mysql veritabanı sorgu önbellek özeti
    270.000 kat verimliliğiyle günde 20 mağaza açması Lei Jun'u "çıldırtıyor"
    En sıcak görev programı! 91 yaşındaki adam hasta ve yatalak, bakması için 17 torun ayarlandı
    Oracle veritabanı zayıflama programı-büyük tabloların geçmiş verilerinin geçişi
    Oracle izleme ilerlemesi - büyük miktarda veriyi silerken silme işleminin ilerlemesi nasıl izlenir?
    Hongmeng'in sıralaması tersine çevrildi: Ren Zhengfei'nin öngörüsü, Huawei'nin gelişmiş hayatta kalma yolu
    Yıllardır toplanan bir PG veritabanı dağıtım mimarisi şemasını paylaşın
    Yılda üç kez açığa satış, piyasa değeri 10 milyarın üzerinde buharlaştı ve hala duruyor! Anta kim utanıyor?
    To Top