ALTER TABLE
ALTER TABLE customers ADD COLUMN phone TEXT;
ALTER TABLE customers RENAME COLUMN segment TO customer_segment;
SELECT name FROM pragma_table_info('customers');
Sütun adlarını listelemek için standart yol INFORMATION_SCHEMA.COLUMNS görünümüdür (SQL Server, PostgreSQL, MySQL). Oracle kendi sözlük görünümlerini (USER_TAB_COLUMNS), SQLite pragma_table_info kullanır. Oracle tablo adlarını büyük harfle saklar.
Sütun tipini değiştirmek de yaygındır: SQL Server ALTER TABLE t ALTER COLUMN c NVARCHAR(200), PostgreSQL ALTER COLUMN c TYPE ..., MySQL/Oracle MODIFY. SQLite'ın ALTER desteği sınırlıdır.
DROP, TRUNCATE, DELETE
| Komut | Ne yapar? |
|---|---|
DELETE FROM t | Satırları siler, yapı kalır, WHERE kullanılabilir, geri alınabilir. |
TRUNCATE TABLE t | Tüm satırları hızla siler, yapı kalır (SQLite'ta yok). |
DROP TABLE t | Tabloyu yapısıyla birlikte kaldırır. |
DROP TABLE IF EXISTS raw_signups; SELECT name FROM sqlite_master WHERE type = 'table' ORDER BY name;
Derinleş: canlı tabloda güvenli şema değişikliği
Geliştirme ortamında ALTER TABLE bir satırdır; üretimde ise uygulama kodu, raporlar ve veri hatları o tabloya aynı anda bağlıdır. Bu yüzden şema değişiklikleri geriye uyumlu küçük adımlarla yapılır. Yaygın yönteme genişlet–daralt (expand–contract) denir:
- Genişlet: Yeni sütunu ekle (eski kod onu görmezden gelir, bir şey bozulmaz).
- Doldur: Mevcut satırlar için değeri hesapla (backfill); büyük tablolarda parça parça.
- Geçir: Uygulama ve raporları yeni sütuna geçir.
- Daralt: Artık kullanılmayan eski sütunu kaldır.
ALTER TABLE customers ADD COLUMN is_vip INTEGER DEFAULT 0 NOT NULL; UPDATE customers SET is_vip = 1 WHERE segment = 'Premium'; SELECT is_vip, COUNT(*) AS musteri FROM customers GROUP BY is_vip ORDER BY is_vip;
Varsayılanlı ve NOT NULL bir sütun eklemek mevcut satırları varsayılanla doldurur (burada 150 müşterinin 117'si 0, Premium olan 33'ü güncellemeyle 1). Bazı eski sürümlerde bu işlem tüm tabloyu yeniden yazar ve uzun süre kilit tutar; büyük tablolarda önce NULL'a izin veren sütun ekleyip parça parça doldurmak daha güvenlidir.
DELETE, TRUNCATE, DROP: ayrıntılar
| DELETE | TRUNCATE | DROP | |
|---|---|---|---|
| WHERE | Var | Yok | Yok |
| Yapı | Kalır | Kalır | Kalkar (indeks, izinler dahil) |
| Hız | Satır satır, günlüğe yazar | Çok hızlı (sayfaları bırakır) | Çok hızlı |
| IDENTITY / sıra | Devam eder | Başa döner (SQL Server, MySQL) | — |
| Trigger | Tetiklenir | Tetiklenmez | — |
| Geri alma | İşlem içinde mümkün | SQL Server ve PostgreSQL'de işlem içinde mümkün; MySQL ve Oracle'da hayır | Oracle'da Flashback/geri dönüşüm kutusu dışında hayır |
sys.sql_expression_dependencies, PostgreSQL'de DROP ... RESTRICT (varsayılan) bağımlı nesne varsa işlemi reddeder; CASCADE ise bağımlıları da sessizce siler.Kontrol listesi: Değişiklik bir migration dosyasında mı? Geri alma (down) adımı yazıldı mı? Önce test ortamında, üretim boyutunda veriyle denendi mi? Kilit süresi ölçüldü mü?