DDL, DML ve DCL: SQL komutları hangi gruba girer?
DDL, DML ve DCL, SQL komutlarını yapıyı tanımlama, veriyi işleme ve yetki verme olarak ayırır. Örnek komutlarla farkları ve kullanım yerleri.
DDL, DML ve DCL nedir?
DDL, DML ve DCL, SQL komutlarını görevlerine göre ayıran gruplardır. DDL (Data Definition Language, veri tanımlama dili) veritabanının yapısını kurar ve değiştirir. DML (Data Manipulation Language, veri işleme dili) tablolardaki kayıtları ekler, günceller ve siler. DCL (Data Control Language, veri kontrol dili) kimin hangi nesneye hangi işlemi yapabileceğini belirler.
Bu ayrım, bir komutun veritabanında ne tür bir etki bıraktığını hızlıca anlamayı sağlar. Yapıyı değiştiren bir komutla kayıtları değiştiren bir komut aynı özenle ele alınmaz: biri tablonun şeklini, diğeri içindeki bilgiyi etkiler. DCL ise işin güvenlik tarafını yönetir.
DDL: yapıyı tanımlayan komutlar
DDL komutları tabloları, indeksleri, görünümleri ve şemaları oluşturur, değiştirir ya da kaldırır. Temel komutlar CREATE, ALTER ve DROP'tur. Örneğin bir müşteri tablosu şöyle kurulur:
CREATE TABLE customer (id INTEGER PRIMARY KEY, name TEXT, email TEXT);
Sonradan bir sütun eklemek için ALTER TABLE customer ADD COLUMN city TEXT; yazılır. Tabloyu tamamen kaldırmak için DROP TABLE customer; kullanılır ve bu komut hem yapıyı hem içindeki tüm kayıtları götürür.
DDL komutlarının geri alınabilirliği veritabanı sistemine göre değişir. Bazı sistemler bu komutları otomatik onaylar, bazıları bir işlem içinde geri almaya izin verir. Üretim ortamında DDL çalıştırmadan önce yedek almak ve komutu önce test ortamında denemek yaygın bir disiplindir.
DML: veriyle çalışan komutlar
DML komutları tablonun içindeki kayıtlara dokunur. INSERT yeni kayıt ekler, UPDATE var olanı değiştirir, DELETE kayıt siler. Sorgulama için kullanılan SELECT çoğu kaynakta DML içinde sayılır, bazı kaynaklar onu ayrı bir sorgulama grubu (DQL) olarak ele alır.
Örnek: INSERT INTO customer (name, email) VALUES ('Elif', '[email protected]'); satırı tabloya bir kayıt ekler. UPDATE customer SET city = 'Ankara' WHERE email = '[email protected]'; yalnız o kaydı günceller.
DML'in en sık görülen hatası WHERE koşulunu unutmaktır. Koşulsuz yazılmış bir UPDATE ya da DELETE tablodaki tüm satırları etkiler. Bu yüzden önce aynı koşulla bir SELECT çalıştırıp etkilenecek kayıtları görmek, işlemi bir transaction içinde yürütmek güvenli yoldur.
DCL: yetkileri yöneten komutlar
DCL, erişim denetimini sağlar. GRANT bir kullanıcıya ya da role yetki verir, REVOKE o yetkiyi geri alır. Örneğin GRANT SELECT ON customer TO report_reader; komutu report_reader rolüne yalnız okuma izni tanır, REVOKE SELECT ON customer FROM report_reader; ise bu izni kaldırır.
İyi bir yetkilendirme en az yetki ilkesine dayanır: herkese yalnız işini yapmaya yetecek kadar hak verilir. Analistlerin okuma, uygulamanın belirli tablolarda ekleme ve güncelleme, yapı değişikliğinin ise yalnız yetkili yöneticilerde olması hem kazara hataları hem kötüye kullanımı sınırlar. Sistemlere göre ek komutlar bulunabilir, ayrıntı için kullandığınız veritabanının belgesine bakmak gerekir.
Bu gruplar bir arada nasıl çalışır?
Örneğin yeni bir sipariş uygulaması kuruluyor olsun. Veritabanı yöneticisi DDL ile orders ve customer tablolarını oluşturur, aralarındaki yabancı anahtar ilişkisini tanımlar. Uygulama canlıya çıkınca her sipariş DML ile bir INSERT olarak kaydedilir, kargo bilgisi güncellendikçe UPDATE çalışır. Yönetici DCL ile uygulama hesabına yalnız bu tablolarda yazma izni verir, raporlama hesabına ise yalnız okuma izni tanır.
Bu iş bölümü yazılım ekiplerinde sık görülür: şema değişiklikleri sürüm kontrolündeki betiklerle ve onaydan geçerek yapılır, DML uygulama koduyla akar, DCL ise güvenlik ve operasyon ekiplerinin sorumluluğunda kalır.
Sık karıştırılan noktalar
- DROP ile DELETE aynı şey değildir: DROP tabloyu kaldırır, DELETE yalnız satırları siler ve tabloyu yerinde bırakır.
- TRUNCATE tablodaki tüm kayıtları hızla boşaltır. Çoğu sistemde DDL sayılır ve DELETE kadar ayrıntılı geri alma desteği sunmayabilir.
- ALTER ile yapı değişir, UPDATE ile içerik değişir. Sütun adı eklemek DDL, hücre değerini değiştirmek DML'dir.
İşlem denetimi için kullanılan COMMIT ve ROLLBACK komutları da bazı kaynaklarda TCL (Transaction Control Language) adıyla ayrı bir grup olarak anılır. Bu komutlar DML'in güvenle kullanılmasını sağlar: değişikliği kalıcı kılar ya da geri alır.
Bu kavramlar Mindset programlarında nerede geçer?
SQL ile Programlama Eğitimi'nde Veritabanları Oluşturma, Tablolarla Çalışma ve Veri İşleme Dili modülleri bu grupların yapı ve veri tarafını sırayla ele alır. Raporlama yapan analistler ve uygulama geliştiren ekipler için, sorgunun ötesinde tabloyu kurma ve değiştirme becerisi kazanmak isteyenlere uygundur.
LLM ile Veri Sorgulama (Text-to-SQL) programındaki Sonuç Doğrulama ve Güvenlik modülü ise yapay zekanın ürettiği sorguların hangi komut grubuna girdiğini denetlemenin neden önemli olduğunu gösterir. Kurumsal ekipler bu bilgiyi self-servis analitikte yazma yetkilerini sınırlamak için kullanabilir.
İlgili Mindset programı
SQL ile Programlama Eğitimi
Sık sorulan sorular
DDL ile DML arasındaki temel fark nedir?
DDL veritabanının yapısını tanımlar: tablo, indeks ve şema oluşturur, değiştirir ya da siler. DML ise bu yapının içindeki kayıtlarla çalışır: ekler, günceller ve siler. Kısacası DDL kabı, DML kabın içindeki bilgiyi yönetir. Bir sütun eklemek DDL, bir müşterinin şehir bilgisini değiştirmek DML işidir.
SELECT komutu hangi gruba girer?
Kaynaklara göre değişir. Birçok eğitim materyali SELECT'i DML içinde sayar çünkü veriyle çalışır. Bazı kaynaklar ise yalnız okuma yaptığı için onu DQL (Data Query Language) adıyla ayrı bir grup olarak anar. Pratikte hangi sınıflamayı kullandığınız sorgunun çalışmasını değiştirmez, önemli olan komutun veriyi değiştirmediğini bilmektir.
TRUNCATE ile DELETE aynı işi mi yapar?
Bu komutlar kayıt silmek için kullanılır ama davranışları farklıdır. DELETE koşulla belirli satırları silebilir ve DML olarak işlem günlüğüne satır satır yazılır. TRUNCATE tablodaki tüm satırları topluca boşaltır, çoğu sistemde DDL olarak değerlendirilir ve koşul almaz. Hangisinin geri alınabildiği veritabanı sistemine göre değişir.
Veri analistinin DCL bilmesi gerekir mi?
Günlük sorgu yazan bir analistin DCL komutlarını çalıştırması beklenmez, çünkü yetkileri genellikle veritabanı yöneticisi verir. Yine de GRANT ve REVOKE mantığını bilmek, bir tabloya neden erişemediğinizi anlamanıza ve doğru izni doğru kişiden istemenize yardımcı olur.