Kurs
SQL işlemleri, veritabanı yönetiminin önemli bir yönüdür. Verilerinizin doğru ve güvenilir kalmasını sağlamak için vardırlar. Hatta herhangi bir uygulamada veri bütünlüğünü korumanın temel bir parçası olduklarını söyleyebilirim.
Bu rehberde, SQL işlemlerini temelden ele alacağız. Bilmeniz gereken her şeyi kapsayacağız. SQL becerilerinizi geliştirmeye hevesliyseniz, SQL'e ne kadar aşina olduğunuza bağlı olarak Introduction to SQL veya Intermediate SQL Server kursumuzu şiddetle öneririm. Her iki kurs da çok popülerdir ve pratik kullanım senaryolarına dayalı yapılandırılmış alıştırmalarla SQL'de sağlam bir temel oluşturmanın harika bir yoludur.
SQL İşlemleri Nedir?
SQL işlemleri, bir dizi SQL işleminin tek ve birleşik bir süreç olarak yürütülmesini sağlar. Bu, veri bütünlüğünü korumak için iyi bir araç olmalarını sağlar. Bir tabloda birden çok satırı güncellemekten hesaplar arasında para transferine kadar pek çok farklı şekilde kullanabilirsiniz. İşlemler, işlemleri tek bir mantıksal birimde gruplandırarak tutarlılık ve kesintisizlik sağlar.
SQL işlemlerinin amacı
Bir SQL işlemi, tek ve bölünemez bir iş birimi olarak ele alınan bir veya daha fazla veritabanı işlemi dizisidir (INSERT, UPDATE veya DELETE gibi). İşlemler sayesinde, işlem içindeki değişikliklerin ya tamamı başarıyla uygulanır ya da hiçbiri uygulanmaz. Bu da veritabanının tutarlı ve bozulmadan kalmasını garanti eder.
Örneğin, iki banka hesabı arasında para transferi yapmayı hayal edin:
- Hesap A'dan 100 $ düş.
- Hesap B'ye 100 $ ekle.
Bir işlem olmadan bu adımlardan biri başarısız olursa, tutarsız verilerle karşılaşma riski doğar—para düşülür ama yatırılmaz. Bu adımları bir işlem içinde gruplandırarak her iki işlemin de başarılı olmasını ya da hiçbirinin uygulanmamasını sağlarsınız.
İşlemlerin temel özellikleri: ACID
ACID özellikleri, işlemlerin güvenilirliğini belirler:
| Özellik | Açıklama | Gerçek Hayat Benzetmesi |
|---|---|---|
| Atomiklik | Bir işlemin tüm parçalarının tamamlanmasını ya da hiçbirinin tamamlanmamasını sağlar. | Bir ışık düğmesi: Ya tamamen açık ya tamamen kapalıdır—arada bir durum yoktur. |
| Tutarlılık | Bir işlemin veritabanını kurallara ve kısıtlara uyarak geçerli bir durumda bıraktığını garanti eder. | Bir terazi: Bir tarafa ağırlık eklendiğinde, dengeyi korumak için diğer taraf ayarlanır. |
| Yalıtım | İşlemlerin birbirini etkilemesini önler; her işlem tek başına çalışıyormuş gibi veriler işlenir. | Market kasası: Sıradaki herkesin ürünleri birbirine karışmadan tek tek işleme alınır. |
| Dayanıklılık | Bir işlem onaylandığında, sistem arızasında bile değişikliklerin kalıcı olmasını sağlar. | Bir belgeyi kaydetmek: Bilgisayarınız çökse bile belge sağlam kalır. |
Atomiklik: Tamamlanmış işlemleri sağlamak
Atomiklik, bir işlemin ya tamamen yapılması ya da hiç yapılmaması demektir. İşlemin herhangi bir kısmı başarısız olursa, tüm işlem geri alınır ve veritabanı değiştirilmeden kalır. Örneğin:
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
-- Commit only if both operations succeed
COMMIT;
İkinci UPDATE sırasında bir hata oluşursa, veritabanı özgün durumuna döner ve kısmi değişiklikler engellenir.
Tutarlılık: Veritabanı kurallarını korumak
Tutarlılık, bir işlemin veritabanını bir geçerli durumdan diğerine taşımasını sağlar. Bu, işlem boyunca tüm kuralların, kısıtların ve ilişkilerin korunduğu anlamına gelir.
Örneğin, bir tabloda bir sütunda NOT NULL kısıtı varsa, NULL değer eklemeye çalışan bir işlem başarısız olur ve veri bütünlüğü korunur.
Yalıtım: İşlem çakışmalarını önlemek
Yalıtım, işlemler aynı anda yürütüldüğünde bile birbirleriyle çakışmalarını önler. Örneğin, iki kullanıcı aynı kaydı güncellediğinde, yalıtım bir kullanıcının değişikliklerinin diğerininkini ezmesini veya bozmasını engeller.
READ COMMITTED ve SERIALIZABLE gibi yalıtım seviyeleri, bu ayrımın ne kadar sıkı olacağını belirler. Bu da performans ve tutarlılık arasında denge kurar.
Dayanıklılık: Değişiklikleri kalıcı kılmak
Dayanıklılık, bir işlem onaylandığında veritabanındaki değişikliklerin sistem arızası sırasında bile kalıcı olmasını garanti eder. Veritabanları, onaylanan işlemleri kalıcı belleğe yazarak dayanıklılığı sağlar.
Örneğin, bir taslak e-posta güvenle saklanır; bilgisayarınız çökse bile kullanılabilir olur.
Transactions and Error Handling in SQL Server kursumuzu almanızı öneririm. Hata yönetimi gibi önemli SQL kavramlarını öğrenmek için değerli bir kaynaktır.
SQL İşlemleri Nasıl Uygulanır
SQL işlemlerini kullanmak için BEGIN, COMMIT ve ROLLBACK gibi komutları kullanırız; böylece işlemleri etkin şekilde yönetir, işlemleri birlikte gruplar ve hataları ele alırız.
BEGIN, COMMIT ve ROLLBACK kullanımı
-
BEGIN: Bir işlemin başlangıcını işaretler. Sonraki tüm işlemler bu işlemin parçası olacaktır. -
COMMIT: İşlemi sonlandırır ve tüm değişiklikleri veritabanında kalıcı hale getirir. -
ROLLBACK: Bir hata veya arıza durumunda, işlem sırasında yapılan tüm değişiklikleri geri alır ve veritabanını önceki durumuna döndürür.
Basit bir iş akışı şöyle:
BEGIN TRANSACTION; -- Start the transaction
-- Perform database operations
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
COMMIT; -- Finalize the transaction
Bir hata oluşursa, bunun yerine işlemi geri alabilirsiniz:
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
-- Simulate an error
ROLLBACK; -- Undo the changes
İşlem uygulamasına yönelik pratik örnekler
Söylediğimiz gibi, ilişkili işlemleri gruplandırarak, işlemler tüm değişikliklerin başarıyla uygulanmasını ya da hiçbirinin uygulanmamasını sağlar ve tutarsız durumları önler. Şimdi, işlemlerin pratikte nasıl çalıştığını göstermek için gerçek dünya örneklerini deneyelim.
Örnek 1: Hesaplar arasında para transferi
Bir bankacılık sisteminde, hesaplar arasında para transferi bir hesaptan borçlandırma ve diğerine alacak kaydetmeyi gerektirir. Bir işlem, bu işlemlerin birlikte başarılı olmasını veya birlikte başarısız olmasını sağlar.
BEGIN TRANSACTION;
-- Deduct $500 from account A
UPDATE accounts SET balance = balance - 500 WHERE account_id = 1;
-- Add $500 to account B
UPDATE accounts SET balance = balance + 500 WHERE account_id = 2;
-- Commit the transaction
COMMIT;
If an error occurs, such as insufficient funds, the transaction can be rolled back:
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 500 WHERE account_id = 1;
-- Check for errors (pseudo-code for demonstration)
-- IF insufficient_balance THEN
ROLLBACK;
-- ELSE Commit the transaction
COMMIT;
Örnek 2: E-ticarette stok yönetimi
Bir e-ticaret platformunda, bir işlemin aynı anda stok seviyelerini güncellemesi ve satışı kaydetmesi gerektiğini düşünün.
BEGIN TRANSACTION;
-- Reduce inventory for the purchased product
UPDATE inventory SET stock = stock - 1 WHERE product_id = 101;
-- Record the sale in the orders table
INSERT INTO orders (order_id, product_id, quantity) VALUES (12345, 101, 1);
-- Commit the transaction
COMMIT;
```SQL
If an error occurs, such as trying to sell an out-of-stock product, the transaction can be rolled back to ensure consistency.
```SQL
BEGIN TRANSACTION;
UPDATE inventory SET stock = stock - 1 WHERE product_id = 101;
-- Check stock levels (pseudo-code)
-- IF stock < 0 THEN
ROLLBACK;
-- ELSE Record the sale and commit
INSERT INTO orders (order_id, product_id, quantity) VALUES (12345, 101, 1);
COMMIT;
Etkili İşlem Yönetimi için İpuçları
İşlemleri etkili şekilde yönetmek, veritabanı bütünlüğünü korumanın ve kesintisiz işlemler sağlamanın anahtarıdır. İster finansal güncellemeleri yürütün ister karmaşık veri kümeleriyle çalışın, en iyi uygulamaları takip etmek sorunlardan kaçınmanıza yardımcı olur. Aşağıda işlem işlemenizi optimize etmenize yardımcı olacak bazı ipuçları yer alır:
-
Kritik İşlemler için Transaction Kullanın: Finansal güncellemeler veya çok tablolu eklemeler gibi birlikte başarılı olması ya da birlikte başarısız olması gereken işlemleri, örneklerimizde gördüğümüz gibi, gruplandırın.
-
Hata Yönetimi Mekanizmaları Kurun: Olası hataları her zaman öngörün ve veri bütünlüğünü korumak için
ROLLBACKkullanın. -
İşlemlerinizi Test Edin: İşlem mantığınızın her koşulda doğru çalıştığından emin olmak için farklı senaryoları simüle edin.
İşlemleri doğru şekilde anlamak ve uygulamak, veritabanınızın sağlamlığını artırır ve SQL'de daha ileri düzey zorluklarla başa çıkmaya hazırlar. Ayrıntılı öğrenme için, veritabanı yönetimi becerilerinizi geliştirmek üzere SQL Fundamentals beceri yolumuzu keşfedin.

SQL İşlemlerinde Yaygın Zorluklar ve Çözümler
SQL işlemlerini etkili şekilde yönetmek, kilitlenmeler, eşzamanlılık ve veri bütünlüğü gibi sorunları ele almayı içerir. Bu zorlukları anlamak ve doğru stratejileri uygulamak, sorunsuz işlem yönetimini sağlayabilir.
Kilitlenmeler ve eşzamanlılıkla başa çıkma
Kilitlenmeler ve eşzamanlılık sorunları, özellikle birden çok işlemin paylaşılan kaynaklar için yarıştığı veritabanı sistemlerinde yaygındır. Bu problemler veritabanı performansını olumsuz etkileyebilir, işlemleri yavaşlatıp durdurabilir. Etkili stratejiler uygulamak, sorunsuz işleyişi sürdürmek için şarttır.
Kilitlenmeleri belirleme ve çözme
Kilitlenme, iki veya daha fazla işlemin, birbirlerinin elinde tuttukları kaynakları bekleyerek birbirlerini süresiz olarak engellemesiyle oluşur. Kilitlenmelerle başa çıkmak için şu adımları izleyin:
1. Kilitlenmeleri Belirleme
- Gerçek zamanlı olarak kilitlenmeleri tespit etmek için veritabanı günlüklerini veya izleme araçlarını kullanın.
- PostgreSQL ve SQL Server gibi modern ilişkisel veritabanı yönetim sistemleri (RDBMS), kilitlenmeleri otomatik olarak algılayıp sonlandıran yerleşik mekanizmalar içerir.
2. Kilitlenmeleri Çözme
- Uygulamanızda, kilitlenme çözüldükten sonra başarısız olan bir işlemi yeniden çalıştırmak için yeniden deneme mantığı uygulayın.
- Kilitlenme riskini en aza indirmek için işlemler genelinde kaynaklara erişimde tutarlı bir sıra belirleyin.
Kaynak sıralamasına örnek:
-- Example of resource ordering to prevent deadlocks
BEGIN TRANSACTION;
UPDATE table_a SET col = 'value' WHERE id = 1;
UPDATE table_b SET col = 'value' WHERE id = 2;
COMMIT;
Eşzamanlılığı yönetme teknikleri
Eşzamanlılık sorunları, birden çok işlem aynı anda paylaşılan kaynaklarla etkileşime girdiğinde, çatışmalara veya tutarsız verilere yol açabilecek durumlarda ortaya çıkar. Bu zorlukların üstesinden gelmek için yaygın olarak iki temel teknik kullanılır:
Kilit mekanizmaları
Kilitler, kaynaklara erişimi kontrol eder ve işlemsel bütünlüğü sağlar. Paylaşımlı kilitler, birden çok işlemin bir kaynağı değiştirmeden okumasına izin verir ve okuma işlemleri sırasında veri tutarlılığını korur. Öte yandan, münhasır kilitler diğer tüm işlemlerin kaynağa erişimini kısıtlar ve münhasır yazma erişimi sağlar.
Kilit uygulamaya örnek:
SELECT * FROM inventory WITH (ROWLOCK, HOLDLOCK) WHERE product_id = 101;
Yalıtım seviyeleri
Yalıtım seviyeleri, işlemlerin birbirleriyle nasıl etkileşeceğini belirler ve performans ile veri tutarlılığı arasında denge kurar. Örneğin:
-
Read Uncommitted kirli okumaya izin verir; kilitleme yükünü en aza indirerek performansı artırır.
-
Serializable işlemleri tamamen yalıtarak en yüksek düzeyde tutarlılık sağlar, ancak eşzamanlılığı azaltabilir.
Setting a transaction to the Serializable isolation level:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
-- Transaction logic
COMMIT;
Veri bütünlüğünü ve hata yönetimini sağlama
İşlemler içinde veri bütünlüğünü korumak, kısmi güncellemeleri veya bozuk durumları önlemek için şarttır. Sağlam hata yönetimi mekanizmaları, güvenilir veritabanı işlemlerini daha da güvence altına alır.
Kısmi geri almalar için savepoint kullanma
Savepoint'ler, bir işlem içinde kontrol noktaları oluşturmanıza olanak tanır. Bir hata oluşursa, tüm işlemi geri almak yerine belirli bir savepoint'e dönebilirsiniz.
-- Start Transaction
BEGIN TRANSACTION;
-- Savepoint for first operation
SAVEPOINT step1;
-- First Operation: Debit Account 1
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
-- Optional: Rollback to step1 if needed
-- ROLLBACK TO step1;
-- Second Operation: Credit Account 2
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
-- Commit Transaction
COMMIT;
Savepoint'ler, özellikle çok adımlı karmaşık işlemlerde daha ayrıntılı kontrol sağlar.
Hata yönetimi mekanizmaları uygulama
Etkili hata yönetimi, işlemlerin başarıyla tamamlanmasını ya da hatalar durumunda zarifçe başarısız olmasını sağlar. Temel stratejiler şunları içerir:
-
TRY CATCH Blokları: Hataları bir işlem bloğu içinde dinamik olarak ele alın.
-
İşlem Günlüğü: Hataları ve işlem durumlarını izlemek için günlükleri tutun.
-- Example of error handling with TRY CATCH
BEGIN TRY
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
COMMIT;
END TRY
BEGIN CATCH
ROLLBACK;
PRINT 'Transaction failed and rolled back.';
END CATCH;
Bu mekanizmaları kullanarak beklenmedik hatalardan kurtulabilir ve veri bütünlüğünün korunmasını sağlayabilirsiniz.
Kilitlenmeler, eşzamanlılık sorunları ve hata yönetimi gibi zorlukları ele almak, sağlam bir işlem yönetimi için kritiktir. Uygun yalıtım seviyeleri belirlemek, savepoint kullanmak ve TRY...CATCH bloklarını uygulamak gibi teknikler, yalnızca veri bütünlüğünü korumakla kalmaz, aynı zamanda sistem güvenilirliğini de artırır.
SQL İşlemlerinde İleri Kavramlar
Bu sonraki bölüm, iç içe işlemleri, savepoint'leri ve birden çok veritabanına yayılan dağıtık işlemlerin karmaşık dünyasını kapsar. Bu gibi daha ileri konuları öğrenmek için Introduction to Oracle SQL kursumuzu öneririm.
İç içe işlemler ve savepoint'ler
İç içe işlemler, işlemlerin içinde işlemlerdir. Her RDBMS tarafından doğrudan desteklenmeseler de, işlemler üzerinde daha ayrıntılı kontrol sağlamak için savepoint kullanılarak simüle edilebilirler.
Savepoint'ler, tek bir işlem içinde kısmi geri almalar sağlar; daha büyük bir işlemin belirli bölümlerindeki hataları izole edip kurtarmanıza olanak tanır.
Savepoint'ler nasıl çalışır:
- Bir işlem başlatın.
- İşlemin kritik aşamalarında savepoint'ler tanımlayın.
- Bir sorun çıkarsa, tüm işlemi atmak yerine bir savepoint'e geri dönün.
- Tüm işlemler başarılı olduğunda işlemi onaylayın.
Örnek: Savepoint'lerle iç içe işlemleri simüle etmek
BEGIN TRANSACTION;
-- Step 1: Create a savepoint
SAVEPOINT step1;
-- Step 2: Execute an operation
UPDATE inventory SET quantity = quantity - 10 WHERE product_id = 1;
-- Step 3: Create another savepoint
SAVEPOINT step2;
-- Step 4: Execute another operation
UPDATE inventory SET quantity = quantity + 10 WHERE product_id = 2;
-- Roll back to a savepoint if needed
ROLLBACK TO step2;
-- Finalize the transaction
COMMIT;
Savepoint'ler, karmaşık işlem mantığını yönetirken esneklik sağlar; her şeyi onaylamadan önce daha küçük işlem parçalarını test edip doğrulamanıza olanak tanır.
Birden çok veritabanına yayılan dağıtık işlemler
Dağıtık işlemler, tutarlılığı sağlamak için birden çok veritabanı genelinde eylemleri koordine etmeyi içerir. Bu işlemler, mikro hizmetler veya veri entegrasyon hatları gibi dağıtık mimarilere sahip sistemler için önemlidir.
Dağıtık işlemlerin zorlukları
- Veri Tutarlılığı: Tüm veritabanlarının bağımsız olmalarına rağmen senkronize bir durumu korumasını sağlamak.
- Ağ Gecikmesi: Veritabanları arasındaki iletişim gecikmeleri işlem zamanlamasını karmaşıklaştırabilir.
- Kısmi Başarısızlıklar: Bir veritabanı onaylayıp diğeri başarısız olursa, tüm sistem tutarsız hale gelebilir.
Dağıtık işlemler için çözümler
İleri düzey protokoller olan İki Aşamalı Onay (2PC) ve Üç Aşamalı Onay (3PC) bu zorlukları ele almak için kullanılır.
- İki Aşamalı Onay (2PC):
- Aşama 1: Hazırlık – Tüm veritabanları onay için hazır olduklarını bildirir.
- Aşama 2: Onay – Tüm katılımcılar kabul ederse işlem onaylanır; aksi takdirde geri alınır.
- Üç Aşamalı Onay (3PC), 2PC sırasında yaşanan ağ arızaları gibi sorunları ele almak için bir ön-onay aşaması ekler.
Sonuç
SQL işlemlerine hakim olmak, her geliştirici veya veritabanı yöneticisi için değerli bir beceridir. Başlamak için önce ACID özelliklerinin temellerini öğrenmenizi ve ardından BEGIN, COMMIT ve ROLLBACK ile temel uygulamaları pratik etmenizi öneririm. Ancak bundan sonra iç içe ve dağıtık işlemler gibi ileri kavramlara geçerdim.
SQL becerilerini geliştirmek için özel öneriler arıyorsanız, Intermediate SQL Server kursumuzu deneyin. Bu makaledeki içeriğe benzer bir içeriği çok daha fazla ayrıntı ve alıştırmayla sunan yapılandırılmış bir kurs için Transactions and Error Handling in SQL Server kursumuzu alın. Her iki kursu da almak, güçlü bir geliştirici olmanıza yardımcı olacaktır. Ayrıca SQL Tetikleyicileri hakkında da bir makale yazdım; bu da SQL geliştiricileri için önemli bir konudur, mutlaka göz atın!
SQL İşlemleri Hakkında SSS
SQL işlemi nedir?
SQL işlemi, veri bütünlüğünü sağlayan tek bir mantıksal iş birimi olarak gerçekleştirilen işlem dizisidir.
SQL işlemleri neden önemlidir?
SQL işlemleri, işlemleri tek bir birimde gruplayarak veritabanlarında veri bütünlüğünü ve tutarlılığı korumak için kritik öneme sahiptir.
SQL işlemlerinde ACID özellikleri nelerdir?
ACID özellikleri—Atomiklik, Tutarlılık, Yalıtım, Dayanıklılık—güvenilir ve tutarlı işlemler sağlar.
SQL'de bir işlem nasıl uygulanır?
SQL'de işlemleri yönetmek için BEGIN, COMMIT ve ROLLBACK ifadelerini kullanın.
SQL işlemlerinde kilitlenme nedir?
Kilitlenme, iki veya daha fazla işlemin, diğerinin elindeki kaynağı bekleyerek birbirini engellemesiyle oluşur.
SQL'de kilitlenmeler nasıl çözülebilir?
Kilitlenmeler, ilgili işlemleri belirleyip zaman aşımı veya öncelik tabanlı çözüm gibi stratejiler kullanılarak çözülebilir.
SQL işlemlerinde savepoint nedir?
Savepoint, bir işlem içinde kısmi geri almaya olanak tanıyarak işlem yönetimi üzerinde daha fazla kontrol sağlar.
İç içe işlemler nedir?
İç içe işlemler, tek bir işlem içinde yer alan işlemlerdir ve karmaşık işlem yönetimine olanak tanır.
Dağıtık işlemler nasıl çalışır?
Dağıtık işlemler, birden çok veritabanını kapsar ve tüm sistemlerde tutarlılığı sağlamak için koordinasyon gerektirir.
SQL işlemlerinde hata yönetiminin rolü nedir?
Hata yönetimi, hatalar durumunda işlemlerin başarıyla tamamlanmasını veya geri alınmasını sağlayarak veri bütünlüğünü korur.
Yapay zekâ, makine öğrenimi ve veri bilimi alanlarında uzmanlaşmış teknik yazar; karmaşık fikirleri anlaşılır ve erişilebilir kılar.

