-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathday3_constraints(kısıtlamalar).sql
More file actions
116 lines (88 loc) · 5.1 KB
/
day3_constraints(kısıtlamalar).sql
File metadata and controls
116 lines (88 loc) · 5.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/*======================= CONSTRAINTS - KISITLAMALAR ======================================
NOT NULL - Bir Sütunun NULL içermemesini garanti eder.
UNIQUE - Bir sütundaki tüm değerlerin BENZERSİZ olmasını garanti eder.
PRIMARY KEY - Bir sütünün NULL içermemesini ve sütundaki verilerin
BENZERSİZ olmasını garanti eder.(NOT NULL ve UNIQUE birleşimi gibi)
FOREIGN KEY - Başka bir tablodaki Primary Key’i referans göstermek için kullanılır.
Böylelikle, tablolar arasında ilişki kurulmuş olur.
foreign ve primary ile tablolar birbirine bağlamadan da, id leri ayni olan satirlarda işlem yap diyebiliriz, böylelikle
ayni field verilebilir, parent child ilişkisi olmamiş olur
CHECK - Bir sutundaki tüm verilerin belirlenen özel bir şartı sağlamasını garanti eder.
DEFAULT - Herhangi bir değer atanamadığında Başlangıç değerinin atanmasını sağlar.
========================================================================================*/
CREATE TABLE calisanlar
(
id CHAR(5) PRIMARY KEY, -- not null + unique
isim VARCHAR(50) UNIQUE,
maas int NOT NULL,
ise_baslama DATE
);
INSERT INTO calisanlar VALUES('10002', 'Mehmet Yılmaz' ,12000, '2018-04-14');
INSERT INTO calisanlar VALUES('10008', null, 5000, '2018-04-14');
INSERT INTO calisanlar VALUES('10010', null, 5000, '2018-04-14'); -- ikinci kez null, benzersizlik kisitlamasini bozmaz
INSERT INTO calisanlar VALUES('10005', 'Mustafa Ali', 5000, '2018-04-14');
INSERT INTO calisanlar VALUES('10006', 'Canan Yaş', NULL, '2019-04-12'); -- Maaş null olamaz.
INSERT INTO calisanlar VALUES('10003', 'CAN', 5000, '2018-04-14');
INSERT INTO calisanlar VALUES('10007', 'CAN', 5000, '2018-04-14'); -- CAN zaten yukarda eklendi UNique olmadi
INSERT INTO calisanlar VALUES('10009', 'cem', '', '2018-04-14'); -- maaş data type integer olmal ama burada boşluk,
INSERT INTO calisanlar VALUES('', 'osman', '2000', '2018-04-14'); -- burada hata vermez çünkü '' hiçlik string'de bir değerdir.
INSERT INTO calisanlar VALUES('10002', 'ayse yilmaz', '12000', '2018-04-14');-- id tekrarli olamaz primary key den dolayi
INSERT INTO calisanlar VALUES( null, 'filiz', '12000', '2018-04-14'); -- primary key olduğundan null yazamayz.
select * from calisanlar;
/* ------------
-- KISITLAMALAR (ORNEK3 - FOREIGN KEY)
----------------------------------------------------------------*/
CREATE TABLE adresler
(
adres_id CHAR(5),
sokak VARCHAR(50),
cadde VARCHAR(30),
sehir VARCHAR(15),
CONSTRAINT id_fk FOREIGN KEY(adres_id) REFERENCES calisanlar(id) -- (solda tablo seçiliyken üstteki info dan ismi kontrol edebilirsin)
);
INSERT INTO adresler VALUES('10003','Mutlu Sok', '40.Cad.','IST');
INSERT INTO adresler VALUES('10003','Can Sok', '50.Cad.','Ankara');
INSERT INTO adresler VALUES('10002','Ağa Sok', '30.Cad.','Antep');
-- Parent tabloda olmayan id ile Child'a ekleme yapamayiz.
-- FK'ye null değeri atanabilir.
INSERT INTO adresler VALUES(NULL,'Ağa Sok', '30.Cad.','Antep');
select * from adresler;
drop table calisanlar; -- bağlantl tablolarda child silinmeden parent silinemez.
drop table adresler;
CREATE TABLE talebeler
(
id CHAR(3) primary key,
isim VARCHAR(50),
veli_isim VARCHAR(50),
yazili_notu int
);
INSERT INTO talebeler VALUES(123, 'Ali Can', 'Hasan',75);
INSERT INTO talebeler VALUES(124, 'Merve Gul', 'Ayse',85);
INSERT INTO talebeler VALUES(125, 'Kemal Yasa', 'Hasan',85);
INSERT INTO talebeler VALUES(126, 'Nesibe Yılmaz', 'Ayse',95);
INSERT INTO talebeler VALUES(127, 'Mustafa Bak', 'Can',99);
/*============================== ON DELETE CASCADE =============================
Her defasında önce child tablodaki verileri silmek yerine ON DELETE CASCADE
silme özelliğini aktif hale getirebiliriz.
Bunun için FK olan satırın en sonuna ON DELETE CASCADE komutunu yazmak yeterli
============================================================================*/
CREATE TABLE notlar
(
talebe_id char(3),
ders_adi varchar(30),
yazili_notu int,
CONSTRAINT notlar_fk FOREIGN KEY (talebe_id)
REFERENCES talebeler(id) ON DELETE CASCADE); -- on delete cascade sayesinde
-- parent taki silinen bir kayıt ile ilişkili olan tüm child kayıtlarını
-- siler.
-- mesela bir hastane silindi o hastanedeki bütün kayıtlar silinmeli, oda böyle olur.
-- cascade yoksa önce child temizlenir sonra parent
INSERT INTO notlar VALUES ('123','kimya',75);
INSERT INTO notlar VALUES ('124', 'fizik',65);
INSERT INTO notlar VALUES ('125', 'tarih',90);
INSERT INTO notlar VALUES ('126', 'Matematik',90);
delete from notlar where talebe_id = '123';
delete from talebeler where id='124';
select * from talebeler;
select * from notlar;
drop table talebeler;