Sql Komutlarından Create, Drop, Alter Add, Alter Drop, Alter Change, Alter After Komutlarının Tabloya Yada Veritabanına Uygulanması
Create Database : Veritabanı oluşturmak için kullanılır.
FileName : Oluşturulacak veritabanı dosyasının kaydedileceği yer ve yolu.
Size : Veritabanı dosyasının boyutu.
MaxSize : Dosyanın maksimum alacağı değer.
FileGrowth : Dosyasnın artma boyutu .
CREATE DATABASE Veritabanı_Adi
[ ON
<FILENAME> ,
<SIZE>,
<MAXSIZE>,
<FILEGROWTH>]
[ LOG
<FILENAME>,
<SIZE>,
<MAXSIZE>,
<FILEGROWTH > ]
Örnek: Yeni bir veritabanı ve onun log dosyasının yaratılması.
CREATE DATABASE cSharpNedir ON ( NAME = cSharpNedir_dat, FILENAME = �f:program filesmicrosoft sql servermssqldatacSharpNedirdat.mdf�, SIZE = 10MB, MAXSIZE = 50MB, FILEGROWTH = 5MB ) LOG ON ( NAME = �cSharpNedir_log�, FILENAME = �f:program filesmicrosoft sql servermssqldatacSharpNedirLog.ldf�, SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB )
Kod 1- Create database
Create Table : Veritabanı üzerinde tablo oluşturma ve tablo ile ilgili özelliklerinin tanımlanması için kullanılır.
CREATE TABLE Tablo_Adi (
Alan_Isimleri Veri_Tipleri [Default ifade] [Alan Kısıtlaması]
[Tablo_Kısıtlamalar ]
)
Alan Ismi : Oluşturulacak kolona verilecek isim .
Veri_Tipler : Oluşturduğumuz alanın veri tipi char, varchar, nvarchar, integer, decimal, double, datetime, text , vb. Bazı veri tipleri veritabanından veritabanına değişmektedir. Eğer veri karakter ise char , varchar(karakter uzunluğu) vb, çok uzun karakterler için text , sayı ise int , küsuratlı sayı ise decimal yada double , tarih alanı için datetime gibi tipler kullanabilirsiniz.
Alan Kısıtlaması : İlgili alanın boş geçilip geçilemeyeceği durumu. NULL boş geçilebilir, NOT NULL boş geçilemez ilgili alana kayıt girmek zorundasınız.
Tablo_Kısıtlamaları : Tabloda yapacağımız kısıtlamalardır. Primary Key, Foreing Key, Check lerdir.
Örnek : Departman isimli bir tablonun oluşturulması.
Bu örnekte dikkat edilecek kısımlar : Bir alanın otomatik olarak artmasını istiyorsak ilgili alan tanımlanırken alan kısıtlamasına IDENTITY (Başlangıç değeri , Kaçar kaçar artacağı) ifadesinin eklenmesi gerek. Diğer bir husus alana ilk değer verme; DEFAULT () ifadesi ile alana ilk değer verilir.Eğer ilgli alan boş geçilirse yani değer atanmazsa ilk değeri atanacaktır.
CREATE TABLE Departman ( DepartmanID int IDENTITY (1, 1) NOT NULL , //DepartmanId birden başlayıp birer birer otomatik olarak artacaktır. DAdi nvarchar (20) DEFAULT(') , //DAdi alanına değer atanmaması durumunda NULL değeri yerine ' (boşluk) atanması KurulusTarihi smalldatetime NULL , //smalldatetime t-sql özgu bir veri titpidir.Standarı DateTime CONSTRAINT PK_Departman PRIMARY KEY CLUSTERED ( DepartmanID ) //İlgili primary key tanımı ) |
Kod 2- En yalın bicimde create tablo ifadesi
Örnek: Tabloda çeşitli kısıtlamalar (Constrains) oluştururulması. Ve iki tablo arasında ikincil anahtarlar(foreing key) tanımlaması.
Bu örnekte dikkat edilecek kısımlar : Tekrarlanması istenmeyen alanların tekil (unique) tanımlanması. Bir alana belli değerler dışında değer girilmesi istenmiyorsa kısıtlama CHECK (Alan=�Deger1� , Alan=�Deger2�, ...,Alana=2Deger2�) olarak tanımlanmalıdır.
CREATE TABLE Personel ( PersonelId int NOT NULL , TCKimlikNo char (11) NOT NULL , Adi varchar (30) NOT NULL , Soyadi varchar (50) NOT NULL , Maas decimal(18, 2) NOT NULL DEFAULT (0), // Bu alana değer atanmaması durumunda ilk değer verme ile 0 değerini atanmış oldu PDepartmanId int NOT NULL , Cinsiyet char (1) NULL , CONSTRAINT PK_Personel PRIMARY KEY CLUSTERED(PersonelId), //Primary Key tanımı CONSTRAINT IX_Personel UNIQUE CLUSTERED ( TCKimlikNo ) , //TC Kimlik numarasını istemiyoruz. CONSTRAINT FK_Personel_Departman FOREIGN KEY (PDepartmanId) REFERENCES Departman (DepartmanID), //Başka bir tablodaki bir alanı referans vererek ikincil anahtar (foreing key) tanımlama CONSTRAINT CK_Personel CHECK (Cinsiyet = �K� or Cinsiyet = �E�) //Cinsiyet alanına �E� ve �K� değerleri dışında değer atanmaması ) |
Kod 3- Tabloda kısıtlamaların tanımlanması ve iki tablo arasında ilişki kurulması
Örnek : Personel tablosundaki bir personele ait mal bilgilerinin tutulacağı bir tablo oluşturalım.
Bu örnekte dikkat edilecek kısımlar : Personel tablosunda bir personelin silinmesi durumunda PersonelMal tablosunda o personele ait bilgilerin silinmesi için uygun ikincil anahtar (foreing key) tanımlayalım. Bunlar
ON DELETE CASCADE : Referans edilen tablodaki kayıt yada kayıtların silinmesi durumunda referans alan tabloda ilişkili kayıtların da silinmesi .
ON UPDATE CASCADE : Referans edilen tablodaki kayıt yada kayıtların guncellenmesi durumunda referans alan tabloda ilişkili kayıtların da güncellenmesi.
Create View(Görünüm) :Fiziksel olarak olmayan fakat çeşitli sorgular sonucunda elde edilen verilerin sanal bir tablo olarak gösterilmesini sağlayan yapılar. Bu yapıların avantajı; veriye erişimi daha rahat kılmak ve kullanıcının asıl tablolarda değişiklik yapmasını engellemek.
CREATE VIEW View_Adi AS Sorgu Cümlesi [View_Kısıtlaması]
View_Adı : View yapısına vereceğimiz isim
Sorgu_Cümlesi : View oluştururken kullanacağımız sorgu cümlesi
View_Kısıtlaması :View işleminde hata oluşması durumundaki davranış şekilleri .Bunlar [WITH CHECK OPTION CONSTRAINT] view yapısında hata olmasını engeller bir diğeri [WITH READ ONLY] View yapısınde sadece okuma yapılabileceğini belirtir. Bunun dışındaki durumlarda hata vermesini sağlar.
Örnek: Belli bir departmanda maaşı 1200 den küçük olan personelin maaşını 25 ile toplayıp yeni bir maaş hesaplayan bir view oluşturma. Burda kullanmış olduğumuz select ve inner join terimlerini daha sonra ayrıntılı olarak inceleyeceğiz.
CREATE VIEW YeniMaas AS SELECT TCKimlikNo, Adi, Soyadi, (Maas + 25) as Y_Maas //as Yardımcı terimi ile (Maas+ 25) de oluşacak sonuca yeni isim veriyoruz FROM Personel INNER JOIN Departman ON DepartmanId = PDepartmanId // Departman ve Personel tabloları arasındaki birleştirme işlemi WHERE Maas < 1200 AND PDepartmanId= 1 WITH CHECK OPTION CONSTRAINT ck_YeniMaas // View de hata olmasını engelleyen ilgili kısıtlama
Kod 5- Create View
Create Index : Tabloda bulunan belirli sutunlardaki değerlere hızlı erişim için kullanılan sıralama tekniği .Ayrıca indexin tekil (unique) özelliği verilerek sutundaki verinin tekrarlanmasını önler. Örneğin birincil anahtarlar (primary key) da aslında bir indextirler. Tanımlama işlemi yapılırken otomatik olarak indexlenirler.
CREATE INDEX Index_Adi ON Tablo_Adi(Alanlar)
Tablo_Adi : Indexi tanımlayacağımız tablo adı.
Alanlar : İlgili tablodaki indexleyeceğimiz alan isimleri
CREATE INDEX Ix_Personel_AdSoyad ON Personle(Adi, Soyadi); // Indek oluştururur. Erişimde kolaylık sağlar. CREATE INDEX Ix_Personel_TCKimlik ON PERSONLE (TCKimlikNo ) UNIQUE // Unique .İlgili alanın tekrarlanmasını önler |
ALTER KOMUTU : Veritabanında var olan nesneler üzerinde yapılacak değişiklikler için kullanılan komuttur.Yeni tasarlanan bir veritabanında değişiklik yapmak çok güç değildir. Çünkü içindeki veriler az yada test amaçlıdır. Ama yaşayan bir veritabanında değişklik yapmak ciddi sorumluluklar ister. Verilin yok olmaması için çok dikkatli olmak gerekir. Bu konuda Alter ifadesi oldukça kolaylık sağlar. Alter Table : Tablonun yapısı ile ilgili bilgilerin değiştirilmesi. Bazı durumlarda var olan tabloya yeni alan ekleyebilir, alan silebilir, alan adı değiştirebilir yada ilgili kısıtlamaları silebiliriz. Tablo adı değiştirme : Birinci şekil standart SQL deki gösterimidir. Fakat T-SQL de bu işlem biraz daha farklıdır. Bunun için master tablosunda tanımlanmış olan SP_RENAME saklı yordamından (stored procedur) faydalanmak zorundasınız . Buda ikinci şekildeki gibidir 1 _ ALTER TABLE Tablo_Adı TO Yeni_Tablo_Adı 2_ EXEC SP_RENAME ’Tablo_Adı’, ’Yeni_Tablo_Adı’ ;
ALTER TABLE Personel TO Yeni_Personel // Standart SQL EXEC SP_RENAME ’Personel’, ’Yeni_Personle’ // SQL Server T-SQL
Tabloya alan ekleme ve silme:
ALTER TABLE Tablo_Adı ADD Alan_Adı Veri_Tip Yeni alan ekleme.
ALTER TABLE Tablo_Adı DROP COLUMN Alan_Adı Var olan alanı silme.
ALTER TABLE Personel ADD CocukSayisi int; ALTER TABLE Personel DROP COLUMN CocukSayisi |
Tablodaki alan veri tipi değiştirme: Kolon veri tipi değiştirilirken veri kaybı olmaması ve hata alınmaması için mantıklı tür dönüşümleri yapılmalı. Alanın veri tipi int iken varchar yapılırsa tür dönüşümü yapılır ve veri kaybı olmaz. Ayrıca varchar ise ve içerisinde sadece sayı karakterleri tutulmuş ise sayı tür dönüşümü ile dönüştürülür ama sayı dışında da karakterler varsa hata ile karşılaşırsınız.
ALTER TABLE Tablo_Adi ALTER COLUMN Alan_Adi Yeni_Veri_Tipi
ALTER TABLE Personle ALTER COLUMN CocukSayisi char(10)
Tabloya kısıtlama ekleme ve silme : Özellikle iki tablo arasındaki ikincil anahtarları (foreing key) silerken dikkat edilecek en önemli nokta ilişkinin hangi tablodan hangi tabloya referans verildiğidir.
ALTER TABLE Tablo_Adı ADD CONSTRAINT Kısıtlama_Adı Kısıtlamanın_Ozellikleri Yeni kısıtlama ekleme.
ALTER TABLE Tablo_Adı DROP CONSTRAINT Kısıtlamanını_Adı Var olan kısıtlamayı silme
ALTER TABLE PersonelMal ADD CONSTRAINT FK_PersonelMal_Personel_N FOREIGN KEY (PPersonelId) REFERENCES Personel (PersonelId) ON DELETE CASCADE // PersonelMal Tablosununa foreing key ekleme ALTER TABLE PersonelMal DROP CONSTRAINT FK_PersonelMal_Personel_N // Kısıtlamayı silme |
Alan İsmi değiştirme: İsim değiştirme işlemleri standart SQL ’ de RENAME parametresi ile yapılır. Ama T-SQL’de tablo ismi değiştirmede olduğu gibi SP_RENAME saklı yordamı ile yapılır.
ALTER TABLE Tablo_Adı RENAME Alan_Adı TO Yeni_Alan_Adı Standart SQL ’ de
EXEC SP_RENAME ’Tablo_Adı.Alan_Adı’, ’Yeni_Alan_Adı’, ’Nesne_Tipi’ T-SQL ’ de
Nesne_Tipi : SP_RENAME saklı yordamı(stored procedur) değiştirilecek nesnenin tipini belirtir. Bunlar DATABASE, TABLO, VIEW, COLUMN, OBJECT(CHECK, FOREIGN KEY, PRIMARY/UNIQUE KEY) , vb dir. Alan isimleri tablolara özel nesnelerdir. Her tabloda Adi diye bir alan tanımlayabilirsiniz. Ama tablo isimleri, constrainler , stored procedurler, trigerlar yani SQL Serverda sysobjects sistem tablosuna kaydedilen nesnelerin ismi tekildir. Bunların ismi değiştirilirken Nesne_Tipi parametresine ’object’ yazılması gerek.
ALTER TABLE Sicil RENAME PersonelSicilNo TO SicilNo //Standart sql EXEC SP_RENAME ’Sicil.PersonelSicilNo’, ’SicilNo’, ’Column’ // t-sql |
EXEC SP_RENAME ’myView’, ’MaasBordrosu’,’Object’ // View İsmi değiştirme EXEC SP_RENAME ’FK_PersonelMal_Personel’, ’FK_PM_P’,’Object’ // Foreing key ismi değiştirme |
Alter View : Görünüm değiştirme. Görünüm değiştirme de tanımlama da olan standartlar geçerlidir. Bu tür yapılar üzerlerinde veri tutmadıkları ve sadece çalıştıkları zaman oluştuğu için değişiklik yapmak daha rahattır.
CREATE VIEW V_Maas AS SELECT PersonelId, (Adi + ’ ’ + Soyadi) as AdSoyad, Maas FROM Personle ; // View oluşturduk ALTER VIEW V_Maas AS SELECT PersonelId, (Adi + ’ ’ + Soyadi) as AdSoyad, Maas FROM Personle WHERE Adi like(’A%’); // View değiştirdik.Burda yaptığımız değişiklik sadece sorgumuza koşul ekledik. Adı A ile başlayan personellerinkini getirsin.
DROP KOMUTU: Databasede buluna nesnelerin silinmesi için kullanılan komuttur.
DROP DATABASE Veritabanı_Adı Database silme
DROP TABLE Tablo_Adı Tablo silme
DROP VIEW View_Adı View silme
DROP INDEX Index_Adı Index silme
DROP DATABASE cSharpNedir DROP TABLE Personle DROP VIEW myView DROP INDEX Ix_Personel