logo

SQL Server İşlemi

SQL Server'daki bir işlem, sıralı ifade veya sorgu grubu bir veritabanında tek veya birden fazla görevi gerçekleştirmek için. Her işlem tek bir okuma, yazma, güncelleme veya silme işlemine veya tüm bu işlemlerin bir kombinasyonuna sahip olabilir. SQL Server'da her işlemin iki şey gerçekleşmesi gerekir:

  • İşlem tamamlandığında tüm değişiklikler başarılı olur.
  • Veya işlem geri alındığında tüm değişiklikler geri alınır.

Setteki tüm işlemler tamamlanmadan bir işlem başarılı olamaz. Bu, herhangi bir argümanın başarısız olması durumunda işlem işleminin başarısız olacağı anlamına gelir. Her işlem, ilk yürütülebilir SQL ifadesiyle başlar ve açık veya örtülü olarak bir taahhüt veya geri alma bulduğunda sona erer. Şunu kullanır: İŞLEMEK veya GERİ DÖN ifadeleri açıkça ve ayrıca bir DDL ifadesi kullanıldığında örtülü olarak kullanılır.

Aşağıdaki resimli gösterim işlem sürecini açıklamaktadır:

SQL Server İşlemi

Aşağıdaki örnek, işlem kavramını açıklayacaktır:

Bu örnekte, işlem kavramını açıklamak için bankacılık veritabanı sistemi kullanılacaktır. Bir banka müşterisinin ATM modunu kullanarak hesabından para çekmek istediğini varsayalım. ATM bu işlemi üç adımda gerçekleştirebilir:

  1. ilk adım talep edilen tutarın hesapta mevcut olup olmadığının kontrol edilmesidir.
  2. ikinci adım tutar mevcutsa tutarı hesaptan düşürür ve ardından hesap bakiyesini günceller.
  3. üçüncü adım Para çekme işlemini log dosyasına yazmaktır. Bu adım, işlemin başarılı veya başarısız olduğunu yazar. Başarılı olursa, veri değişikliğini veritabanına yazın. Aksi halde işlem önceki durumuna geri alınacaktır.

İşlemlerin ardındaki temel prensip, ifadelerden birinin hata vermesi durumunda, veri bütünlüğünü sağlamak için tüm değişiklik kümesinin geri alınmasıdır. İşlemler başarılı olursa tüm değişiklikler veri tabanında kalıcı olacaktır. Dolayısıyla, ATM'den para çekerken elektrik kesintisi veya başka sorunlar yaşanması durumunda işlemler, bakiyemizin tutarlı kalmasını garanti eder. İşlem bildirimi bu işlemleri en iyi şekilde gerçekleştirir çünkü işlemin dört temel özelliği tüm işlemleri daha doğru ve tutarlı kılar. İşlemin dört özelliğine ACID denir.

İşlem Özellikleri

İşlem özellikleri, aşağıda ayrıntılı olarak tartışılan ACID (Atomiklik, Tutarlılık, Yalıtım, Dayanıklılık) özelliği olarak anılır:

SQL Server İşlemi

Atomiklik: Bu özellik, işlemde yer alan tüm ifadelerin veya işlemlerin başarıyla gerçekleştirilmesini sağlar. Aksi takdirde tüm işlem iptal edilir ve herhangi bir işlem başarısız olduğunda tüm işlemler önceki durumuna geri döner.

Tutarlılık: Bu özellik, veritabanının durumunu yalnızca bir işlem başarıyla gerçekleştirileceği zaman değiştirmesini sağlar. Ayrıca verileri çökmelere karşı korumaktan da sorumludur.

İzolasyon: Bu özellik, tüm işlemlerin diğer işlemlerden izole edilmesini, yani işlemdeki her işlemin bağımsız olarak yürütülmesini garanti eder. Ayrıca ifadelerin birbirlerine karşı şeffaf olmasını da sağlar.

Dayanıklılık: Bu özellik, sistem çökse veya arızalansa bile taahhüt edilen işlemlerin sonucunun veritabanında kalıcı olarak kalmasını garanti eder.

SQL Server'daki İşlem Modları

SQL Server'ın kullanabileceği üç farklı işlem modu vardır:

Otomatik İşlem İşlem Modu: SQL Server'ın varsayılan işlem modudur. Her SQL ifadesini bir işlem olarak değerlendirecek ve sonuçlar buna göre işlenecek veya geri alınacak. Böylece başarılı ifadeler hemen işlenir, başarısız olan ifadeler ise hemen geri alınır.

Örtülü İşlem Modu. Bu mod, SQL Server'ın her DML ifadesi için örtülü işlemi başlatmasına izin verir, ancak ifadelerin sonunda kesinleştirme veya geri alma komutlarının kullanılmasını açıkça gerektirir.

Açık İşlem Modu: Bu mod kullanıcı tarafından tanımlanarak bir işlemin başlangıç ​​ve bitiş noktalarını tam olarak belirlememizi sağlar. Önemli bir hata durumunda otomatik olarak iptal edilir.

İşlem Kontrolü

İşlemleri kontrol etmek için kullanılan komutlar şunlardır:

    İŞLEME BAŞLAYIN:Her işlemin başlangıcını belirten bir komuttur.İŞLEMEK:Değişikliklerin kalıcı olarak veritabanına kaydedilmesini sağlayan komuttur.GERİ DÖNÜŞ:Yapılan tüm değişiklikleri iptal edip önceki durumuna dönmek için kullanılan komuttur.KAYDETME NOKTASI:Bu komut, işlem grupları içinde, işlemin tamamı yerine yalnızca bir kısmını geri almamıza olanak tanıyan noktalar oluşturur.KAYDETME NOKTASINI BIRAKIN:Halihazırda var olan bir KAYIT NOKTASI'nı kaldırmak için kullanılır.İŞLEMİ AYARLAYIN:Bu komut, bir işleme, onu salt okunur veya okunabilir/yazılabilir hale getirmek veya belirli bir geri alma segmentine atamak için kullanılabilecek bir ad verir.

NOT: İşlem Kontrol Dili komutları için yalnızca DML ifadelerini (INSERT, UPDATE ve DELETE) kullanabiliriz. Bu işlemler veritabanına otomatik olarak commit edildiğinden tablo oluştururken veya bırakırken bunları kullanamıyoruz.

İşlem Durumu

İşlemlerin kullanım süreleri boyunca nasıl gittiğini gösterir. İşlemin mevcut durumunun yanı sıra işlemin gelecekte nasıl işleneceğini açıklar. Bu durumlar, bir işlemin gerçekleştirilip gerçekleştirilmeyeceğini veya iptal edileceğini belirleyen kuralları tanımlar.

SQL Server İşlemi

SQL Server'daki her işlem durumunu açıklayalım:

Aktif Durum: İşlemin talimatları yürütülürken işlem aktif durumdadır. Şu şekilde değişir: 'kısmen kararlılık durumu' tüm 'okuma ve yazma' işlemleri hatasız tamamlanırsa. Herhangi bir talimat başarısız olursa 'başarısız durumuna' dönüşür.

Kısmen Taahhüt Edildi: Tüm okuma ve yazma işlemleri tamamlandığında değişiklik ana bellekte veya yerel arabellekte yapılır. Devlet gidecekti 'kararlı devlet' Değişiklikler veritabanında kalıcı hale getirilirse. Aksi takdirde 'başarısız duruma' gider.

Başarısız Durum: Herhangi bir işlemin talimatı başarısız olduğunda veya veritabanında kalıcı bir değişiklik başarısız olduğunda, işlem başarısız duruma geçer.

İptal Edilen Durum: İşlem bir yerden hareket eder 'başarısız durum' bire 'durdurulmuş durum' herhangi bir arıza meydana geldiğinde. Bu değişiklikler önceki durumlarda yalnızca yerel ara belleğe veya ana belleğe yapıldığı için değişiklikler kaldırılır veya geri alınır.

Taahhüt Edilen Durum: Değişiklikler veritabanında kalıcı hale getirildiğinde ve veritabanında sonlandırıldığında bir işlem tamamlanır ve bu duruma geçer. 'sonlandırılmış durum'.

java bağlantısı mysql

Sonlandırılmış Durum: Geri alma yoksa ve işlem devam ediyorsa 'kararlı devlet' eski işlem sonlandırılırken sistem tutarlı ve yeni bir işleme hazırdır.

SQL Server'da İşlemin Gerçekleştirilmesi

İşlemi SQL Server'da nasıl uygulayabileceğimizi anlamak için bazı örnekler alalım. Burada kullanacağımız 'Ürün' Tüm işlem durumlarını gösteren tablo.

Aşağıdaki SQL komut dosyaları, seçilen veritabanında Ürün tablosunu oluşturur:

 CREATE TABLE Product ( Product_id INT PRIMARY KEY, Product_name VARCHAR(40), Price INT, Quantity INT ) 

Daha sonra bu tabloya veri eklemek için aşağıdaki komut dosyalarını çalıştırın:

 INSERT INTO Product VALUES(111, 'Mobile', 10000, 10), (112, 'Laptop', 20000, 15), (113, 'Mouse', 300, 20), (114, 'Hard Disk', 4000, 25), (115, 'Speaker', 3000, 20); 

Verileri doğrulamak için SELECT ifadesini yürütün:

SQL Server İşlemi

COMMIT İşlemi Örneği

İşlemde kullanılan SQL İfadelerini birden çok mantıksal parçaya bölmek iyi bir fikirdir. Daha sonra verileri işlemeye veya geri almaya karar verebiliriz. Aşağıdaki adımlar bir işlem oluşturmayı göstermektedir:

  • İşlemi kullanarak başlayın İŞLEME BAŞLA emretmek.
  • SQL ifadelerini yazın ve bunları ihtiyaçlarımıza göre bölün
  • Kullan İŞLEMEK işlemi tamamlamak ve değişiklikleri kalıcı olarak kaydetmek için bildirim.

SQL Server'da COMMIT işlemlerini açıklayan komutlar aşağıdadır:

 -- Start a new transaction BEGIN TRANSACTION -- SQL Statements INSERT INTO Product VALUES(116, 'Headphone', 2000, 30) UPDATE Product SET Price = 450 WHERE Product_id = 113 -- Commit changes COMMIT TRANSACTION 

Herhangi bir hata bulunmazsa, her bir SQL işlem ifadesinin bağımsız olarak yürütüldüğü aşağıdaki çıktıyı göreceğiz:

SQL Server İşlemi

INSERT ve UPDATE ifadeleri, işlem gerçekleştirildikten sonra geri alınamaz. Commit işleminden sonra tabloyu doğruladığımızda aşağıdaki verileri göreceğiz:

SQL Server İşlemi

ROLLBACK İşlemi Örneği

Henüz veritabanına kaydedilmemiş tüm işlemleri geri almak ve işlemin başladığı noktaya dönmek için ROLLBACK komutunu kullanacağız. Aşağıdaki örnek, SQL Server'daki ROLLBACK işlemini açıklamaktadır:

 -- Start a new transaction BEGIN TRANSACTION -- SQL Statements UPDATE Product SET Price = 5000 WHERE Product_id = 114 DELETE FROM Product WHERE Product_id = 116 

Yukarıdaki işlemi gerçekleştirdiğimizde başarılı bir şekilde yürütüleceğini görebiliriz. Ancak veritabanındaki herhangi bir değişikliği etkilemeyecektir çünkü COMMIT veya ROLLBACK deyimini çalıştırmadığımız sürece değişiklikler kalıcı olamaz. Bu nedenle tüm veritabanı işlemlerini geri almak için ROLLBACK işlem komutunu kullanma seçeneğimiz bulunmaktadır. İşte tam işlem bildirimi:

 -- Start a new transaction BEGIN TRANSACTION -- SQL Statements UPDATE Product SET Price = 5000 WHERE Product_id = 114 DELETE FROM Product WHERE Product_id = 116 --Undo Changes ROLLBACK TRANSACTION 

İşlemlerde @@Error Global değişkeninin kullanımı:

Bu değişken Hata olup olmadığını kontrol etmek için kullanılır. Aşağıdaki örnek konseptini açıklamaktadır. Burada öncelikle BEGIN komutunu kullanarak işlemi başlatacağız ve ardından iki adet insert ifadesi yazacağız. Daha sonra global sistem değişkenini kullanacağız @@HATA içinde IF beyanı Bir hatayı kontrol etmek için. Değerin 0'dan büyük olması bir hata olduğu anlamına gelir. Artık işlem geri alınıyor; aksi takdirde işlem taahhüt edilir.

 BEGIN TRANSACTION INSERT INTO Product VALUES(115,'Speaker', 3000, 25) -- Check for error IF(@@ERROR > 0) BEGIN ROLLBACK TRANSACTION END ELSE BEGIN COMMIT TRANSACTION END 

Yukarıdaki işlem yürütüldüğünde geri alındığını fark edeceğiz. Bunun nedeni, Birincil anahtar sütununa bir değerin kopyasını ekleme girişimimizdir.

Otomatik Geri Alma İşlemi

İşlemlerin çoğu birden fazla sorgu içerir. İşlem yürütülürken SQL ifadelerinden herhangi birinin hata vermesi durumunda veritabanında herhangi bir değişiklik yapılmaz ve geri kalan ifadeler çalıştırılmaz. Bu kavram, SQL Server'da Otomatik Geri Alma İşlemi olarak bilinir. Bu süreci göstermek için basit bir örnek kullanalım.

 BEGIN TRANSACTION INSERT INTO Product VALUES(118, 'Desktop', 25000, 15) UPDATE Product SET Quantity = 'ten' WHERE Product_id = 113 SELECT * FROM Product COMMIT TRANSACTION 

Bu işlem aşağıdaki çıktıyı üretir:

SQL Server İşlemi

Bu çıktıda insert ifadesinin başarıyla yürütüldüğünü görebiliriz. Ancak güncelleme ifadesinin yürütülmesi veri türü dönüştürme sorunu nedeniyle bir hata buldu. Bu durumda SQL Server veritabanında herhangi bir değişikliğe izin vermez, bu da ekleme işleminin herhangi bir değer eklemediği ve select ifadesinin yürütülmediği anlamına gelir.

İşlemlerde Kaydetme Noktası

Kayıt noktası, kayıt noktasından sonra yürütülen tüm değişiklikleri geri almamıza olanak tanıyan bir işleme özel bir işaret ekler. Ayrıca işlemin tamamı yerine işlemin belirli bir bölümünü geri almak için de kullanılır. Bunu kullanarak tanımlayabiliriz. İŞLEMİ KAYDET sp_name ifade. Aşağıdaki örnek, insert deyimini taahhüt eden ve delete deyimini geri alan işlemlerde savepoint'in kullanımını açıklayacaktır.

 BEGIN TRANSACTION INSERT INTO Product VALUES(117, 'USB Drive', 1500, 10) SAVE TRANSACTION InsertStatement DELETE FROM Product WHERE Product_id = 116 SELECT * FROM Product ROLLBACK TRANSACTION InsertStatement COMMIT SELECT * FROM Product; 

116 ürün kimliğinin silindiğini ve ilk çıktıya 117'nin eklendiğini görebildiğimiz aşağıdaki sonuca bakın. Ancak ikinci çıktıda kayıt noktası nedeniyle silme işlemi geri alınmaktadır.

SQL Server İşlemi

Bir işlemde kayıt noktası nasıl serbest bırakılır?

Sürüm kayıt noktası, kayıt noktasından sonra yürütülen sorguların sonuçlarını geri döndürmeden, adlandırılmış kayıt noktasını mevcut işlemden kaldırmak için kullanılır. MySQL'de bu komut vardır, ancak SQL Server bir kayıt noktası yayınlamak için herhangi bir komut sağlamaz. Bunun yerine, bir taahhüt veya geri alma işleminin sonunda otomatik olarak serbest bırakılırlar, dolayısıyla bunlar hakkında orta düzeyde endişelenmemize gerek kalmaz.

SQL Server'da Örtülü İşlem

IMPLICIT_TRANSACTIONS seçeneğini etkinleştirerek örtülü bir işlem tanımlayabiliriz. Aşağıdaki örnek bu kavramı kolayca açıklayacaktır:

 SET IMPLICIT_TRANSACTIONS ON UPDATE Product SET Quantity = 10 WHERE Product_id = 113 SELECT IIF(@@OPTIONS & 2 = 2, 'Implicit Transaction Mode ON', 'Implicit Transaction Mode OFF' ) AS 'Transaction Mode' SELECT @@TRANCOUNT AS OpenTrans COMMIT TRANSACTION SELECT @@TRANCOUNT AS OpenTrans 

Bu işlemde iki seçenek kullandık @@OPTION ve @@TRANCOUNT. @@OPTOPN geçerli SET seçenekleriyle ilgili bilgileri sağlar ve @@TRANCOUNT geçerli oturumda BEGIN TRANSACTION ifadesini sağlar.

Şimdi, işlemin yürütülmesi aşağıdaki çıktıyı döndürecektir:

SQL Server İşlemi

SQL Server'da Açık İşlem

Açık bir işlemin başlangıç ​​noktasını tanımladığı için, açık bir işlemin BEGIN TRANSACTION komutu aracılığıyla tanımlanması gerekir. SQL Server'da açık işlemi aşağıdaki gibi tanımlayabiliriz:

 BEGIN TRANSACTION [ @trans_name_variable [WITH MARK ['description']]] 

Sözdiziminde trans_name seçeneği bir işlemin benzersiz adını belirtir. @trans_name_var işlem adını saklayan kullanıcı tanımlı bir değişkeni belirtir. Son olarak, İŞARET seçeneği, günlük dosyasında belirli bir işlemi işaretlememize olanak tanır.

BEGIN TRANSACTION komutu aracılığıyla yapılan açık işlem, işlemle ilgili kaynakların izolasyon düzeyine bağlı olarak bir kilit aldı. Kilit sorunlarını azaltmaya yardımcı olur. Aşağıdaki örneğe bakın:

 BEGIN TRANSACTION UPDATE Product SET Quantity = 15 WHERE Product_id = 114 SELECT @@TRANCOUNT AS OpenTrans COMMIT TRANSACTION SELECT @@TRANCOUNT AS OpenTrans 

İşte çıktı:

SQL Server İşlemi

SQL Server'da İşaretli İşlem

İşaretlenen işlem, günlük dosyalarındaki belirli bir işleme açıklama eklemek için kullanılır. Bir veritabanını önceki durumuna geri yüklerken tarih ve saat yerine kurtarma noktası olarak kullanabiliriz. İşaretin log dosyalarına yalnızca işaretlenen işlem veritabanını değiştirdiğinde eklendiğini bilmeliyiz. Aşağıdaki örneği kullanarak konseptini anlayabiliriz.

Veritabanını kazara değiştirdiğimizi ve veri değişikliğinin tam anını bilmediğimizi varsayalım; bu durumda veri kurtarma uzun zaman alabilir. Ancak işaretli işlemleri kullanırsak, veri değişikliklerinin tam zamanlamasını belirlemek için yararlı bir araç olabilir.

Aşağıdaki sözdizimi, SQL Server'da işaretlenen işlemi gösterir:

 BEGIN TRANSACTION trans_name WITH MARK 'description'; 

Burada işlemin adını tanımlamalı ve ardından MARK İLE seçeneğini eklemeliyiz. Aşağıdaki örnekte kayıtları sileceğiz ve işareti günlük dosyasına ekleyeceğiz:

 BEGIN TRANSACTION DeleteProduct WITH MARK 'Deleted Product with id = 117' DELETE Product WHERE Product_id = 117 COMMIT TRANSACTION DeleteProduct 

günlük işareti geçmişi tablo dahildir msdb veritabanı ve taahhüt edilen her işaretli işleme ilişkin bilgileri saklar. Logmarkhistory tablosundan ayrıntıları almak için aşağıdaki ifadeyi yürütün:

 SELECT * FROM msdb.dbo.logmarkhistory 

SQL Server'da Adlandırılmış İşlem

İşlemimize SQL Server’da da isim verebiliriz. Tek bir sorguda birçok işlemle çalışırken her zaman adlandırılmış işlemin kullanılması önerilir. Aşağıdaki örnekte bir işlemin nasıl yeniden adlandırılacağı açıklanmaktadır:

piton şerit
 BEGIN TRANSACTION AddProduct INSERT INTO Product VALUES(118, 'Desktop', 25000, 15) UPDATE Product SET Product_name = 'Pen Drive' WHERE Product_id = 117 COMMIT TRANSACTION AddProduct 

İşte çıktı:

SQL Server İşlemi

Çözüm

Bu makale, SQL Server ifadelerindeki işlemlere tam bir genel bakış sunacaktır. İşlemler ilişkisel veritabanı sistemlerinde faydalıdır çünkü veritabanı bütünlüğünü sağlarlar.