MySQL'de Saklı Prosedürler ve Tetikleyiciler

İçindekiler

MySQL veritabanı motoru tarafından sağlanan bazı araçlar şunlardır: saklı Prosedürler, fonksiyonlar ve tetik, kayıt ekleme veya değiştirme gibi işlemleri veya işlemleri gerçekleştirmek için kullanılır.

Saklı yordamlar, SQL kodunda geliştirilmiş küçük programlardır. Saklı yordam, veritabanıyla birlikte depolanan bir dizi SQL komutudur.

Saklı prosedürün avantajı, onu herhangi bir metin düzenleyicide ve hatta sunucuda oluşturabilmemizdir, veritabanı motoru tarafından yürütülür ve kullanıcılar tarafından değil, yalnızca yönetici tarafından erişilebilir.

Saklı yordam sonuçlarını bir uygulamaya gönderir, böylece öğreticide sunucunun aşırı yüklenmesini önleyerek bunları ekranda görüntüler:

  • MYSQL Saklı Yordamlar - Oluşturma, Sorgular ve Veri Eklemeleri

Bunların nasıl oluşturulacağını anlatmıştım, burada fonksiyonlar ve tetikleyiciler ekleyeceğiz. Kiralık yer diyeceğimiz bir gayrimenkulün veritabanında bir örnek göreceğiz ve ardından tabloları oluşturacağız.

 - 'gayrimenkul' tablosu için tablo yapısı OLUŞTURMA TABLOSU VAR ​​DEĞİLSE 'gayrimenkul' ('id' int (11) DEĞİL NULL, 'userid' int (11) DEFAULT NULL, 'idtype özelliği' int (6) DEFAULT '0 ', 'fiyat' ondalık (10,2) VARSAYILAN' 0,00 ', 'komisyon' ondalık (10,0) NULL DEĞİL, 'açıklama' metni, 'yüksek tarih' tarih VARSAYILAN' 0000-00-00 ', 'il kimliği' int (10) DEFAULT NULL, 'idlocalidad' int (10) DEFAULT NULL, 'adres' varchar (150) DEFAULT NULL, 'zemin ve apartman' varchar (100) VARSAYILAN NULL,'arasında_sokaklar' metin, 'idoperasyon' int (100) ) VARSAYILAN NULL , "özellikli" karakter (3) VARSAYILAN 'hayır',' image1' varchar (255) DEFAULT NULL, 'image2' varchar (255) VARSAYILAN NULL,' image3' varchar (255) VARSAYILAN NULL, 'image4' varchar (255) DEFAULT NULL, 'eski' varchar (100) DEFAULT NULL,' mt2covered' int (11) DEFAULT NULL, 'lot_surface' int (11) DEFAULT NULL, 'etkinleştirilmiş' numaralandırma ('evet',' hayır ') DEĞİL NULL DEFAULT' si ') MOTOR = MyISAM AUTO_INCREMENT = 196 VARSAYILAN CHARSET = latin1; - `gayrimenkul` ALTER TABLE` emlak` tablosunun endeksleri BİRİNCİL ANAHTAR (`id`) EKLE;

Şimdi, bir kaydı sorgulamak, eklemek, değiştirmek ve silmek için her işlem için saklı bir prosedür geliştireceğiz.

Phpmyadmin veya Heidisql gibi ücretsiz ve Wine ile Windows veya Linux üzerinde çalışan bir yönetici kullanabiliriz.

Emlak tablosunu sorgulamak için saklı bir prosedür oluşturuyoruz:

 DELIMITER // PROSEDÜR OLUŞTUR pa_listinmuebles () BEGIN SELECT * FROM özellikler; SON // AYIRICI;
MYSQL, bir ifadenin noktalı virgülle bittiğini anlar. NS DELIMITER ifadesi bitiş karakterini başka bir karakterle değiştirin, kural olarak // saklı yordamın sonunu belirtmek için kullanılır, böylece MySQL ilk noktalı virgülle karşılaştığında saklı yordamı bitirmez.

biz gidebiliriz Rutinler sekmesi oluşturduğumuz her işlemi görmek ve oradan kodu değiştirebilir, yürütebilir, dışa aktarabilir veya silebiliriz.

Saklayarak bir prosedürü yürütmek için ÇAĞRI komutu itibaren SQL sekmesi veya ayrıca .NET veya Java gibi bir programlama dilinden. Ardından komutla oluşturulan saklı yordamı çağırıyoruz.

 ÇAĞRI pa_listinmuebles();

Daha sonra bir özellik eklemek için saklı bir prosedür oluşturacağız, bunun için IN tipi parametrelere ihtiyacımız olacak, yani bir işlem yapmak için saklı prosedüre veri ve girdi değişkenleri atayacağız, bu durumda bunları veritabanına kaydedeceğiz.

 DELIMITER // CREATE PROSEDURE pa_nuevoinmueble (IN id INT, IN userid INT, IN fiyat ONDALIK, IN komisyon ONDALIK) BEGIN INSERT IN property` (`id`,`userid`, `fiyat`,` komisyon`) DEĞERLER (id, userid ) , fiyat, komisyon) SON // DELIMITER;

BÜYÜT

Ardından parametreleri çağırarak ve atayarak saklı yordamı yürütebiliriz.

 CALL `pa_newinmueble` ('12 ',' 15 ',' 10.00 ',' 0.05 ')
Phpmyadmin'den rutini çalıştırarak da veri girebiliriz.

BÜYÜT

Daha sonra Phpmyadmin editöründen bir mülkü düzenlemek için saklı prosedürü oluşturacağız, bu durumda sadece fiyatı değiştireceğiz.

Mysql sunucusunda tanımlanmış bir kullanıcıyı, bu durumda localhost ana bilgisayarının kök kullanıcısını atayabileceğimiz, saklı yordama erişebilmesi için Definer alanından roller oluşturabiliriz.
SQL kodundan yapmak istiyorsak aşağıdaki komutları çalıştırmalıyız:

 CREATE DEFINER = `root` @` localhost` PROSEDÜR `pa_editarinmueble` (`yeni özellik` DECIMAL (10,2), IN `özellik kimliği` INT (11)) BEGIN UPDATE özelliği SET fiyatı = yeni özellik WHERE id = özellik kimliği; SON
Çalıştırdın ve bitirdin.

Mysql'de Tetikleyici veya Tetikleyicileri Kullanma
MySQL'de Tetikleyici veya Tetikleyici, saklı bir prosedüre bağlı olan ve veritabanımızda belirli bir olay meydana geldiğinde otomatik olarak çalışmak için kullanılan bir dizi SQL ifadesidir. Bu olaylar, INSERT, UPDATE ve DELETE gibi işlemler veya ifadeler tarafından tetiklenir.

Bir örnek, bir değişiklik bir kayıt defterine kaydedildiğinde, hangi verilerin değiştirildiğini, ne zaman ve kimin değiştirdiğini bilmek için otomatik olarak bir yedekleme yaparız veya bir denetim dosyası kaydederiz. Verileri etkileyen herhangi bir manipülasyon için, yeni bilgileri desteklemek veya oluşturmak için kullanılabilirler.

Aşağıdaki gayrimenkul denetim tablosunu oluşturacağız:

 CREATE TABLE `denetim` (`user` VARCHAR (200) NULL DEFAULT NULL, `description` TEXT NULL,` date` DATETIME NULL DEFAULT NULL) COLLATE = 'latin1_swedish_ci' MOTOR = InnoDB
Birisi bir mülkün fiyatını değiştirirse, denetimde bir mesajı kaydeden bir tetikleyici oluşturacağız.
 CREATE DEFINER = `root` @` localhost` TRIGGER `real Estate_after_update` GÜNCELLEMEDEN SONRA` gayrimenkul` HER SATIR İÇİN DENETİME EKLE (kullanıcı, açıklama, tarih) DEĞERLER (kullanıcı (), CONCAT ('Emlak fiyatı değişti', NEW.id, '(', OLD.price, ') by (', NEW.price, ')'), NOW ())
Bu tetik bir fiyat güncellemesi gerçekleştikten sonra otomatik olarak çalışır, dilersek daha fazla alan ekleyebiliriz, ESKİ ile değişiklikten önceki değeri olan alanı belirtiriz ve YENİ ile girilen yeni değeri belirtiriz, ŞİMDİ () ile tarihi belirtiriz ve şimdiki zaman.

Olay olarak özelliklerde Güncelleme Sonrası olacak bir tetikleyici oluşturuyoruz, yani özellikler tablosunda bir güncelleme gerçekleştikten sonra, bu durumda değişikliği yapan kullanıcıyı, yeni fiyatı ve önceki fiyatı ekleyeceğiz.

Bir mülkte güncelleme yapıyorum:

 'pa_editarinmueble' ÇAĞRISI ('80000', '170')
Ardından denetim masasına gidiyoruz ve değişikliği görebiliyoruz:

Sonuçları Phpmyadmin'den baskı görünümünde bir raporda da görebiliriz. Mülkü tanımlayan verilerin, yapılan değişikliğin ve bunu yapan kullanıcının nasıl kaydedildiğini görebiliriz, ayrıca değişikliğin yapıldığı tarih ve saate sahibiz.

Daha sonra, bir mülk kiralanırsa, durumunu otomatik olarak aktif değil olarak değiştiren başka bir olası uygulama göreceğiz veya onu kullanılamaz hale getireceğiz.

Bunun için hangi mülkün kiralandığını saklamak için basit bir tablomuz olmalı, pratik bir örnek için verilerde çok fazla titizlik almayacağız.

 CREATE TABLE `kiralamalar` (` id` INT (10) NULL DEĞİL, `property id` INT (10) NOT NULL,` kiracı kimliği` INT (11) NULL DEĞİL, BİRİNCİL ANAHTAR (`id`)) COLLATE = 'latin1_swedish_ci ' MOTOR = InnoDB; 
Ardından, kiralama tablosuna yeni bir kayıt eklemek için saklı yordamı oluşturacağız.
 CREATE DEFINER = `root` @` localhost` PROSEDÜR `pa_newrental` (IN` özellik kimliği` INT, IN `kiracı kimliği` INT) DİL SQL BELİRLİ DEĞİL SQL SQL GÜVENLİK TANIMLAYICI YORUMU '' INSERT INTO' kiralamalar' ('özellik kimliği' `,` kiracı kimliği`) DEĞERLER (kiracı kimliği, kiracı kimliği)

Ve ardından etkinleştirilen özellikleri değiştirmek için tetikleyici:

 CREATE DEFINER = 'root' @' localhost' TETİKLEYİCİ 'rentals_after_insert' EKLENDİkten SONRA' kiralamalar' HER SATIR İÇİN GÜNCELLEME emlak SET etkinleştirildi = 'hayır' burada id = YENİ. propertyid.
Ardından, mülkün kimliğini ve kiraladığım müşterinin veya kiracının kimliğini atadığımız saklı yordamı çağırırız.
 Yeni kiralama için ARAYIN (170.11)
Daha sonra emlak tablosuna gidiyoruz ve aktif ise aktif durumdaki alan değişikliğinin aktif olmadığını görmeliyiz.

MySQL'de saklı yordamlarla tetikleyici kullanmanın avantajlarını aşağıdakiler için gördük:

  • Veri değişikliği olaylarını veya etkinliklerini bir tabloda denetleyin ve kaydedin.
  • Bir tablodaki izinleri ve eylemleri etkinleştirerek veya reddederek bir alanın durumunu değiştirme
  • Ayrıca, bir veya daha fazla tabloyu etkileyen olaylara göre eylemler yürüterek verilerin tutarlılığının korunmasına da olanak tanır.
Başka bir öğreticide, koşullu yapıları ve saklı yordamlarda tekrarlayan yapıları programlamaya devam edeceğiz.

Bu Eğitimi beğendiniz ve yardım ettiniz mi?Yazara olumlu puan vermek için bu düğmeye basarak yazarı ödüllendirebilirsiniz.

Arkadaşlarınızla sayfasını paylaşan sitenin gelişimine yardımcı olacak

wave wave wave wave wave