Tablo Düzenleme (ALTER TABLE)

Mevcut tabloları değiştirme, kolon ekleme/silme

Kolon Ekleme

-- Basit kolon ekleme
ALTER TABLE users ADD COLUMN phone VARCHAR(20);

-- Varsayılan değerli kolon
ALTER TABLE users ADD COLUMN is_verified BOOLEAN DEFAULT FALSE;

-- NOT NULL ile (mevcut kayıtlar için varsayılan gerekli)
ALTER TABLE users ADD COLUMN role VARCHAR(20) NOT NULL DEFAULT 'user';

-- Birden fazla kolon ekleme
ALTER TABLE users 
    ADD COLUMN avatar_url VARCHAR(500),
    ADD COLUMN bio TEXT,
    ADD COLUMN website VARCHAR(255);

Kolon Silme

-- Kolon sil
ALTER TABLE users DROP COLUMN phone;

-- Bağımlılıklarla birlikte sil
ALTER TABLE users DROP COLUMN phone CASCADE;

-- Kolon varsa sil
ALTER TABLE users DROP COLUMN IF EXISTS temp_column;
DROP COLUMN geri alınamaz! Önce yedek alın.

Kolon Değiştirme

-- Kolon adını değiştir
ALTER TABLE users RENAME COLUMN name TO full_name;

-- Veri tipini değiştir
ALTER TABLE products ALTER COLUMN price TYPE NUMERIC(12,2);

-- String'i integer'a çevir (veri dönüşümü ile)
ALTER TABLE users ALTER COLUMN age TYPE INTEGER USING age::INTEGER;

-- Varsayılan değer ekle
ALTER TABLE users ALTER COLUMN status SET DEFAULT 'active';

-- Varsayılan değeri kaldır
ALTER TABLE users ALTER COLUMN status DROP DEFAULT;

-- NOT NULL ekle (mevcut NULL değerler varsa önce güncelle)
UPDATE users SET status = 'active' WHERE status IS NULL;
ALTER TABLE users ALTER COLUMN status SET NOT NULL;

-- NOT NULL kaldır
ALTER TABLE users ALTER COLUMN phone DROP NOT NULL;

Constraint Ekleme/Silme

-- Primary Key ekle
ALTER TABLE logs ADD PRIMARY KEY (id);

-- Unique constraint
ALTER TABLE users ADD CONSTRAINT uk_users_email UNIQUE (email);

-- Check constraint
ALTER TABLE products ADD CONSTRAINT chk_positive_price CHECK (price > 0);

-- Foreign key
ALTER TABLE orders ADD CONSTRAINT fk_orders_user 
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;

-- Constraint sil
ALTER TABLE users DROP CONSTRAINT uk_users_email;
ALTER TABLE orders DROP CONSTRAINT fk_orders_user;

Tablo Yeniden Adlandırma

ALTER TABLE users RENAME TO customers;

Index Ekleme/Silme

-- Index oluştur
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_orders_date ON orders(created_at DESC);

-- Unique index
CREATE UNIQUE INDEX idx_users_username ON users(username);

-- Composite index
CREATE INDEX idx_orders_user_status ON orders(user_id, status);

-- Index sil
DROP INDEX idx_users_email;