alter table

Mevcut bir tablonun yapısını değiştirmek için kullanılır.

ALTER TABLE tablo_adi action;

-Sütun ekleme
-Sütun silme
-Bir sütunun veri türünü (data type) değiştirme
-Bir sütunu yeniden adlandırma
-Sütun için varsayılan bir değer (default value) belirleme
-Bir sütuna bir kısıtlama (constrait) ekleme
-Bir tabloyu yeniden adlandırma

Sütun eklemek için ALTER TABLE ADD COLUMN ifadesi kullanılır.

ALTER TABLE tablo_adı ADD COLUMN kolon_adı datatype kolon_kısıtı;

Sütun silmek için ALTER TABLE DROP COLUMN ifadesi kullanılır.
ALTER TABLE tablo_adı DROP COLUMN kolon_adı;

Bir sütunu yeniden adlandırmak için ALTER TABLE RENAME COLUMN TO ifadesi
kullanılır.
ALTER TABLE tablo_adı RENAME COLUMN kolon_adı TO yeni_kolon_adı;

Sütunun varsayılan değerini (default value) değiştirmek için ALTER TABLE ALTER
COLUMN SET DEFAULT veya DROP DEFAULT öğesi kullanılır.

ALTER TABLE tablo_adı ALTER COLUMN kolon_adı [SET DEFAULT
value | DROP DEFAULT];

NOT NULL kısıtlamasını değiştirmek için ALTER TABLE ALTER COLUMN ifadesi
kullanılır.

ALTER TABLE tablo_adı ALTER COLUMN kolon_adı[SET NOT NULL| DROP
NOT NULL];

CHECK kısıtlaması eklemek için ALTER TABLE ADD CHECK deyimi kullanılır.
ALTER TABLE tablo_adı ADD CHECK expression;

Genel olarak, bir tabloya kısıtlama eklemek için ALTER TABLE ADD CONSTRAINT
ifadesi kullanılır.

ALTER TABLE tablo_adı ADD CONSTRAINT kısıt_adı kısıt_tanımı;
Bir tabloyu yeniden adlandırmak için ALTER TABLE RENAME TO ifadesi kullanılır.
ALTER TABLE tablo_adı RENAME TO yeni_tablo_adı ;

Örnekler :

CREATE TABLE links (
link_id serial PRIMARY KEY,
title VARCHAR (518) NOT NULL,
url VARCHAR (1034) NOT NULL ) ;

Aktif adında yeni bir sütun eklemek için aşağıdaki ifade kullanılır.
ALTER TABLE links ADD COLUMN aktif boolean;

Aşağıdaki ifade, aktif sütununu link tablosundan kaldırır.
ALTER TABLE links DROP COLUMN aktif;

title adlı sütunun adını link_title olarak değiştirmek için aşağıdaki ifade
kullanılır.
ALTER TABLE links RENAME COLUMN title TO link_title;

Aşağıdaki ifade, links tablosuna target adında yeni bir sütun ekler.
ALTER TABLE links ADD COLUMN target VARCHAR(10);

links tablosunda target sütunu için default değer olarak _blank ayarlamak için
aşağıdaki ifadeyi kullanılır.
ALTER TABLE links ALTER COLUMN target SET DEFAULT ‘_blank’;

Yeni satırı, target sütunu için bir değer belirtmeden links tablosuna eklerseniz, target
sütunu, _blank değerini varsayılan değer olarak alır.
INSERT INTO links (link_title, url)
VALUES(‘PostgreSQL Egitimi’,’https://www.postgresqlegitimi.com/’);

target sütunun kabul edeceği değerleri blank, parent, ve invalid ile kısıtlar.

ALTER TABLE links ADD CHECK (target IN (‘blank’, ‘parent’,‘invalid’));

target sütunu için ayarlanan CHECK kısıtlamasını ihlal eden satır eklemeye
çalışıldığında, aşağıdaki gibi bir hata verir.

INSERT INTO links (link_title, url, target) VALUES(‘PostgreSQL
Egitimi’,’https://www.postgresqlegitimleri.com/’, ‘db’);

links tablosunun url sütununa UNIQUE kısıtlaması ekler.

ALTER TABLE links ADD CONSTRAINT unique_url UNIQUE ( url );

Aşağıdaki ifade, zaten var olan url’yi eklemeye çalıştığı için hata döner.

INSERT INTO links(link_title,url)
VALUES(‘PostgreSQL’,’https://www.postgresqlegitimleri.com/’);

rename table (tablo adı değiştirme)

Mevcut bir tabloyu yeniden adlandırmak için ALTER TABLE ifadesi aşağıdaki gibi
kullanılır.

ALTER TABLE tablo_adi RENAME TO yeni_tablo_adi;
ALTER TABLE IF EXISTS tablo_adi RENAME TO yeni_tablo_adi;

ÖRNEKLER

CREATE TABLE sellers (
id serial PRIMARY KEY,
name VARCHAR NOT NULL ) ;

sellers tablosunu suppliers olarak yeniden adlandırmak için aşağıdaki
ALTER TABLE RENAME TO ifadesini kullanılır.

ALTER TABLE sellers RENAME TO suppliers;

Suppliers tablosuyla ilişkili tablo oluşturalım.

CREATE TABLE supplier_groups (id serial PRIMARY KEY, name
VARCHAR NOT NULL);

suppliers tablosuna group_id adlı yeni bir sütun ekleyelim. Bu sütun,
suppliers_group tablosunun id sütununa bağlanan foreign key sütunudur.

ALTER TABLE suppliers ADD COLUMN group_id INT NOT NULL;
ALTER TABLE suppliers ADD FOREIGN KEY (group_id) REFERENCES
supplier_groups(id);

Suppliers tablosunu aşağıdaki gibi tanımlayarak suppliers tablosundaki foreign key
kısıtlamasını doğrulayabiliriz.

ALTER TABLE supplier_groups RENAME TO groups;

drop table (tablo silme)

DROP TABLE [IF EXISTS] tablo_adı [CASCADE | RESTRICT];

Drop etmek istenilen tablo, views, triggers, functions, ve stored procedures gibi diğer
nesnelerde kullanılıyorsa, DROP TABLE ifadesi tabloyu silemez, hata alır. Bu durumda iki
seçenek vardır:
1-CASCADE seçeneği, tabloyu ve ona bağlı nesneleri kaldırmanıza olanak tanır.
2-RESTRICT seçeneği, tabloya bağlı herhangi bir nesne varsa tabloyu reddeder. DROP
TABLE deyiminde açıkça belirtmezseniz, RESTRICT seçeneği varsayılandır.
Birden çok tabloyu aynı anda silmek için;

DROP TABLE [IF EXISTS] tablo_adı1, tablo_adı2, ... [CASCADE | RESTRICT];

NOT: Tabloları drop etmek için superuser, schema, owner veya table owner rollerine
sahip olmak gerekmektedir.

Örnekler :

CREATE TABLE book_author (
authors_id INT PRIMARY KEY,
name VARCHAR (50));

CREATE TABLE book_pages (
pages_id serial PRIMARY KEY,
title VARCHAR (255) NOT NULL,
authors_id INT NOT NULL,
FOREIGN KEY (authors_id)REFERENCES book_author (authors_
id) );

book_author tablosunu silmek için ;

DROP TABLE IF EXISTS book_author;

DROP TABLE ifadesi, drop edilen tablonun bağımlı nesnelerini kaldırırsa, aşağıdaki
gibi bir mesaj yayınlar.

DROP TABLE book_author CASCADE;

truncate table (tablodaki tüm verileri siler)

Tablo içerisindeki tüm veriyi çok hızlı siler. Transaction log yani WAL üretmez. Geri
dönüşü yoktur. where filtresi kullanılamaz.

TRUNCATE TABLE tablo_adi ;

Büyük bir tablo silinecekse (drop), önce içerisindeki veri truncate edilip sonra tablo
drop edilirse hem sistemi yormaz hem de daha hızlı olur.

Birden fazla tablodan tüm verileri silmek için ;
TRUNCATE TABLE tablo_adi1, tablo_adi2, …;

Bir tablodan ve tabloya foreign key referansı olan diğer tablolardan veri silmek için
TRUNCATE TABLE ifadesinde CASCADE seçeneği kullanılır.

TRUNCATE TABLE tablo_adi CASCADE;