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;