SQLite Örnekle Sorguyu INSERT, UPDATE, DELETE
⚡ Akıllı Özet
SQLite INSERT, UPDATE ve DELETE ifadeleri, yeni satırlar ekleyerek, mevcut değerleri değiştirerek ve kayıtları silerek veritabanındaki verileri değiştirirken, ON CONFLICT yan tümcesi bu işlemler sırasında kısıtlama ihlallerinin nasıl çözüleceğine karar verir.

Ekleme, Güncelleme ve Silme Sorguları SQLite
Veri değiştirme hükümleri SQLite INSERT, UPDATE ve DELETE ifadeleridir. Yeni satır eklemek, mevcut değerleri güncellemek veya veritabanından satır silmek için kullanılır.
Aşağıdaki tüm örnekler için sqlite3.exe'yi çalıştırmanız ve örnek veritabanına aşağıdaki gibi bir bağlantı açmanız gerektiğini unutmayın:
) 1 Adım Bu adımda,
- Bilgisayarım'ı açın ve şu dizine gidin: “C:\sqlite” ve
- Ardından “sqlite3.exe” dosyasını açın:
) 2 Adım Aşağıdaki komutu kullanarak “TutorialsSampleDB.db” veritabanını açın:
.open TutorialsSampleDB.db
Artık veritabanında her türlü sorguyu çalıştırmaya hazırsınız.
SQLite INSERT
SQLite INSERT, veritabanının belirli bir tablosuna kayıt eklemek için kullanılır. 'INSERT' yan tümcesini kullanmanız gerekir. INSERT yan tümcesinin sözdizimi aşağıdaki gibidir:
- INSERT deyiminden sonra değerleri hangi tabloya eklemeniz gerektiğini belirtmelisiniz.
- Tablo adından sonra eklemek istediğiniz sütunların listesini yazıyorsunuz.
- Sütun adlarını göz ardı edebilir ve onlara yazmayabilirsiniz.
- Sütun adını yazmazsanız değerler tabloda bulunan tüm sütunlara aynı sırayla eklenecektir, sütunlar tabloda tanımlanmıştır.
- VALUES deyiminden sonra eklenecek değerleri listelemelisiniz.
- Her INSERT yan tümcesi yalnızca bir satır ekler. Birden fazla satır eklemek istiyorsanız, her satır için bir tane olmak üzere birden fazla INSERT cümleciği yazmalısınız.
SQLite Örnek Ekle
Aşağıdaki örnekte, students tablosuna her öğrenci için bir satır olmak üzere 2 satır ekleyeceğiz:
INSERT INTO Students(StudentId, StudentName, DepartmentId, DateOfBirth) VALUES(11, 'Ahmad', 4, '1997-10-12'); INSERT INTO Students VALUES(12, 'Aly', 4, '1996-10-12');
Bu başarıyla çalışmalı ve bunun için bir çıktı yok:
Bu iki öğrenciyi ekleyecektir:
- Öğrenci Kimliği=11, ÖğrenciAdı = Ahmad, Departman Kimliği = 4 ve Doğum Tarihi = 1997-10-12 olan ilk öğrenci.
- Öğrenci Kimliği=12, Öğrenci Adı=Aly, Bölüm Kimliği=4 ve Doğum Tarihi=1996-10-12 olan ikinci öğrenci.
İlk açıklamada "StudentId, StudentName, DepartmentId, DateOfBirth" sütun adlarını listeledik. Ancak ikinci açıklamada bunu yapmadık.
“12, 'Aly', 4, '1996-10-12'” değerleri, Öğrenciler tablosunun dört sütununa da sütunların tanımlandığı sırayla eklenecektir.
Şimdi, iki öğrencinin Students tablosuna eklendiğini aşağıdaki komutu çalıştırarak doğrulayalım sorgu:
SELECT * FROM Students;
O zaman bu sorgudan dönen iki öğrenciyi şu şekilde görmelisiniz:
SQLite Güncelle
SQLite UPDATE Sorgusu, bir tablodaki mevcut kayıtları değiştirmek için kullanılır. Seçili satırları güncellemek için UPDATE sorgusuyla WHERE ifadesini kullanabilirsiniz. UPDATE ifadesi, belirli bir sütun için bir değeri değiştirerek bir tabloyu günceller. UPDATE ifadesinin sözdizimi aşağıdadır:
Aşağıdaki gibi:
- Güncelleme cümlesinden sonra güncellenecek tablonun adını yazmalısınız.
- Güncellenecek sütun adını ve güncellenecek değeri yazmak için kullanılan “SET cümlesi” yazmanız gerekmektedir.
- Birden fazla sütunu güncelleyebilirsiniz. Her satır arasında virgül kullanabilirsiniz.
- Yalnızca bazı satırları belirtmek için WHERE yan tümcesini belirtebilirsiniz. Yalnızca ifadenin doğru olarak değerlendirdiği satırlar güncellenir. WHERE yan tümcesini belirtmediyseniz tüm satırlar güncellenecektir.
SQLite Güncelleme Örneği
Aşağıdaki UPDATE ifadesinde, StudentId = 6 olan Öğrenci için DepartmentId değerini 3 olarak güncelleyeceğiz:
UPDATE Students SET DepartmentId = 3 WHERE StudentId = 6;
Bu başarıyla çalışmalı ve herhangi bir çıktı almamalısınız:
UPDATE deyiminde Students tablosunu güncellemek istediğimizi belirttik.
- WHERE deyiminde tüm öğrencileri yalnızca ÖğrenciId = 6 satırını seçecek şekilde filtreledik.
- SET cümlesi seçilen öğrenciler için Departman Kimliği değerini 3 olacak şekilde güncelleyecektir.
Şimdi ID'si 6 olan öğrencinin güncellendiğini aşağıdaki komutu çalıştırarak doğrulayalım:
SELECT * FROM Students WHERE StudentId = 6;
Artık Departman Kimliği değerinin aşağıdaki gibi 3 olduğunu görmelisiniz:
SQLite Sil
SQLite DELETE sorgusu, belirtilen tablodaki mevcut kayıtları kaldırmak için kullanılır. Seçilen satırları silmek için WHERE yan tümcesini DELETE sorgularıyla birlikte kullanabilirsiniz.
DELETE ifadesinin söz dizimi aşağıdaki gibidir:
- DELETE FROM ifadesinden sonra, kayıtlarını silmek istediğiniz tablonun adını yazmalısınız. (Not: DELETE ifadesi, bir tablodan bazı kayıtları silmek veya tüm kayıtları silmek için kullanılır ve tablonun kendisini silmez. Ancak, DROP ifadesi, tablonun tamamını ve üzerindeki tüm kayıtları silmek için kullanılır.)
- Eğer DELETE cümlesini “DELETE FROM guru” şeklinde yazarsanız bu “guru” tablosundaki tüm kayıtları silecektir.
- Belirli satırlardan bazılarını silmek istiyorsanız bir ifadeyle WHERE koşulunu belirtebilirsiniz. Yalnızca ifadenin doğru olarak değerlendirildiği satırlar silinecektir. Örneğin, "DELETE FROM guru WHERE id > 5" - bu yalnızca kimliği 5'ten büyük olan kayıtları siler.
Örnek E-posta
Aşağıdaki ifadede StudentId'si 11 ve 12 olan iki öğrenciyi sileceğiz:
DELETE FROM Students WHERE StudentId = 11 OR StudentId = 12;
“StudentId = 11 VEYA StudentId = 12” ifadesi yalnızca 11 ve 12 kimlik numaralarına sahip öğrenciler için geçerli olacaktır. Bu nedenle DELETE koşulu her ikisine de uygulanacak ve yalnızca onları silecektir.
Bu komut başarılı bir şekilde çalışmalı ve aşağıdaki gibi bir çıktı almamalısınız:
Aşağıdaki gibi Öğrenciler tablosundaki tüm kayıtları seçerek iki öğrencinin silindiğini doğrulayabilirsiniz:
SELECT * FROM Students;
Kimlikleri 11 ve 12 olan iki öğrenciyi aşağıdaki gibi görmemelisiniz:
SQLite Uyuşmazlık Maddesi
Aşağıdaki sütun kısıtlamalarından birine sahip bir sütununuz olduğunu varsayalım: UNIQUE, NOT NULL, CHECK veya PRIMARY KEY. Ve sonra bu kısıtlamayla çakışan bir değere sahip bir sütuna bir değer eklemeye veya güncellemeye çalıştınız.
Örneğin, bir sütunda UNIQUE kısıtlaması varsa ve zaten var olan bir değeri (yinelenen bir değer) eklemeye çalıştıysanız, bu da UNIQUE kısıtlamasıyla çelişir. Daha sonra CONFLICT cümleciği, bu tür durumlarda bu çatışmayı çözmek için ne yapacağınızı seçmenize izin verir.
CONFLICT cümlesinin çatışmayı nasıl çözdüğünü açıklamaya devam etmeden önce. Veritabanı işleminin ne olduğunu anlamalısınız.
Veritabanı İşlemi
Veritabanı işlemi terimi, aşağıdakilerin bir listesidir: SQLite işlemler (ekleme veya güncelleme veya silme). Veritabanı işlemi tek bir birim olarak yürütülmelidir, tüm işlemler başarıyla yürütülmeli veya hiç yürütülmemelidir. Bunlardan biri yürütülemezse tüm işlemler iptal edilecektir.
Veritabanı işlemine örnek
Bir banka hesabından diğerine para aktarma işlemi birkaç faaliyeti içerecektir. Bu işlem işlemi, ilk hesaptan para çekilip başka bir hesaba yatırılmasını içerir. Bu işlemin tamamen tamamlanması veya tamamen iptal edilmesi ve yarı yolda kalmaması gerekir.
CONFLICT maddesinde seçebileceğiniz beş çözümün listesi aşağıda verilmiştir:
- GERİ ALMA – bu, mevcut işlemin geri alınmasını sağlar. SQLite çelişkili beyan (tüm işlemi iptal edecektir). Örneğin, 10 satırı güncellemeye çalışıyorsanız ve beşinci satırda bir kısıtlamayla çakışan bir değer varsa hiçbir satır güncellenmeyecek, 10 satır aynı kalacaktır. Bir hata atılacak.
- İPTAL – bu, mevcut işlemi iptal edecektir. SQLite yalnızca çelişkinin olduğu bildirimi kullanın ve işlem iptal edilmeyecektir. Örneğin, 10 satırı güncellemeye çalışıyorsanız ve beşinci satırda bir kısıtlamayla çakışan bir değer varsa, yalnızca beşinci değer güncellenmeyecek ancak diğer 9 satır güncellenecektir. Bir hata atılacak.
- BAŞARISIZ – mevcut işlemi iptal eder SQLite çelişki içeren ifade. Ancak işlem devam etmeyecek ancak çakışmanın olduğu satırdan önceki satırlarda yapılan önceki değişiklikler uygulanacaktır. Örneğin, 10 satırı güncellemeye çalışıyorsanız ve beşinci satırda bir kısıtlamayla çakışan bir değer varsa, yalnızca 4 satır güncellenecek, diğeri güncellenmeyecektir. Bir hata atılacak.
- YOK SAY – bu, kısıtlama ihlali içeren satırı atlayacak ve sonraki satırların işlenmesine devam edecektir. SQLite ifade. Örneğin, 10 satırı güncellemeye çalışıyorsanız ve beşinci satırda bir kısıtlamayla çakışan bir değer varsa, yalnızca 4 satır güncellenecek, diğeri güncellenmeyecektir. Diğer satırları güncellemek için daha fazla ilerlemeyecek ve çakışma değerine sahip satırda durmayacak. Hiçbir hata atılmayacaktır.
- DEĞİŞTİR – ihlalin türüne bağlıdır:
- UNIQUE veya PRIMARY KEY kısıtlaması için bir kısıtlama ihlali olduğunda. REPLACE, ihlale neden olan satırı yeni eklenen veya güncellenen satırla değiştirecektir.
- NOT NULL kısıtlaması ihlali olduğunda, REPLACE yan tümcesi NULL değerini o sütunun varsayılan değeriyle değiştirir. Sütunun varsayılan bir değeri yoksa, o zaman SQLite beyanı iptal edecek (beyanname iptal edilecek)
- CHECK kısıtlaması ihlali meydana gelirse, madde iptal edilir.
Not: Yukarıdaki 5 çözüm, çatışmayı nasıl çözmek istediğinize dair seçeneklerdir. Bir çatışmayı çözmek için geçerli olan çözümün, diğer çatışma türlerini çözmek için de geçerli olması gerekmez.
CONFLICT deyimi nasıl bildirilir
CREATE TABLE ifadesi içinde bir sütun tanımı için bir kısıtlama tanımladığınızda ON CONFLICT ifadesini bildirebilirsiniz. Aşağıdaki sözdizimini kullanarak:
Çatışmayı daha önce açıklandığı gibi çözmek için beş çözümden birini seçebilirsiniz.
ÇATIŞMA ÜZERİNDE GÖZALDI Örnek
) 1 Adım Aşağıdaki gibi yeni bir tablo konusu oluşturun:
CREATE TABLE [Subjects] ( [SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT IGNORE, [SubjectName] NVARCHAR NOT NULL );
SubjectId sütununa birincil anahtar kısıtlaması tanımladığımıza dikkat edin. Birincil anahtar kısıtlaması, SubjectId sütununa iki yinelenen değerin eklenmesine izin vermez, böylece bu sütundaki tüm değerler benzersiz olur. Ayrıca, çakışma çözümünü "YOK SAY" olarak seçtiğimize de dikkat edin.
Komut başarıyla çalışmalı ve herhangi bir hata almamalısınız:
) 2 Adım Şimdi yeni tablo konularına, birincil anahtar kısıtlamasını ihlal eden bir değerle bazı değerler ekleyelim:
INSERT INTO Subjects VALUES(1, 'Algebra'); INSERT INTO Subjects VALUES(2, 'Database Course'); INSERT INTO Subjects VALUES(2, 'Data Structures'); INSERT INTO Subjects VALUES(4, 'Algorithms');
Bu INSERT deyiminde, aynı Birincil Anahtar Konu Kimliği 2'ye sahip iki ders eklemeye çalıştık, bu da birincil anahtar kısıtlamasının ihlalidir.
Komutlar düzgün çalışmalı ve herhangi bir hata almamalısınız. Aşağıdaki gibi:
) 3 Adım Tablodaki tüm konuları aşağıdaki gibi seçin:
SELECT * FROM Subjects;
Bu size konuların listesini verecektir:
Dikkat ederseniz, yalnızca üç konu eklenmiştir: "Cebir, Veritabanı Kursu ve Algorithms” 4 satır yerine.
Birincil anahtar kısıtlamasını ihlal eden değere sahip olan "Veri Yapıları" satırı göz ardı edildi ve eklenmedi. Fakat, SQLite bu satırdan sonra diğer ifadeleri yürütmeye devam eder.
) 4 Adım Aşağıdaki örnek için farklı bir ON CONFLICT ifadesiyle yeniden oluşturmak üzere tablo konularını SİLMEK için aşağıdaki komutu çalıştırın:
DROP TABLE Subjects;
Drop komutu tüm tabloyu siler. Tablo Konuları artık mevcut değil.
ÇATIŞMA ÜZERİNDE DEĞİŞTİRME Örnek
) 1 Adım Aşağıdaki gibi yeni bir tablo konusu oluşturun:
CREATE TABLE [Subjects] ( [SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT REPLACE, [SubjectName] NVARCHAR NOT NULL );
SubjectId sütununda bir PRIMARY KEY kısıtlaması tanımladığımıza dikkat edin. Birincil anahtar kısıtlaması, SubjectId sütununa iki kopya değerin eklenmesine izin vermez, böylece o sütundaki tüm değerler benzersiz olmalıdır.
Ayrıca, çakışma çözümü seçeneği olarak "DEĞİŞTİR"i seçtiğimize dikkat edin. Komut başarıyla çalışmalı ve herhangi bir hata almamalısınız:
) 2 Adım Şimdi yeni Subjects tablosuna, birincil anahtar kısıtlamasını ihlal eden bir değerle bazı değerler ekleyelim:
INSERT INTO Subjects VALUES(1, 'Algebra'); INSERT INTO Subjects VALUES(2, 'Database Course'); INSERT INTO Subjects VALUES(2, 'Data Structures'); INSERT INTO Subjects VALUES(4, 'Algorithms');
Bu INSERT deyiminde, aynı Birincil Anahtar Konu Kimliği 2'ye sahip iki ders eklemeye çalıştık, bu da birincil anahtar kısıtlamasının ihlalidir.
Komutlar düzgün çalışmalı ve herhangi bir hata almamalısınız. Aşağıdaki gibi:
) 3 Adım Tablodaki tüm konuları aşağıdaki gibi seçin:
SELECT * FROM Subjects;
Bu size konuların listesini verecektir:
Dikkat ederseniz, yalnızca üç konu eklenmiştir: "Cebir, Veri Yapıları ve Algorithms” oysa biz 4 satır eklemeye çalıştık.
Birincil anahtar kısıtlamasını ihlal eden değere sahip olan "Veri Yapıları" satırı, "Veritabanı Kursu" değeriyle aşağıdaki şekilde değiştirilmiştir:
- İlk iki insert ifadesi sorunsuz bir şekilde çalışıyor. İki konu Cebir ve Veritabanı Kursu kimlikleri 1, 2 ile eklenecektir.
- Ne zaman SQLite SubjectId 2 ve SubjectName "Veri Yapıları" ile üçüncü INSERT sorgusunu çalıştırmaya çalışırken, SubjectId = 2 olan bir konunun zaten mevcut olduğunu fark eder. Bu, SubjectId sütununda tanımlanan birincil anahtar kısıtlamasının ihlalidir.
- SQLite Bu çakışma için DEĞİŞTİR çözümünü seçeceğiz. Bu çözüm, konular tablosunda zaten var olan değeri, ekleme ifadesinden gelen yeni değerle değiştirir. Yani, "Veritabanı Kursu" SubjectName, "Veri Yapıları" SubjectName ile değiştirilecektir.


















