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.

  • 📝 SOKMAK: INSERT ifadesi, VALUES yan tümcesiyle hedef sütunları ve değerlerini listeleyerek bir veya daha fazla yeni satır ekler.
  • ✏️ GÜNCELLEME: UPDATE ifadesi, yeni veriler için SET ve belirli satırları hedeflemek için WHERE kullanarak mevcut sütun değerlerini değiştirir.
  • 🗑️ SİL: DELETE ifadesi, WHERE koşuluna uyan satırları veya WHERE koşulu belirtilmediğinde tüm satırları siler.
  • ⚠️ Çatışma Maddesi: ÇATIŞMA DURUMU maddesi, ROLLBACK, ABORT, FAIL, IGNORE veya REPLACE yöntemleriyle kısıtlama ihlallerini çözer.
  • 🔁 İşlemler: Veritabanı işlemi, birden fazla işlemi tek bir birim halinde gruplandırır ve bu birim ya tamamen onaylanır ya da tamamen iptal edilir.
  • 🤖 Yapay Zeka Yardımı: Yapay zekâ destekli metinden SQL'e dönüştürme araçları ve GitHub Copilot, SQLite Basit İngilizce komut istemlerinden INSERT, UPDATE ve DELETE ifadelerini kullanma.

SQLite Sorguyu EKLEYİN, GÜNCELLEYİN, SİLİN

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:

SQLite Sorgu - EKLE, GÜNCELLE, SİL

) 2 Adım Aşağıdaki komutu kullanarak “TutorialsSampleDB.db” veritabanını açın:

.open TutorialsSampleDB.db

SQLite Sorgu - EKLE, GÜNCELLE, SİL

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:

SQLite INSERT

  • 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:

SQLite Ekle

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 Ekle

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:

SQLite Güncelle

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:

SQLite Güncelle

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 Güncelle

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:

SQLite Sil

  • 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:

SQLite Sil

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 Sil

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:

  1. 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.
  2. İ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.
  3. 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.
  4. 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.
  5. 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:

SQLite Uyuşmazlık Maddesi

Ç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:

ÇATIŞMA ÜZERİNDE GÖZALDI Örnek

) 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:

ÇATIŞMA ÜZERİNDE GÖZALDI Örnek

) 3 Adım Tablodaki tüm konuları aşağıdaki gibi seçin:

SELECT * FROM Subjects;

Bu size konuların listesini verecektir:

ÇATIŞMA ÜZERİNDE GÖZALDI Örnek

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:

ÇATIŞMA ÜZERİNDE DEĞİŞTİRME Örnek

) 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:

ÇATIŞMA ÜZERİNDE DEĞİŞTİRME Örnek

) 3 Adım Tablodaki tüm konuları aşağıdaki gibi seçin:

SELECT * FROM Subjects;

Bu size konuların listesini verecektir:

ÇATIŞMA ÜZERİNDE DEĞİŞTİRME Örnek

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.

SSS

UPSERT işlemi, ekleme ve güncelleme işlemlerini birleştirir. SQLite 3.24.0 (2018), INSERT INTO … ON CONFLICT(column) DO UPDATE SET … komutu, benzersiz veya birincil anahtar çakışması oluştuğunda yeni bir satır ekler veya mevcut satırı günceller. DO NOTHING ise satırı sessizce atlar.

INSERT OR REPLACE, çakışan satırı siler ve yeni bir satır ekler; bu nedenle listelenmemiş sütunlar varsayılan değerlerine sıfırlanır. ON CONFLICT DO UPDATE, mevcut satırı olduğu gibi düzenler, böylece varsayılan değerleri korur.ping Diğer sütunlar olduğu gibi kalır, bu da onu daha güvenli bir gerçek upsert işlemi yapar.

VALUES ifadesinden sonra virgülle ayrılmış birkaç değer grubu listeleyin: INSERT INTO Students (id, name) VALUES (1,'A'), (2,'B'), (3,'C');. Bu çok satırlı form şu şekilde çalışır: SQLite 3.7.11 sürümü, her satır için ayrı bir INSERT sorgusu çalıştırmaktan daha hızlıdır.

`DELETE FROM table_name;` komutunu `WHERE` koşulu olmadan çalıştırın. SQLite TRUNCATE komutu bulunmamaktadır, ancak tüm satırları aynı anda silen bir truncate optimizasyonu uygular. Tablo yapısı korunur; tabloyu tamamen kaldırmak için DROP TABLE komutunu kullanın.

Dan beri SQLite 3.35.0 (2021) sürümünde, INSERT, UPDATE ve DELETE komutları, etkilenen satırları çıktı olarak veren isteğe bağlı bir RETURNING yan tümcesi kabul eder. Örneğin, INSERT … RETURNING id; komutu, oluşturulan değerleri hemen döndürür ve değişenleri okumak için ayrı bir SELECT sorgusuna gerek kalmaz.

INSERT INTO … SELECT kullanın: INSERT INTO Archive (id, name) SELECT id, name FROM Students WHERE DepartmentId = 4;. SQLite SELECT sorgusunun döndürdüğü her satırı ekler, bu nedenle sütun sırası ve sayısı hedef tabloyla eşleşmelidir.

Evet. Yapay zekâ destekli metinden SQL'e dönüştürme asistanları, sade İngilizce istekleri şu şekilde dönüştürür: SQLite INSERT, UPDATE ve DELETE ifadeleri, WHERE ve ON CONFLICT yan tümceleri de dahil olmak üzere kullanılabilir. Tablo ve sütun adlarınızı belirtmeniz doğruluğu artırır ve oluşturulan her ifade, gerçek veriler üzerinde çalıştırılmadan önce gözden geçirilip test edilmelidir.

GitHub Yardımcı Pilotu anlaşılacağı SQLite INSERT, UPDATE ve DELETE sorgularını editörlerde satır içi olarak kullanabilirsiniz. VS CodeYakındaki şemaları ve yorumları okur, bu nedenle otomatik tamamlama işlemleri gerçek tablo ve sütun adlarınızı yeniden kullanır, ancak yine de her ifadeyi çalıştırmadan önce doğrulamanız gerekir.

Bu yazıyı şu şekilde özetleyin: