-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathday4_Delete.sql
More file actions
165 lines (163 loc) · 8.5 KB
/
day4_Delete.sql
File metadata and controls
165 lines (163 loc) · 8.5 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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
-- ============================== DELETE ===================================
-- DELETE FROM tablo_adı; Tablonun tüm içerğini siler.
-- Bu komut bir DML komutudur. Dolayısıyla devamında WHERE gibi cümlecikler kullanılabilir.
-- delete ic aksami yok eder , drop komple tabloyu siler.
-- DELETE FROM tablo_adı
-- WHERE sutun_adi = veri;
CREATE TABLE ogrenciler
(
id CHAR(3),
isim VARCHAR2(50),
veli_isim VARCHAR2(50),
yazili_notu NUMBER(3)
);
INSERT INTO ogrenciler VALUES(123, 'Ali Can', 'Hasan',75);
INSERT INTO ogrenciler VALUES(124, 'Merve Gul', 'Ayse',85);
INSERT INTO ogrenciler VALUES(125, 'Kemal Yasa', 'Hasan',85);
INSERT INTO ogrenciler VALUES(126, 'Nesibe Yilmaz', 'Ayse',95);
INSERT INTO ogrenciler VALUES(127, 'Mustafa Bak', 'Can',99);
SAVEPOINT ABC; --ROLLBACK kısmında açıklaması var
SELECT * FROM ogrenciler;
DROP TABLE ogrenciler;
/* =============================================================================
Seçerek silmek için WHERE Anahtar kelimesi kullanılabilir.
===============================================================================*/
/* -----------------------------------------------------------------------------
ORNEK1: id'si 124 olan ogrenciyi siliniz.
-----------------------------------------------------------------------------*/
DELETE FROM ogrenciler
WHERE id = 124;
/* -----------------------------------------------------------------------------
ORNEK2: ismi Kemal Yasa olan satırını siliniz.
-----------------------------------------------------------------------------*/
DELETE FROM ogrenciler
WHERE isim = 'Kemal Yasa';
/* -----------------------------------------------------------------------------
ORNEK3: ismi Nesibe Yilmaz ve Mustafa Bak olan kayıtları silelim.
-----------------------------------------------------------------------------*/
DELETE FROM ogrenciler
WHERE isim = 'Nesibe Yilmaz' OR isim = 'Mustafa Bak';
/* ----------------------------------------------------------------------------
ORNEK4: İsmi Ali Can ve id'si 123 olan kaydı siliniz.
-----------------------------------------------------------------------------*/
DELETE FROM ogrenciler
WHERE isim = 'Ali Can' AND id = 123;
-- and mustfa ve ali derse ismi mustafa ve ali olanı siler isim de mustafa ve ali gecmeli
-- or dersek mustafayi da siler aliyi de siler bu yuzden or kullanmak daaha mantikli...
--isim = 'Nesibe Yilmaz' and isim = 'Mustafa Bak'; yazsaydi hicbirini silmezdi. cunku isimlerde Nesibe Yilmaz Mustafa Bak yoktur.
-- ins anlarsin ilerde.:)
/* ----------------------------------------------------------------------------
ORNEK5: id 'si 126'dan büyük olan kayıtları silelim.
-----------------------------------------------------------------------------*/
DELETE FROM ogrenciler
WHERE id>126;
/* ----------------------------------------------------------------------------
ORNEK6: id'si 123, 125 ve 126 olanları silelim.
-----------------------------------------------------------------------------*/
DELETE FROM ogrenciler
WHERE id IN(123,125,126);
/* ----------------------------------------------------------------------------
ORNEK7: TABLODAKİ TÜM KAYITLARI SİLELİM..
-----------------------------------------------------------------------------*/
DELETE FROM ogrenciler;
--*************************************************
-- tablodaki kayitlari silmek ile tabloyu silmek farkli islemlerdir
-- silme komutlari da iki basamaklidir, biz genelde geri getirilebilecek sekilde sileriz
-- ancak bazen guvenlik gibi sebeplerle geri getirilmeyecek sekilde silinmesi istenebilir
/* ======================== DELETE - TRUCATE - DROP ============================
1-) TRUNCATE komutu DELETE komutu gibi bir tablodaki verilerin tamamını siler.
Ancak, seçmeli silme yapamaz. Çünkü Truncate komutu DML değil DDL komutudur.*/
TRUNCATE TABLE ogrenciler; --doğru yazım
/* 2-) DELETE komutu beraberinde WHERE cümleciği kullanılabilir. TRUNCATE ile kullanılmaz.
TRUNCATE TABLE ogrenciler.....yanlış yazım
WHERE veli_isim='Hasan';
-- TRUNCATE komutu tablo yapısını değiştirmeden,
-- tablo içinde yer alan tüm verileri tek komutla silmenizi sağlar.
3-) Delete komutu ile silinen veriler ROLLBACK Komutu ile kolaylıkla geri
alınabilir.
4-) Truncate ile silinen veriler geri alınması daha zordur. Ancak
Transaction yöntemi ile geri alınması mümkün olabilir.
5-) DROP komutu da bir DDL komutudur. Ancak DROP veriler ile tabloyu da
siler. Silinen tablo Veritabanının geri dönüşüm kutusuna gider. Silinen
tablo aşağıdaki komut ile geri alınabilir. Veya SQL GUI'den geri alınabilir.
FLASHBACK TABLE tablo_adı TO BEFORE DROP; -> tabloyu geri alır.
PURGE TABLE tablo_adı; -> Geri dönüşümdeki tabloyu siler.
DROP TABLE tablo_adı PURGE; -> Tabloyu tamamen siler
connections da table ı sağ tıkla =>table=>drop, purge işaretle, çöp kutusuna
atılmaksızın direk siler.
connections recyle bin sağ tıkla, purge=>tabloyu tamamen siler. flashback=>
tabloyu geri getirir
==============================================================================*/
--INSERT veri girişinden sonra SAVEPOİNT ABC; ile verileri buraya sakla
--(yanlışlık yapma olasılığına karşın önlem gibi, AYNI İSİMDE BAŞKA TABLO VARSA)
--sonra istediğini sil (ister tümü ister bir kısmı)
--sonra savepoint yaptığın yerden alttaki gibi rollback ile verileri geri getir
DROP TABLE ogrenciler;
DELETE FROM ogrenciler; -- Tüm verileri sil.
ROLLBACK TO ABC; -- Silinen Verileri geri getir.
SELECT
* FROM ogrencıler;
DROP TABLE ogrenciler; -- Tabloyu siler ve Veritabanının Çöp kutusuna
-- gönderir. (DDL komutudur.)
-- Çöp kutusundaki tabloyu geri getirir.
FLASHBACK TABLE ogrenciler TO BEFORE DROP;
-- Tabloyu tamamen siler (Çöp kutusuna atmaz.)
DROP TABLE ogrenciler PURGE;
-- PURGE sadece DROP ile silinmis tablolar icin kullanilir
-- DROP kullanmadan PURGE komutu kullanmak isterseniz
-- ORA-38302: invalid PURGE option hatasi alirsiniz
-- Tüm veriler hassas bir şekilde siler.rollback ile geri alınamaz
-- PURGE yapmak icin 2 yontem kullanabiliriz
--1 tek satirda DROP ve PURGE beraber kullanabiliriz
DROP TABLE ogrenciler7 PURGE;
-- bu komut ile sildigimiz tabloyu geri getirmek icin FLASHBACK komutunu kullansak
-- ORA-38305: object not in RECYCLE BIN hatasini alirsiniz
-- 2 daha once DROP ile silinmis bir tablo varsa sadece PURGE kullanabiliriz
--Tabloyu yeniden olusturalim
DROP TABLE ogrenciler7;
-- bu asamada istersek FLASHBACK ile tablomuzu geri getirebiliriz
PURGE TABLE ogrenciler7;
-- bu asamada istesem de tabloyu geri getiremem
/* =============================================================================
Tablolar arasında ilişki var ise veriler nasıl silinebilir?
============================================================================= */
/*============================== 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 talebeler
(
id CHAR(3), --PK
isim VARCHAR2(50),
veli_isim VARCHAR2(50),
yazili_notu NUMBER(3),
CONSTRAINT talebe_pk PRIMARY KEY (id)
);
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);
CREATE TABLE notlar
(
talebe_id char(3), --FK
ders_adi varchar2(30),
yazili_notu number (3),
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. DELETE FROM talebeleR WHERE id = 124; yaparsak child daki 124 lerde silinir.
--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);
SELECT * FROM TALEBELER;
SELECT * FROM NOTLAR;
DELETE FROM notlar
WHERE talebe_id = 124;
DELETE FROM talebeler
WHERE id = 124;