Tablo İşlemleri

Transkript

Tablo İşlemleri
3. Hafta Tablo İşlemleri
BPR255 Veritabanı
Yönetim Sistemleri-II
Bu Derste Öğrenecekleriniz:
a.
b.
c.
d.
e.
f.
g.
1. Tablo İşlemleri
1.1. Tablo Oluşturma
1.2. Tablo Oluşturmada Kısıtlamalar ( Constraints )
1.3. Tablo Silme
NULL, NOT NULL
PRIMARY KEY
UNIQUE
FOREIGN KEY
CHECK
DEFAULT
IDENTITY
1. Tablo İşlemleri
1.1.Tablo Oluşturma
En basit haliyle…
CREATE TABLE tablo_adı
(
Alan_adı1 VERI_TİPİ ,
Alan_adı2 VERİ_TİPİ ,
…
Alan_adıN VERİ_TİPİ
)
CREATE TABLE ÖĞRENCİLER
(
NUMARA
ADI
SOYADI
[BÖLÜM KODU]
CİNSİYET
TELEFON
)
INT
VARCHAR(50)
VARCHAR(50)
CHAR(4)
CHAR(5)
CHAR(16)
,
,
,
,
,
Burada Öğrenciler adında bir tablo oluşturulacak. NUMARA alanı tamsayı tipinde olacak, ADI ve SOYADI ile
belirtilen alanlar maksimum 50 karakter alabilecek, ancak hafızada kullanılan karakter sayısı kadar yer tutacaktır.
BÖLÜM KODU, CİNSİYET ve TELEFON ile belirtilen alanlar maksimum 4, 5 ve 16 karakter alabilen yazılar
olabilecek.
NOT: SQL’de eğer veri tabanı adı, tablo adı, alan adı gibi herhangi bir nesnenin ismi birden fazla kelimeden oluşuyorsa kelimeler
köşeli parantezler [ ] arasına yazılır. Yani BÖLÜM KODU yerine [BÖLÜM KODU] kullanılabilir. Alan adları köşeli parantezler [ ]
arasına yazıldıktan sonra alan adlarında istenilen karakter kullanılabilir. [123*adı-soyadı] geçerli bir alan adı tanımlamasıdır.
1.2.Kısıtlamalar (Constraints)
Bir tablo oluştururken bazı alanlar zorunlu bazı alanların ise isteğe bağlı olması istenir. Bazı alanlar tekrarlanmamalı,
bazı alanlar ise istenilen kadar tekrar edilebilmeli. Bazı alanlar tabloya girilmeden önce bazı kurallara uyuyor mu diye
kontrol edilmeli. Bazı alanlar ise aslında başka tablodan referans alan alanlar olabiliyor. Bazı alanların ise başlangıçta
varsayılan değerlerinin olmasını isteriz. İşte bütün bunları sağlamak için tablo oluştururken bazı kurallar uygulanır.
a. NULL, NOT NULL: tablo oluştururken boş bırakılabilecek alanlar NULL ile boş bırakılamayacak yani zorunlu
olan alanlar ise NOT NULL ile işaretlenmelidir. NULL ifadesi opsiyoneldir. Her hangi bir şey yazılmazsa NULL
geçerlidir. Yani o alan istenirse boş bırakılabilecek.
1
Bartın MYO – Bilgisayar Programcılığı
|
Öğr. Gör. Bayram AKGÜL
| 2013-2014 Güz Dönemi
3. Hafta Tablo İşlemleri
CREATE TABLE BÖLÜMLER
(
BÖLÜM_KODU CHAR(4)
BÖLÜM_ADI
VARCHAR(50)
ADRES
VARCHAR(50)
)
BPR255 Veritabanı
Yönetim Sistemleri-II
NOT NULL,
NOT NULL,
NULL
Burada Bölümler adında bir tablo oluşturulacak. BÖLÜM_KODU ile belirtilen alan maksimum 4 karakter alabilen bir
yazı olabilecek ve boş bırakılamayacak. BÖLÜM_ADI ile belirtilen alan ise maksimum 50 karakter alabilecek, ancak
hafızada kullanılan karakter sayısı kadar yer tutacaktır. Bu alan da bölüm_kodu gibi boş bırakılamayacak. Çünkü her
ikisi de NOT NULL ile işaretlenmişler. ADRES ile belirtilen alan ise maksimum 50 karakter alabilecek ve isterse boş
bırakılabilecek. Çünkü NULL ile işaretlenmiş. Adres alanı da bölüm_adı gibi kullanılan karakter sayısı kadar hafızada
yer tutacaktır.
b. PRIMARY KEY: Yukarıdaki BÖLÜMLER tablosuna dikkat edilirse BÖLÜM_KODU ile belirtilen alan aslında her
bölüm için özeldir ve tekrarlanmamalıdır. Veritabanı yönetim sistemleri I dersinden hatırlayacağınız üzere buna
birincil anahtar diyorduk. Tabloyu oluştururken aslında bunu belirtebiliriz. Bir alanın birincil anahtar olduğunu
belirtmek için o alan için tip belirtecinden sonra PRIMARY KEY anahtar sözcüğü kullanılır.
Not: Birincil Anahtar: Tablodaki bir kaydı diğer kayıtlardan ayıran ve tekrara izin vermeyen alandır.
CREATE TABLE BÖLÜMLER
(
[BÖLÜM KODU]
CHAR(4)
[BÖLÜM ADI]
VARCHAR(50)
[ADRES]
VARCHAR(50)
)
PRIMARY KEY
NOT NULL,
NOT NULL,
NULL
Yukarıda dikkat edilirse [BÖLÜM KODU] alanı tanımlanırken veri tipi belirtildikten sonra PRIMARY KEY kullanılmıştır.
Bu durum, [BÖLÜM KODU] alanının birincil anahtar olduğunu ifade ediyor.
Bir tabloda sadece bir tane birincil anahtar bulunabilir. Ama bu bir tane birincil anahtar birden fazla alandan
oluşabilir. Böyle bir durumda PRIMARY KEY tanımlaması aşağıdaki gibi yapılır.
CREATE TABLE SINAVLAR
(
[DERS KODU]
CHAR(6)
NOT NULL,
[ÖĞRENCİ NO]
INT
NOT NULL,
VİZE
TINYINT
NULL,
FİNAL
TINYINT
NULL,
CONSTRAINT PK_SINAVLAR PRIMARY KEY([DERS KODU], [ÖĞRENCİ NO])
)
2
Bartın MYO – Bilgisayar Programcılığı
|
Öğr. Gör. Bayram AKGÜL
| 2013-2014 Güz Dönemi
3. Hafta Tablo İşlemleri
BPR255 Veritabanı
Yönetim Sistemleri-II
c. UNIQUE: Her ne kadar birincil anahtarlar ile tekrarı önleyebilsek de aslında birincil anahtar olmayan fakat
yinede tekrar etmesini istemediğimiz alanlar olabilir. Böyle durumlar için UNIQUE anahtar sözcüğü kullanılır.
Aşağıdaki örneği inceleyiniz. Çalışanlar adında bir tablo tanımlanmıştır. Bu tabloda birincil anahtar olabilecek
NUMARA ve [TC NO] adında iki alan mevcut. Ancak biz sadece birini birincil anahtar olarak belirliyoruz, fakat
diğerinin de tekrarlanmamasını istiyoruz. Çalışanlar tablosunda görüldüğü gibi [TC NO] alanı için veri tipi
tanımlamasından sonra UNIQUE anahtar sözcüğü yazılmıştır. Bunun anlamı; [TC NO] birincil anahtar değil ancak
yinede tekrarlanmasına izin verilmeyecektir. Sadece bir defa girilmesine izin verilecektir.
CREATE TABLE ÇALIŞANLAR
(
NUMARA
INT
PRIMARY KEY
[TC NO]
DECIMAL(11) UNIQUE
İSİM
VARCHAR(25)
SOYİSİM
VARCHAR(25)
TELEFON
CHAR(16)
)
NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,
NULL
d. FOREIGN KEY: Şimdi de aşağıdaki öğrenciler tablosunu düşünün. Bu tabloda dikkat edilirse BÖLÜM alanı
aslında başka bir tablodan referans alıyor. Veritabanı Yönetim sistemleri I dersinden de hatırlayacağınız üzere buna
referans anahtar veya dış anahtar diyorduk. Yani ÖĞRENCİLER tablosundaki BÖLÜM alanı aslında BÖLÜMLER
tablosundaki birincil anahtar olan [BÖLÜM KODU] alanına referans ediyor.
Öğrenciler tablosu için SQL kodunu yazacak olursak aşağıdaki gibi olacaktır.
CREATE TABLE ÖĞRENCİLER
(
NUMARA
INT
PRIMARY KEY
İSİM
VARCHAR(25)
SOYİSİM
VARCHAR(25)
NOT NULL,
NOT NULL,
NOT NULL,
BÖLÜM
CHAR(4) FOREIGN KEY REFERENCES BÖLÜMLER([BÖLÜM KODU])
ON DELETE CASCADE
ON UPDATE CASCADE
NOT NULL,
TELEFON
CHAR(16)
NULL
)
Yukarıdaki örnekte referans verilirken FOREIGN KEY kısmı isteğe bağlıdır. Yazılmazsa da olur. Önemli olan
REFERENCES anahtar sözcüğünün yazılmış olmasıdır.
Bir tabloda sadece bir tane birincil anahtar bulunabilir, fakat birden fazla yabancı anahtar bulunabilir. Bu durumda
her referans için ayrı referans verilir. Yukarıdaki örnekte BÖLÜM alanının referansı belirtildikten sonra “ON DELETE
CASCADE” ve “ON UPDATE CASCADE” ifadeleri kullanılmış. Bunun anlamı: Eğer referans edilen kayıt silinirse
veya güncellenirse bu tabloda da aynı değişikliği yap demektir. Örneğin bölümler tablosundaki bölüm kodu BPR1 olan
3
Bartın MYO – Bilgisayar Programcılığı
|
Öğr. Gör. Bayram AKGÜL
| 2013-2014 Güz Dönemi
3. Hafta Tablo İşlemleri
BPR255 Veritabanı
Yönetim Sistemleri-II
bölüm silinirse BPR1 bölümüne kayıtlı bütün öğrencilerde silinecektir. Eğer BPR1 olan bölüm kodu BBP1 olarak
değiştirilirse öğrenciler tablosunda bölüm kodu BPR1 olan bütün öğrenciler için bölüm BBP1 olarak güncellenecektir.
Eğer böyle bir durum istemiyorsak, yani bölümler tablosundan bir bölüm sildiğimizde öğrenciler tablosundaki o
bölüme ait öğrencilerin silinmesini istemiyorsak “ON DELETE CASCADE” yerine “ON DELETE NO ACTION”
yazmalıyız. Aynı durum güncelleme için de geçerlidir. Yani bölümler tablosundan bir bölüm kodu güncellenince,
öğrenciler tablosundaki o bölüme kayıtlı öğrencilerin bölüm kodu güncellenmesin istiyorsak “ON UPDATE
CASCADE” yerine “ON UPDATE NO ACTION” yazmamız gerekecektir.
Eğer bölümler tablosundaki bir kayıt silinince öğrenciler tablosunda o bölüme kayıtlı öğrenciler silinmesin fakat
bölüm kodu güncellenince öğrenciler tablosundaki o bölümün kodları güncellensin istiyorsak bu durumda “ON
DELETE NO ACTION ON UPDATE CASCADE” şeklinde yamalıyız. Aynı mantık tersi için de geçerlidir. Referans
anahtar tanımlanırken aşağıdaki kural göz önüne alınır.
ALAN_ADI VERİ_TİPİ [FOREIGN KEY] REFERENCES REFERANS_TABLO_ADI(REFERANS_ALAN_ADI)
ON DELETE { CASCADE | NO ACTION} ON UPDATE { CASCADE | NO ACTION}
Foreign Key (Yabancı anahtar) tanımlanırken alan tanımından sonra yazılabildiği gibi daha sonrada aşağıdaki gibi de
yazılabilirdi.
CONSTRAINT
FK_BÖLÜM FOREIGN KEY (BÖLÜM)
REFERENCES BÖLÜMLER([BÖLÜM KODU])
ON DELETE CASCADE ON UPDATE CASCADE
Yani yukarıdaki tablo aşağıdaki gibi de tanımlanabilirdi.
CREATE TABLE ÖĞRENCİLER
(
NUMARA
INT
PRIMARY KEY
İSİM
VARCHAR(25)
SOYİSİM
VARCHAR(25)
BÖLÜM
CHAR(4)
TELEFON
CHAR(16)
CONSTRAINT
NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,
NULL,
FK_BÖLÜM FOREIGN KEY (BÖLÜM)
REFERENCES BÖLÜMLER([BÖLÜM KODU])
ON DELETE CASCADE ON UPDATE CASCADE
)
e. CHECK: Öğrenciler tablosunda TELEFON alanına dikkat edin. Telefon numarası için 16 karakter yer ayrılmış.
Telefon yazılırken maksimum 16 karakterlik yer kullanıldıktan sonra istenildiği şekilde girilebilir. Aslında bu istenen bir
durum değildir. Örneğin kimisi numaralar arasına nokta, kimisi tire veya bir başkası boşluk bırakabilir. Dahası, kimisi
şehir kodlarını parantezler arasına alırken kimisi almaz, kimisi başına sıfır eklerken kimisi de eklemez. Bütün bunlar
aslında istenmeyen durumlardır. Sıralamaların veya aramaların doğru şekilde yapılabilmesi için kayıtların aynı tipte
olması gerekmektedir. Böyle durumları kontrol etmek için CHECK anahtar sözcüğü kullanılmaktadır. Aşağıda telefon
için örnek bir kontrol yazılmıştır.
TELEFON CHAR(16)
CHECK (TELEFON LIKE '([0][0-9][0-9][0-9]) [0-9][0-9][0-9] [0-9][0-9] [0-9][0-9]')
4
Bartın MYO – Bilgisayar Programcılığı
|
Öğr. Gör. Bayram AKGÜL
| 2013-2014 Güz Dönemi
3. Hafta Tablo İşlemleri
BPR255 Veritabanı
Yönetim Sistemleri-II
Bir başka örnek olarak kan gruplarını verebiliriz. Bilindiği gibi bir insanın kan grubu A, B, 0 veya AB olabilir. Bir diğer
örnek olarak ta cinsiyet olabilir. Cinsiyet sadece bay, bayan şeklinde yazılsın istiyorsak bunları veritabanına girmeden
önce bunlar haricinde bir şeyin yazılmış olup olmadığını aşağıdaki gibi kontrol edebiliriz.
KANGRUBU CHAR(2) CHECK(KANGRUBU IN ('A','B','0','AB'))
CİNSİYET CHAR(5) CHECK(CİNSİYET IN ('BAY', 'BAYAN'))
NOT NULL
NOT NULL
Bir alan kontrollü oluşturulmak istenince aşağıdaki kural göz önüne alınmalıdır.
ALAN_ADI VERİ_TİPİ CHECK({KOŞUL İFADESİ})
UYARI: Koşul ifadeleri daha sonra ayrıntılı bir şekilde işlenecektir.
CHECK anahtar sözcüğü alan tanımlanırken yazılabildiği gibi aşağıdaki şekilde de tanımlanabilir. Görüldüğü gibi koşul
ifadesi maaş alanı tanımladıktan sonra başka bir satırda yazılmış.
CREATE TABLE KİŞİLER
(
NUMARA
INT
PRIMARY KEY
ADI
VARCHAR(25)
NOT
SOYADI
VARCHAR(25)
NOT
MAAŞ
SMALLMONEY
NOT
TELEFON
CHAR(16)
CINSIYET
BIT
CONSTRAINT CHK_MAAŞ CHECK(MAAŞ BETWEEN 1000 AND 2000)
)
,
NULL,
NULL,
NULL,
NULL,
NULL,
f. DEFAULT: bazen bazı alanların varsayılan değerlerinin olmasını isteriz. Yani eğer farklı bir şey belirtmiyorsak
varsayılan değer otomatik olarak kayıt için girsin isteriz.
CREATE TABLE KİŞİLER
(
NUMARA
INT
PRIMARY KEY
ADI
VARCHAR(25)
SOYADI
VARCHAR(25)
BÖLÜM
CHAR(4)
DEFAULT 'BPR1'
)
,
NOT NULL,
NOT NULL,
NOT NULL
Bu örnekte bölüm için bir veri belirtmiyorsak bölüm alanına varsayılanda BPR1 girilecektir.
DEFAULT anahtar sözcüğü alan tanımlanırken yazılabildiği gibi aşağıdaki şekilde CONSTRAINT ile beraber de
tanımlanabilir.
CREATE TABLE KİŞİLER
(
NUMARA
INT
PRIMARY KEY
ADI
VARCHAR(25)
SOYADI
VARCHAR(25)
BÖLÜM
CHAR(4)
CONSTRAINT DEF_BOLUM DEFAULT 'BPR1'
)
5
Bartın MYO – Bilgisayar Programcılığı
|
,
NOT NULL,
NOT NULL,
NOT NULL,
FOR BÖLÜM
Öğr. Gör. Bayram AKGÜL
| 2013-2014 Güz Dönemi
3. Hafta Tablo İşlemleri
BPR255 Veritabanı
Yönetim Sistemleri-II
g. IDENTITY: Sipariş numarası gibi bazı numaraların otomatik olarak üretilmesini isteyebiliriz. Access teki
otomatik sayı alanını hatırlayınız. Böyle durumlar için IDENTITY anahtar sözcüğü kullanılır. IDENTITY kullanılırken
yanına parantez içerisinde başlama ve artış miktarı belirtilebiliyor. Eğer bir şey belirtilmezse 1 den başlayıp birer birer
arttıracaktır.
CREATE TABLE SİPARİŞLER
(
[SİPARİŞ NO]
INT
PRIMARY KEY
[ÜRÜN ADI]
VARCHAR(25)
[SİPARİŞ TARİHİ] DATETIME
)
IDENTITY(100,1),
NOT NULL,
NOT NULL
Yukarıdaki örnekte sipariş numarası 100 den başlayacak ve her kayıt için birer birer arttırılacaktır.
NOT: Herhangi bir tabloda sadece bir identity alan tanımlanabilir.
1.3.Tablo Silme
Tablo silmek çok basittir. DROP TABLE tablo_adı komutu yazılarak çalıştırılır. İsmi yazılan Tablo tüm kayıtlarıyla yok
edilir.
Örnek: DROP TABLE ÖĞRENCİLER
Burada öğrenciler tablosu tüm kayıtlarıyla yok edilecektir.
6
Bartın MYO – Bilgisayar Programcılığı
|
Öğr. Gör. Bayram AKGÜL
| 2013-2014 Güz Dönemi