Oluşturulan veritabanı tablolarının yapılarında bazen değişiklik yapılması gerekebilir. Var olan tablolar üzerinde değişiklik yapmak istenildiğinde ALTER TABLE komutları kullanılır.
Eğer ALTER TABLE komutları kullanılmazsa değişiklik yapılacak tablo silinip değişiklikten sonra tekrar oluşturulması gerekmektedir. Ayrıca bu tablolar arasında bağlantı varsa önce bağlantılı olduğu tablolar silindikten sonra ancak kendi silinebilir. Bu işlem bize ciddi bir zaman kaybı yaratacaktır. Zaman kaybının dışında bu tabloların içerisinde kayıtlar olduğunu da düşünürsek tabloları silmeye kalktığımızda veri kaybı da kaçınılmaz olacaktır. Verileri yedeklediğimizi düşünsek bile tablo ilişkisinin kaldırılıp yenide kurulması bu sefer tutarsızlık sorunlarını beraberinde getirebilir.
Tabloya Yeni Alan Ekleme
Var olan bir tabloya yeni bir alan eklemek için ALTER TABLE komutu ile birlikte ADD komutundan yararlanırız.
1 | ALTER TABLE tablo_adi ADD alan_adi verituru; |
Tabloya Aynı Anda Birden Fazla Alan Ekleme
Bir tabloya birden fazla alan eklemek istenildiğinde, alan sayısı kadar ALTER TABLE komutu kullanmaya gerek yoktur. Bunun yerine tek bir ALTER TABLE komutu ile alanlar eklenebilir.
1 | ALTER TABLE tablo_adi ADD alan_adi verituru, alan_adi verituru, alan_adi verituru; |
Alanda Değişiklik Yapma
Daha önceden oluşturulmuş bir tablonun herhangi bir alanının veri türü değiştirilmek istenebilir veya tanımlı olan veri türünün kapasitesi arttırılabilir. Bu işlemler için ALTER TABLE komutu ile beraber ALTER COLUMN komutları kullanılır.
Yalnız veri türü değiştirilmek istendiğinde, bu alan içinde yeni veri türüne aykırı herhangi bir veri olmamasına dikkat edilmesi gerekmektedir.
1 | ALTER TABLE tablo_adi ALTER COLUMN alan_adi yeni_veri_turu; |
ALTER COLUMN komutuyla var olan alana NOT NULL kısıtlaması da eklenebilir. NOT NULL kısıtlaması kayıt girişi esnasında o alanın boş geçilmemesini sağlar. Boş geçildiği takdirde kullanıcıya uyarı verir. Yalnız NOT NULL kısıtlaması kullanılacaksa tablo içinde hiç kayıt olmamasına veya kısıtlama eklenecek alanın boş değer (NULL) içermemesine dikkat edilmesi gerekir.
1 | ALTER TABLE tablo_adi ALTER COLUMN alan_adi veri_turu NOT NULL; |
Alan silme
Tablodan herhangi bir alan silinmek istendiğinde ALTER TABLE komutları ile beraber DROP COLUMN komutları kullanılır. Alan silindiğinde içerisindeki kayıtlarla beraber silinecektir.
1 | ALTER TABLE tablo_adi DROP COLUMN alan_adi; |
Kısıtlama Ekleme, Silme, Değiştirme
ALTER TABLE komutları ile daha önce tanımlanmış bir kısıtlama silinebilir, yeni bir kısıtlama tanımlanabilir. Kısıtlamalar aktif ve pasif hale getirilebilir.
Birincil Anahtar (Primary Key) Kısıtlaması Ekleme
1 | ALTER TABLE tablo_adi ADD CONSTRAINT kisitlama_adi PRIMARY KEY(alan_adi); |
Yabancı Anahtar (Foreign Key) Kısıtlaması Ekleme
1 | ALTER TABLE tablo_adi ADD CONSTRAINT kisitlama_adi FOREIGN KEY(alan_adi) REFERENCES tablo_adi(alan_adi); |
Tekil Veri Kısıtlaması Ekleme
1 | ALTER TABLE tablo_adi ADD CONSTRAINT kisitlama_adi UNIQUE(alan_adi); |
Uygunluk Kısıtlaması Ekleme
1 | ALTER TABLE tablo_adi ADD CONSTRAINT kisitlama_adi CHECK (sart); |
Kısıtlama Silme
1 | ALTER TABLE tablo_adi DROP CONSTRAINT kisitlama_adi; |
Tüm Kısıtlamaları Pasif Hale Getirme
1 | ALTER TABLE tablo_adi NOCHECK CONSTRAINT ALL; |
Kısıtlamayı Pasif Hale Getirme
1 | ALTER TABLE tablo_adi NOCHECK CONSTRAINT kisitlama_adi; |
Tüm Kısıtlamaları Aktif Hale Getirme
1 | ALTER TABLE tablo_adi CHECK CONSTRAINT ALL; |
Kısıtlamayı Aktif Hale Getirme
1 | ALTER TABLE tablo_adi CHECK CONSTRAINT kisitlama_adi; |
SQL Server’da Tablo Adı Değiştirme
MSSQL’de tablonun adını değiştirmek ALTER TABLE yerine tanımlanmış SP_RENAME saklı prosedürü kullanılır.
1 | EXEC SP_RENAME 'tablo_adi','yeni_tablo_adi'; |
SQL Server’da Alan Adı Değiştirme
Tablo adını değiştirmek için kullandığımız SP_RENAME saklı prosedürü alan adlarını değiştirmek için de kullanılır. Nesne tipi olarak tanımlanan bölüm COLUMN, DATABASE, OBJECT gibi yapılan işleme göre değer alır. Alan adı değiştirileceği zaman COLUMN, kısıtlama adı değiştirileceği zaman OBJECT, veritabanı adı değiştirileceği zaman DATABASE kullanılırken tablo adı değişimlerinde tip belirtmeye gerek yoktur.
1 | EXEC SP_RENAME 'tablo_adi.alan_adi', 'yeni_alan_adi', 'nesne_tipi'; |