Bölüm 10: Tablo Oluşturma ve Veri Manipülasyonu (DDL & DML)
Şimdiye kadar sadece var olan verileri sorguluyorduk. Şimdi kendi tablolarımızı oluşturmayı, verileri eklemeyi, güncellemeleri ve silmeyi…
Bölüm 10: Tablo Oluşturma ve Veri Manipülasyonu (DDL & DML)
Şimdiye kadar sadece var olan verileri sorguluyorduk. Şimdi kendi tablolarımızı oluşturmayı, verileri eklemeyi, güncellemeleri ve silmeyi öğreneceğiz.
Bu bölüm SQL’in iki ana kategorisine giriş yapacaktır:
- DDL (Data Definition Language): CREATE, ALTER, DROP
- DML (Data Manipulation Language): INSERT, UPDATE, DELETE
SQL’in Yapısı
SQL Komutları
├── DDL (Veri Tanımı)
│ ├── CREATE → Tablo oluştur
│ ├── ALTER → Tablo değiştir
│ └── DROP → Tablo sil
│
├── DML (Veri Manipülasyonu)
│ ├── INSERT → Veri ekle
│ ├── UPDATE → Veri güncelle
│ ├── DELETE → Veri sil
│ └── SELECT → Veri oku (zaten biliyoruz!)
│
└── DCL (Veri Kontrolü)
├── GRANT → İzin ver
└── REVOKE → İzni geri al
1. CREATE TABLE: Tablo Oluşturma
Temel Yapı
CREATE TABLE TablıAdı
(
SutunAdı1 VERITIPI KISITLAMALAR,
SutunAdı2 VERITIPI KISITLAMALAR,
...
CONSTRAINT KısıtlamaAdı KISITLAMA
)
Örnek: Sipariş Tablosu
CREATE TABLE dbo.Siparis
(
SiparisID BIGINT NOT NULL PRIMARY KEY IDENTITY(1,1),
Tutar DECIMAL(15,2) NOT NULL,
SiparisTarihi DATETIME2,
MusteriID INT NOT NULL FOREIGN KEY REFERENCES dbo.Musteri(MusteriID)
)
Bölüm Bölüm Açıklaması:
SiparisID Sütunu
SiparisID BIGINT NOT NULL PRIMARY KEY IDENTITY(1,1)
- BIGINT: Veri tipi (-9.2Q ile +9.2Q)
- NOT NULL: Boş olamaz (zorunlu)
- PRIMARY KEY: Benzersiz tanımlayıcı (her satır farklı ID)
- IDENTITY(1,1): Otomatik artış (başla:1, artış:1)
Sonuç: 1, 2, 3, 4, 5… otomatik olarak atanır
Tutar Sütunu
Tutar DECIMAL(15,2) NOT NULL
- DECIMAL(15,2): 15 hane, 2 ondalık (para için ideal)
- NOT NULL: Siparişin tutarı boş olamaz
SiparisTarihi Sütunu
SiparisTarihi DATETIME2
- DATETIME2: Tarih + saat (yüksek hassasiyet)
- Boş olabilir (NULL izinli)
MusteriID Sütunu
MusteriID INT NOT NULL FOREIGN KEY REFERENCES dbo.Musteri(MusteriID)
- INT: Tamsayı
- NOT NULL: Zorunlu
- FOREIGN KEY: Başka tabloya bağlantı
- REFERENCES dbo.Musteri(MusteriID): Müşteri tablosundaki MusteriID’ye referans
Anlamı: Her siparişin bir müşterisi olmalı, ve o müşteri Müşteri tablosunda var olmalı!
Tablo Oluşturulduktan Sonra Kontrol
SELECT * FROM dbo.Siparis
Boş bir tablo görürsün. Şimdi veri eklemeliyiz!
2. INSERT: Veri Ekleme
Tek Veri Ekleme
INSERT INTO dbo.Siparis (Tutar, SiparisTarihi, MusteriID)
VALUES (333.33, GETDATE(), 1)
Açıklama:
INSERT INTO→ Tabloya veri ekle(Tutar, SiparisTarihi, MusteriID)→ Hangi sütunlara?VALUES (...)→ Hangi değerleri?GETDATE()→ Bugünün tarihi ve saati
Not: SiparisID otomatik atanacak (1)
Toplu Veri Ekleme
INSERT INTO dbo.Siparis (Tutar, SiparisTarihi, MusteriID)
VALUES
(1500, GETDATE(), 1),
(777.77, GETDATE(), 1),
(3599, GETDATE(), 1),
(250, GETDATE(), 1)
Sonuç: 4 satır seçeçinde eklenir.
Tablo Durumu:
SiparisID Tutar SiparisTarihi MusteriID
--------- -------- ------------------- ---------
1 333.33 2024-06-15 14:30:00 1
2 1500.00 2024-06-15 14:30:00 1
3 777.77 2024-06-15 14:30:00 1
4 3599.00 2024-06-15 14:30:00 1
5 250.00 2024-06-15 14:30:00 1
3. UPDATE: Veri Güncelleme
Koşullu Güncelleme
UPDATE dbo.Siparis
SET Tutar = Tutar * 1.1
WHERE Tutar < 1000
Açıklama:
UPDATE→ Hangi tablo?SET→ Hangi sütunu ne yapacaksın?WHERE→ Hangi satırları?
Mantığı:
- Tutar < 1000 olan satırları bul
- Onların tutarını %10 artır (Tutar × 1.1)
Sonuç:
ÖNCEKI:
SiparisID Tutar
--------- --------
1 333.33 ← < 1000, güncellenecek
2 1500.00 ← > 1000, değişmeyecek
3 777.77 ← < 1000, güncellenecek
4 3599.00 ← > 1000, değişmeyecek
5 250.00 ← < 1000, güncellenecek
SONRA:
SiparisID Tutar
--------- --------
1 366.66 (333.33 × 1.1)
2 1500.00 (değişmedi)
3 855.55 (777.77 × 1.1)
4 3599.00 (değişmedi)
5 275.00 (250 × 1.1)
Dikkat: WHERE Yazmamak Tehlikeli!
-- ⚠️ HATA! Tüm satırları güncelleyecek
UPDATE dbo.Siparis
SET Tutar = Tutar * 1.1
-- ✅ DOĞRU
UPDATE dbo.Siparis
SET Tutar = Tutar * 1.1
WHERE Tutar < 1000
4. DELETE: Veri Silme
Koşullu Silme
DELETE FROM dbo.Siparis
WHERE SiparisID = 3
Açıklama:
- SiparisID = 3 olan satırı sil
Sonuç:
ÖNCEKI:
SiparisID Tutar
--------- --------
1 366.66
2 1500.00
3 855.55 ← Silinecek
4 3599.00
5 275.00
SONRA:
SiparisID Tutar
--------- --------
1 366.66
2 1500.00
4 3599.00
5 275.00
Not: SiparisID 3 kayboldu, ama SiparisID 4 ve 5 hala var!
Dikkat: WHERE Yazmamak Çok Tehlikeli!
-- ⚠️ HATA! Tüm satırları silecek
DELETE FROM dbo.Siparis
-- ✅ DOĞRU
DELETE FROM dbo.Siparis
WHERE SiparisID = 3
CONSTRAINT’ler (Kısıtlamalar)
PRIMARY KEY
PRIMARY KEY
- Benzersiz tanımlayıcı
- Boş olamaz (NOT NULL zorunlu)
- Tablo başına sadece 1 PRIMARY KEY
FOREIGN KEY
FOREIGN KEY REFERENCES dbo.Musteri(MusteriID)
- Başka tabloya bağlantı
- Referans edilen değer var olmalı
- Veri Bütünlüğü: Yetim kayıtlar oluşamaz
Örnek:
-- Bu HATA verir çünkü MusteriID 999 Müşteri tablosunda yok
INSERT INTO dbo.Siparis (Tutar, SiparisTarihi, MusteriID)
VALUES (1000, GETDATE(), 999)
NOT NULL
NOT NULL
- Zorunlu alan
- Boş değer kabul etmez
UNIQUE
Email NVARCHAR(100) UNIQUE
- Her satırda farklı değer
- NULL birden fazla olabilir
DEFAULT
SiparisTarihi DATETIME2 DEFAULT GETDATE()
- Veri eklenmezse bu değeri kullan
Pratik Örnek: Müşteri Tablosu
CREATE TABLE dbo.Musteri
(
MusteriID INT PRIMARY KEY IDENTITY(1,1),
AdSoyad NVARCHAR(100) NOT NULL,
Email NVARCHAR(100) UNIQUE,
Telefon VARCHAR(15),
KayitTarihi DATETIME2 DEFAULT GETDATE(),
AktifMi BIT DEFAULT 1
)
-- Veri ekle
INSERT INTO dbo.Musteri (AdSoyad, Email, Telefon)
VALUES
('Ahmet Yılmaz', 'ahmet@example.com', '5551234567'),
('Fatma Kara', 'fatma@example.com', '5559876543')
-- Kontrolü
SELECT * FROM dbo.Musteri
-- Güncelleme
UPDATE dbo.Musteri
SET AktifMi = 0
WHERE MusteriID = 1
-- Silme
DELETE FROM dbo.Musteri
WHERE MusteriID = 2

Güvenlik İpuçları ⚠️
1. WHERE Şartını Kontrol Et
-- Test et
SELECT * FROM dbo.Siparis WHERE Tutar < 1000
-- Sonra update/delete yap
UPDATE dbo.Siparis SET Tutar = Tutar * 1.1 WHERE Tutar < 1000
2. TRANSACTION Kullan
BEGIN TRANSACTION
UPDATE dbo.Siparis SET Tutar = Tutar * 1.1 WHERE Tutar < 1000
-- Kontrol et, sonra COMMIT ya da ROLLBACK
COMMIT
-- veya
ROLLBACK
3. Backup Al
Önemli operasyonlardan önce tablonun yedeğini al!
메타데이터
- post_id
- baef6ae55f48
- slug
- bölüm-10-tablo-oluşturma-ve-veri-manipülasyonu-ddl-dml-baef6ae55f48
- url
- https://medium.com/@elbuzahmet/b%C3%B6l%C3%BCm-10-tablo-olu%C5%9Fturma-ve-veri-manip%C3%BClasyonu-ddl-dml-baef6ae55f48
- canonical_url
- https://medium.com/@elbuzahmet/b%C3%B6l%C3%BCm-10-tablo-olu%C5%9Fturma-ve-veri-manip%C3%BClasyonu-ddl-dml-baef6ae55f48
- author_url
- https://medium.com/@elbuzahmet
- status
- ok
- fetched_at
- 2026-07-10 00:10:16