Not! Bu veri tiplerini kullanmadan önce kullandığınız veritabanının özelliklerini iyi araştırmanız gerekmektedir. Çünkü bazı durumlarda büyük verileri veritabanında saklamak avantajlı olabildiği gibi bazı durumlarda dezavantaj da yaratabilir.
BLOB(Binary Large Object)
Veriyi binary olarak diskte tutar.
CLOB(Character Large Object)
Veriyi karakter olarak diskte tutar.
Örnek:
CREATE DOMAIN yas AS integer NOT NULL CHECK(yas >= 18)
CREATE TABLE Kisi(
kisi_tc char(11) PRIMARY KEY,
kisi_ad varchar(30),
kisi_yas yas);
Örnek:
- create type tutarTipi as numeric (12,2) not null
- create table siparis(siparis_no integer not null, tutar tutarTipi)
Sql'de check ifadesi ile bir alana girilebilecek değerleri kısıtlayabiliriz. Örneğin kişilerin yaşını tuttuğumuz alana çok büyük değer girilmesini önlemek için 1 ile 100 arasında değer girilmesine zorlayabiliriz.
Örnek:
MySQL:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CHECK (Age>=18)
);
SQL Server / Oracle / MS Access:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int CHECK (Age>=18)
);
Birincil anahtar kısıtlayıcısıdır. Her tabloda bir adet bulunabilir. Girilen her değerin farklı olması anlamına gelmektedir. Yani eşsiz kayıtlar tutmakta kullanılır. Bu alanlar NULL değere sahip olamazlar.
- Primary Key null değer içeremez.
- Bir tabloda sadece bir tane primary key olabilir.
- Default olarak bir kolonu primary key olarak set ettiğinizde o kolon clustered index olarak oluşur ve tablo fiziksel olarak bu kolona göre dizilir.
- Primary Key başka bir tablonun Foreing Key’i ile ilişkilendirilebilir.
- Primary Key kolonunda otomatik artan identity set edilebilir.
Unique
Tablodaki bir sütünün benzersiz olmasını istediğimiz durumlarda kullanırız. Örnek vermek gerekirse, T.C Kimlik numaraları, Banka Hesap Numaraları gibi vs. Primary key den farkı ise Unique key bir tabloda birden fazla olmasıdır, primary key ise tabloda sadece 1 adet olabilir. Unique olarak tanımlanmış bir alan NULL olabilir. Değeri NULL’dan farklı olacak olursa kesinlikle daha önce girilen değerlerden farklı olmak zorundadır.
- Her tabloda birden fazla Unique Constraint olabilir
- Bir kolona unique constraint koyarsanız o kolon üzerinde default olarak non clustered index oluşur.
- Otomatik artan identity set edilemez.
- Null değer içerebilir.
Transaction, daha küçük parçalara ayrılamayan en küçük işlem yığınına denir. Belirli bir grup işlemin arka arkaya gerçekleşmesine rağmen, işlemlerin toplu olarak değerlendirilmesini sağlar. “Transaction”, prensip olarak ya bütün işlemleri gerçekleştirir ya da hiçbirini gerçekleştirmez. İşlemlerden biri dahi başarısız olursa, bu prensip nedeniyle hiçbir işlem olmamış kabul edilir; ancak tüm işlemler başarılı olduğunda” transaction”, içinde gerçekleşen tüm veri değişikliklerini onaylamış demektir. Bu işlemlerin ardı arkasına gelince bir tanesinin bile gerçekleşmemesi veri kaybına neden olacağı anlamına gelmektedir. Bu işlemler sırasında veriler üzerindeki değişikliklerin de tutarlı olması, birbirlerini tamamlayıcı nitelik taşıması gerekir. Bu özellikleri sağlayabilmesi içintransaction kavramı ortaya atılır. Veri tabanı uygulamaları geliştirirken böyle bir hataya sebep olacakları da düşünerek transaction bloğunun içine alınarak işlemler yapılır. Böylece ya hepsi işlenir ya da bütün işlemler geri alınır.
Transaction bloğundaki işlemlerin hepsi başarılı olduğunda “Transaction” Commit (Onaylama)komutu çalışır ve değişiklikler veritabanında gerçekleşmiş olur. Eğer herhangi bir hata oluşursa bu işleyiş bozulur ve hepsi geri alınır o zamanda “transaction” Rollback (Geridönüş) komutu çalışır. Böylece tüm işlemler geri alınır ve en başa dönülür. Bunu yaparak veri kaybetme olasılığımız da sıfıra iner. Aşağıdaki şekilde transaction olayını özetleyerek daha da görsel boyuta taşımak istedik.
Başlıca Transaction Çeşitleri
- Begin Transaction
- Save transaction
- Rollback
- Commit
Begin Transaction
Begin Transaction komutu yeni bir transaction başlatır. İşlemleri onaylamak için veya iptal etmek için Commit veya Rollback komutunu beklemeye koyuluyor. Kullanım şekli ise aşağıdaki gibidir.
BEGIN TRANSACTION
SQL KOMUTLARI
SQL KOMUTLARI...
Rollback Transaction
Rollback Transaction komutu Begin ile başlatılan işlemlerin hepsini iptal eder. Kullanım şekli ise aşağıdaki gibidir.
BEGIN TRANSACTION
SQL KOMUTLARI
SQL KOMUTLARI
SQL KOMUTLARI...(SQL exception) // !!!HATA!!!
ROLLBACK TRANSACTION
Commit Transaction
Commit Transaction komutu begin Transaction ile başlayan bütün işleri onaylar. Zaten bir transaction gerçekleşmişse ardından mutlaka Commit transaction gelmesi gerekir. Kullanım şekli ise aşağıdaki gibidir.
BEGIN TRANSACTION
SQL KOMUTLARI
SQL KOMUTLARI
SQL KOMUTLARI...
COMMIT TRANSACTION
Save Transaction
Bazen, bir noktaya kadar gelindikten sonra, işlemlerin buraya kadar olanını geçerli kabul etmek isteriz ama bundan sonraki işlemler için de transaction(geri alabilme seçeneği)ne ihtiyaç duyarız. Bu türden durumlarda geri dönüşüm noktalarından faydalanılır. Save Transaction komutu ise geri dönüşüm noktası belirler.
Genel Örnek:
BEGIN TRANSACTION
BEGIN TRY
UPDATE HESAP SET BAKIYE = BAKIYE - 1000
WHERE AD='SAMET' AND SOYAD='ULUTURK'
UPDATE HESAP SET BAKIYE = BAKIYE + 1000
WHERE AD='İBRAHİM' AND SOYAD='BAYRAKTAR'
COMMIT
END TRY
BEGIN CATCH
ROLLBACK
END CATCH
View'ler sanal tablolardır. View'ler tablolarımızın içerisinden belli veri kümelerini getirip bu veri kümelerini bir tabloymuş gibi kullanmamızı sağlarlar.
View'lerin Kullanılma Amaçları
- Karmaşık sorguları basitleştirirler
- Erişim izinlerini düzenlememizi sağlarlar
- Sorgu sürelerini kısaltırlar
View Oluşturma
CREATE VIEW
Kullanımı:
CREATE VIEW view_adı
AS
SELECT sütun_adları
FROM temel_tablo
View Üzerinde Değişiklik Yapma
View üzerinde değişiklik yapmak için ALTER deyimi kullanılır.
Kullanımı:
ALTER VIEW view_adı
WITH seçenekler
AS
SELECT ifadesi
View'i Silmek
View’leri silmek için DROP deyimi kullanılır.
Kullanımı:
DROP VIEW view_adı
View'lerde With Schemabinding İfadesi
With schemabinding ifadesi view’in bağlı bulunduğu tablodaki kolonları kilitleyip o kolonların silinmesini engeller.
Kullanımı:
ALTER VIEW view_adı
WITH schemabinding
AS
SELECT ifadesi
With Encryption İfadesi
View'leri şifreleyip sorguların görünür olmasını engeller
Kullanımı:
ALTER VIEW view_adı
WITH encryption
AS
SELECT ifadesi
View'lerde CRUD işlemleri
View'ler içerisinde sadece view ile oluşturulan tablo üzerinde CRUD işlemleri yapılabilir. Normal tablolar üzerinde bu işlemler yapılamaz.
Sql View in İçerisinde Yapılamayacak İşlemler Nelerdir?
- İsimsiz bir kolon kullanılamaz. (Örnek olarak aggregate fonksiyonlarını kolon ismi vermeden kullanmak)
- View içerisinde parametre gönderilemez.
- View yapısı içerisinde dml kodları (insert into, update, delete) kullanılamaz.
- View yapısı içerisinde, sadece select ile başlayan ifadeler kullanılabilir.
- View içerisinde order by (sıralama) fonksiyonu kullanılamaz.
With kullanımı birden fazla yerde kullandığımız sorguların tekrar tekrar yazılmamasını sağlar. With ile bir alt sorgu oluşturulup bu sorguya bir isim verilebilir. Daha sonra yazılan sorguların içinde bu isim ile oluşturulan sorgu alt sorgu olarak kullanılabilir.
Örnek:
with enBuyukSiparis as select max(tutar) from Siparis
select musteriAd from Musteri m Where m.musteriID = enBuyukSiparis.musteriID
--> En büyük sipariş tutarına sahip müşterinin adını bulan sorgu