Alter Table Komutu Üzerine

Alter Table Komutu Üzerine

Alter Table En çok kullandığımız komutlardandır, bu komutla neler yapabiliriz örneklerle gösterelim.Adından da anlaşılacağı gibi sadece tablo üzerinde değişiklikler yapan DDL komutudur.Aşağıdaki değişiklikler tablo ismi değişikliği, kolon ismi değişikliği,kolon ekleme,kolon çıkarma işlemleri yaptığı için bu isimleri kullanan diğer nesneler(trigger,view,procedure,function vb)  invalid duruma düşecektir, direk canlı sistemde yapılması istenmeyen sonuçlar doğurabilir.İlişkili nesneler iyice araştırılmalıdır.

Örnek için bir tablo yaratalım, işlemleri onun üzerinden yapalım..

CREATE TABLE test_tablo(
ID NUMBER,
ad VARCHAR2(100),
soyad VARCHAR2(100));

-Tabloyu Yeniden Adlandırmak:

ALTER TABLE tablo_adi RENAME TO yeni_tablo_adi;
ALTER TABLE test_tablo RENAME TO test_tbl;

test_tablosunun adını test_tbl olarak değiştirdik.

-Tabloya Sütun Eklemek:

ALTER TABLE table-name ADD column-name column-definition;

ALTER TABLE test_tbl ADD dogum_tarihi DATE;

test_tbl tablosuna date tipinde dogum_tarihi adında bir kolon ekledik.

Tabloya birden çok kolon eklemek için;
ALTER TABLE table-name ADD (Column-1 column-definition,Column-2 column-definition);
ALTER TABLE test_tbl ADD (baba_adi varchar2(100),ana_adi varchar2(100));

Varchar2(100) tipinde baba_adi ve ana_adi kolonlarını eklemiş olduk.

-Tablo Kolon Tipini Değiştirmek:

ALTER TABLE table-name MODIFY column-name column-type;

ALTER TABLE test_tbl MODIFY ID VARCHAR2(10);

Komutuyla ID sütununun tipini varchar2(10) olarak değiştirdik.Yalnız burada dikkat etmemiz gereken tipi değiştirilecek sütunun boş olması gerekir.Eğer doluysa aşağıdaki hatayı alırsınız.

ORA-01439 column to be modified must be empty to change datatype.
ORA-01439: veri türünü değiştirmek için değişecek sütunun boş olması gerekir.

Bu durumda geçici bir kolon ekleyip bu sütunu oraya update ederek tipini değiştirebiliriz..

Birden fazla kolonun tipini değiştirmek için:
ALTER TABLE  table-name  MODIFY (Column-1 column-type,Column-2 column-type);

Tablo Kolonu Drop Etmek:

ALTER TABLE table-name DROP COLUMN column-name;

ALTER TABLE test_tbl DROP COLUMN ana_adi;

Tablomuzdan ana_adi adlı kolonu silmiş olduk.

Tablo Kolonuna Yeni Isim Vermek:

ALTER TABLE table-name RENAME COLUMN old-name TO new-name;

ALTER TABLE test_tbl RENAME COLUMN baba_adi TO father_name;

Tablomuzdaki baba_adi kolonunu father_name diye isimlendirmiş olduk.

Tablo Kolonunu Kullanılamaz Olarak Belirtmek:

ALTER TABLE table_name SET UNUSED COLUMN column_name;

ALTER TABLE test_tbl SET UNUSED COLUMN ana_adi;

NOT: Bu işlem sonrası ana_adi kolonunu kullanan diğer nesneler invalid duruma düşecektir,bu yüzden nereleri etkiler iyice araştırılmalıdır.Ve unused yapılan kolon select * from test_tbl sorgusunda da gözükmez..

Kullanılmayan Kolonları Drop Etmek:

ALTER TABLE table_name DROP UNUSED COLUMNS;

ALTER TABLE test_tbl DROP UNUSED COLUMNS;

Kullanılmayan olarak set ettiğimiz kolonları yukarıdaki komutla drop ediyoruz..

Tablo Lock Edilebilirliğini Değiştirmek:

Lock enable etmek için;

ALTER TABLE test_tbl  ENABLE TABLE LOCK;

Disable etmek için:

ALTER TABLE test_tbl  DISABLE TABLE LOCK;

 

Tabloya  Constrait Eklemek:

ALTER TABLE Test_Tbl ADD CONSTRAINT id_unq UNIQUE(ID);

Tablomuza ID kolonunun Unique olacağını söylemiş olduk.

 

Tablo Row Movement Enable Etmek:

Kullanılmayan boş blokların sıkıştırılması için shrink işlemi yapılır, bu işlemin yapılabilmesi için tabloda row movement enable edilmelidir.Bu sıkıştırma sonucu tablo boyutu küçülürken, full scan aramalarda da performans kazanırız.Datanın fiziksel olarak yeri değişir, bu yüzden enable olmalıdır,defaultta bu özellik kapalıdır.

Tabloda row movement enable etmek:

ALTER TABLE Test_Tbl ENABLE ROW MOVEMENT;

Tabloda row movement disable etmek:

ALTER TABLE Test_Tbl DISABLE ROW MOVEMENT;

 

Tablo Shrink Etmek:

Kullanılmayan boş blokları yeniden organize eder, dağınık veri yapısını toparlar.

ALTER TABLE Test_Tbl SHRINK SPACE;

En çok kullanılan ALTER TABLE …. komutlarını örneklerle anlatmaya çalıştım.
Umarım faydalı olur..

 

Tagged: , , , , , , , , , ,

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir