Klausa pengubahsuaian data dalam SQLite adalah penyataan INSERT, UPDATE, dan DELETE. Ini digunakan untuk memasukkan baris baru, memperbarui nilai yang ada, atau menghapus baris dari pangkalan data.
Dalam tutorial ini, anda akan belajar-
- MASUKKAN
- Kemas kini
- Padam
- Klausa Konflik
Perhatikan bahawa, untuk semua contoh berikut, anda harus menjalankan sqlite3.exe dan membuka sambungan ke pangkalan data sampel sebagai aliran:
Langkah 1) Dalam langkah ini,
- Buka Komputer Saya dan arahkan ke direktori berikut " C: \ sqlite " dan
- Kemudian buka " sqlite3.exe ":
Langkah 2) Buka pangkalan data " TutorialsampleDB.db " dengan arahan berikut:
.buka TutorialSampleDB.db
Sekarang anda sudah bersedia untuk menjalankan sebarang jenis pertanyaan di pangkalan data.
MASUKKAN SQLite
SQLite INSERT digunakan untuk memasukkan rekod ke dalam jadual pangkalan data yang ditentukan. anda harus menggunakan klausa 'INSERT'. Sintaks klausa INSERT adalah seperti berikut:
- Selepas klausa INSERT, anda harus menyatakan jadual mana yang anda perlukan untuk memasukkan nilai.
- Setelah nama jadual anda menulis senarai lajur, anda ingin memasukkan nilai ke dalamnya.
- Anda boleh mengabaikan nama lajur dan tidak menulisnya.
- Sekiranya anda tidak menulis nama lajur, nilainya akan dimasukkan ke dalam semua lajur yang terdapat di dalam jadual dengan susunan yang sama, lajur ditentukan dalam jadual.
- Selepas klausa NILAI, anda harus menyenaraikan nilai yang akan dimasukkan.
- Setiap klausa INSERT hanya memasukkan satu baris. Sekiranya anda ingin memasukkan beberapa baris, anda harus menulis beberapa klausa INSERT, satu untuk setiap baris.
Contoh SQLite Insert
Dalam contoh berikut, kami akan memasukkan 2 baris ke dalam jadual pelajar, satu untuk setiap pelajar:
MASUKKAN KE DALAM Pelajar (StudentId, StudentName, DepartmentId, DateOfBirth)NILAI (11, 'Ahmad', 4, '1997-10-12');MASUKKAN NILAI Pelajar (12, 'Aly', 4, '1996-10-12');
Ini mesti berjalan dengan jayanya dan tidak ada output untuk ini:
Ini akan memasukkan dua pelajar:
- Pelajar pertama dengan StudentId = 11, StudentName = Ahmad, DepartmentId = 4, dan DateOfBirth = 1997-10-12.
- Pelajar kedua dengan StudentId = 12, StudentName = Aly, DepartmentId = 4, dan DateOfBirth = 1996-10-12 '.
Dalam pernyataan pertama, kami menyenaraikan nama lajur " StudentId, StudentName, DepartmentId, DateOfBirth ". Walau bagaimanapun, dalam pernyataan kedua, kami tidak.
Empat nilai " 12, 'Aly', 4, '1996-10-12' " akan dimasukkan dalam keempat-empat lajur jadual Pelajar dalam urutan yang sama lajur didefinisikan.
Sekarang, mari kita sahkan bahawa kedua-dua pelajar itu dimasukkan ke dalam jadual Pelajar dengan menjalankan pertanyaan berikut:
PILIH * DARI Pelajar;
Maka anda harus melihat kedua-dua pelajar itu kembali dari pertanyaan seperti berikut:
Kemas kini SQLite
SQLite UPDATE Query digunakan untuk mengubahsuai rekod yang ada dalam jadual. Anda boleh menggunakan klausa WHERE dengan pertanyaan UPDATE untuk mengemas kini baris yang dipilih. Klausa UPDATE mengemas kini jadual dengan mengubah nilai untuk lajur tertentu. Berikut adalah sintaks klausa UPDATE:
Seperti berikut:
- Selepas "klausa kemas kini", anda harus menulis nama jadual untuk dikemas kini.
- Anda harus menulis "SET klausa" yang digunakan untuk menulis nama lajur untuk dikemas kini dan nilai yang akan dikemas kini.
- Anda boleh mengemas kini lebih daripada satu lajur. Anda boleh menggunakan koma di antara setiap baris.
- Anda boleh menentukan klausa WHERE untuk menentukan beberapa baris sahaja. Hanya baris yang dinilai oleh ungkapan menjadi benar yang dikemas kini. Sekiranya anda tidak menentukan klausa DI MANA, semua baris akan dikemas kini.
Contoh Kemas kini SQLite
Dalam pernyataan UPDATE berikut, kami akan mengemas kini DepartmentId untuk Student with StudentId = 6 menjadi 3:
Pelajar KEMASKINISET DepartmentId = 3MANA StudentId = 6;
Ini mesti berjalan dengan jayanya dan anda tidak seharusnya mendapat output:
Dalam klausa UPDATE, kami menyatakan bahawa kami ingin mengemas kini jadual Pelajar.
- Dalam klausa DI MANA, kami menyaring semua pelajar untuk memilih baris hanya untuk StudentId = 6.
- Klausa SET akan mengemas kini nilai Id Jabatan untuk pelajar terpilih menjadi 3.
Sekarang, mari kita sahkan bahawa pelajar dengan ID 6 dikemas kini, dengan menjalankan perintah berikut:
PILIH * DARI Pelajar DI MANA StudentId = 6;
Anda sekarang harus melihat bahawa nilai Id Jabatan sekarang 3 seperti berikut:
Padam SQLite
Pertanyaan SQLite DELETE digunakan untuk membuang rekod yang ada dari jadual yang ditentukan. Anda boleh menggunakan klausa DI MANA dengan pertanyaan HAPUS untuk menghapus baris yang dipilih.
Klausa HAPUS mempunyai sintaks berikut:
- Anda mesti menulis nama jadual selepas klausa DELETE FROM, dari mana anda mahu memadam rekod. ( Catatan: bahawa klausa DELETE digunakan untuk menghapus beberapa rekod dari jadual atau menghapus semua rekod dan tidak akan menghapus jadual itu sendiri. Walau bagaimanapun, klausa DROP digunakan untuk menghapus seluruh jadual dengan semua catatan di atasnya. )
- Sekiranya anda menulis klausa HAPUS seperti ini "HAPUS DARI guru", ini akan menghapus semua rekod dari jadual "guru".
- Anda boleh menentukan keadaan DI MANA dengan ungkapan jika anda ingin menghapus beberapa baris tertentu. Hanya baris yang dinyatakan oleh ungkapan menjadi benar yang akan dihapuskan. Contohnya, "HAPUS DARI guru DI MANA id> 5" - ini hanya akan memadam rekod yang mempunyai id yang lebih besar daripada 5.
Contohnya
Dalam pernyataan berikut, kami akan memadamkan dua pelajar dengan StudentId 11 dan 12:
HAPUSKAN DARI Pelajar DI MANA StudentId = 11 ATAU StudentId = 12;
Ungkapan " StudentId = 11 ATAU StudentId = 12 " akan berlaku hanya untuk pelajar dengan Id 11 dan 12. Oleh itu, klausa DELETE akan digunakan pada kedua-duanya dan akan menghapusnya sahaja.
Perintah ini harus berjaya dijalankan dan anda tidak akan mendapat output seperti berikut:
Anda boleh mengesahkan bahawa kedua-dua pelajar telah dipadamkan, dengan memilih semua rekod dari jadual Pelajar seperti berikut:
PILIH * DARI Pelajar;
Anda tidak boleh melihat kedua-dua pelajar dengan id 11 dan 12 seperti berikut:
Klausa Konflik SQLite
Katakan anda mempunyai lajur yang mempunyai salah satu kekangan lajur berikut: TIDAK BENAR, BUKAN NULL, SEMAK, atau KUNCI PERDANA. Dan kemudian anda cuba memasukkan atau mengemas kini nilai pada lajur itu dengan nilai yang bertentangan dengan kekangan ini.
Contohnya, jika lajur mempunyai kekangan UNIK dan anda cuba memasukkan nilai yang sudah ada (nilai pendua), yang bertentangan dengan kekangan UNIK. Kemudian klausa KONFLIK membolehkan anda memilih apa yang harus dilakukan dalam kes seperti ini untuk menyelesaikan konflik ini.
Sebelum kita terus menerangkan bagaimana klausa KONFLIK menyelesaikan konflik. Anda harus memahami apa itu transaksi pangkalan data.
Transaksi Pangkalan Data:
Istilah transaksi pangkalan data adalah senarai operasi SQLite (masukkan atau kemas kini atau hapus). Urus niaga pangkalan data mesti dilaksanakan sebagai satu unit, sama ada semua operasi yang dijalankan berjaya atau tidak sama sekali. Semua operasi akan dibatalkan sekiranya salah satu daripadanya gagal dilaksanakan.
Contoh transaksi pangkalan data:
Urus niaga untuk memindahkan wang dari satu akaun bank ke yang lain akan melibatkan beberapa aktiviti. Operasi transaksi ini merangkumi pengeluaran wang dari akaun pertama, dan memasukkannya ke akaun lain. Urus niaga ini mesti diselesaikan sepenuhnya atau dibatalkan sepenuhnya dan tidak gagal di pertengahan jalan.
Berikut adalah senarai lima resolusi yang boleh anda pilih dalam klausa KONFLIK:
- ROLLBACK - ini akan mengembalikan transaksi di mana pernyataan SQLite semasa yang mempunyai konflik (ia akan membatalkan keseluruhan transaksi). Sebagai contoh, jika anda cuba mengemas kini 10 baris, dan baris kelima mempunyai nilai yang bertentangan dengan kekangan, maka tidak ada baris yang akan dikemas kini, 10 baris akan tetap sama. Kesalahan akan dilemparkan.
- ABORT - ini akan membatalkan (membatalkan) pernyataan SQLite semasa sahaja yang mempunyai konflik dan transaksi tidak akan dibatalkan. Contohnya, jika anda cuba mengemas kini 10 baris, dan baris kelima mempunyai nilai yang bertentangan dengan kekangan, maka hanya nilai kelima yang tidak akan dikemas kini tetapi 9 baris lain akan dikemas kini. Kesalahan akan dilemparkan.
- FAIL - membatalkan pernyataan SQLite semasa yang mempunyai konflik. Walau bagaimanapun, transaksi tidak akan diteruskan tetapi perubahan sebelumnya yang dilakukan pada baris sebelum baris yang memiliki konflik akan dilakukan. Sebagai contoh, jika anda cuba mengemas kini 10 baris, dan baris kelima mempunyai nilai yang bertentangan dengan kekangan, maka hanya 4 baris yang akan dikemas kini dan yang lain tidak akan. Kesalahan akan dilemparkan.
- SAMPAI - ini akan melangkau baris yang mengandungi pelanggaran kekangan dan terus memproses baris berikut dari pernyataan SQLite. Sebagai contoh, jika anda cuba mengemas kini 10 baris, dan baris kelima mempunyai nilai yang bertentangan dengan kekangan, maka hanya 4 baris yang akan dikemas kini dan yang lain tidak akan. Tidak akan terus maju untuk mengemas kini baris lain dan berhenti di baris yang mempunyai nilai konflik. Tiada kesalahan yang akan dilemparkan.
- GANTI - ia bergantung pada jenis kekangan yang mempunyai pelanggaran:
- Apabila terdapat pelanggaran kekangan untuk kekangan KUNCI UNIK atau PRIMER. REPLACE akan menggantikan baris yang menyebabkan pelanggaran dengan baris yang baru dimasukkan atau dikemas kini.
- Apabila terdapat pelanggaran kekangan NOT NULL, klausa REPLACE akan menggantikan nilai NULL dengan nilai lalai lajur itu. Sekiranya lajur tidak mempunyai nilai lalai, maka SQLite akan membatalkan pernyataan (pernyataan akan dibatalkan)
- JIKA pelanggaran kekangan CHECK berlaku, klausa akan dibatalkan.
Catatan: 5 resolusi di atas adalah pilihan bagaimana anda mahu menyelesaikan konflik. Mungkin tidak semestinya apa yang berlaku untuk menyelesaikan satu konflik berlaku untuk menyelesaikan jenis konflik lain.
Cara menyatakan klausa KONFLIK
Anda boleh menyatakan klausa ON CONFLICT semasa anda menentukan batasan untuk definisi lajur dalam klausa CREATE TABLE. Menggunakan sintaks berikut:
Anda dapat memilih satu dari lima resolusi untuk menyelesaikan konflik seperti yang dijelaskan sebelumnya.
ON CONFLICT IGNORE Contoh
Langkah 1) Buat subjek jadual baru seperti berikut:
BUAT JADUAL [Subjek] ([SubjectId] INTEGER TIDAK NILAI KUNCI PRIMER DI KONFLIK SAMBIL,[SubjectName] NVARCHAR BUKAN NULL);
Perhatikan bahawa kita telah menentukan kekangan UTAMA PRIMARY pada ruangan SubjectId. Kekangan kunci utama tidak akan membenarkan dua nilai pendua dimasukkan ke dalam lajur SubjectId sehingga semua nilai dalam lajur itu harus unik. Juga, perhatikan bahawa kami memilih penyelesaian konflik untuk menjadi " MENCARI ".
Perintah harus berjaya dijalankan dan anda tidak seharusnya mendapat sebarang kesalahan:
Langkah 2) Sekarang, mari masukkan beberapa nilai ke dalam subjek jadual baru, tetapi dengan nilai yang melanggar kekangan utama:
MASUKKAN KE NILAI Mata Pelajaran (1, 'Algebra');MASUKKAN NILAI Mata Pelajaran (2, 'Kursus Pangkalan Data');MASUKKAN NILAI Mata Pelajaran (2, 'Struktur Data');MASUKKAN NILAI Mata Pelajaran (4, 'Algoritma');
Dalam pernyataan INSERT ini, kami cuba memasukkan dua kursus dengan id Subjek Utama Utama yang sama, yang merupakan pelanggaran terhadap kekangan kunci utama.
Perintah harus berjalan dengan baik dan anda tidak seharusnya mendapat kesalahan. Seperti berikut:
Langkah 3) Pilih semua subjek dari jadual seperti berikut:
PILIH * DARI Subjek;
Ini akan memberi anda senarai subjek:
Perhatikan bahawa hanya tiga mata pelajaran yang disisipkan " Algebra, Database Course, and Algorithms " dan bukannya 4 baris.
Baris yang mempunyai nilai yang melanggar kekangan kunci utama, iaitu "Struktur Data" diabaikan dan tidak dimasukkan. Walau bagaimanapun, SQLite terus melaksanakan pernyataan lain selepas baris tersebut.
Langkah 4) HAPUS subjek subjek untuk membuatnya lagi dengan klausa ON CONFLICT yang berbeza untuk contoh berikut dengan menjalankan perintah berikut:
MATLAMAT JADUAL Mata Pelajaran;
Perintah drop memadamkan keseluruhan jadual. Subjek Jadual sekarang tidak ada.
ON CONFLICT REPLACE Contoh
Langkah 1) Buat subjek jadual baru seperti berikut:
BUAT JADUAL [Subjek] ([SubjectId] INTEGER BUKAN KUNCI PRIMER NULL PADA GANTI KONFLIK,[SubjectName] NVARCHAR BUKAN NULL);
Perhatikan bahawa kami menentukan kekangan KUNCI PRIMER pada ruangan SubjectId. Kekangan kunci utama tidak akan membenarkan dua nilai pendua dimasukkan ke dalam lajur SubjectId sehingga semua nilai dalam lajur itu harus unik.
Juga, perhatikan bahawa kami memilih pilihan penyelesaian konflik untuk menjadi " REPLACE ". Perintah harus berjaya dijalankan dan anda tidak seharusnya mendapat sebarang kesalahan:
Langkah 2) Sekarang, mari masukkan beberapa nilai ke dalam Subjek jadual baru, tetapi dengan nilai yang melanggar kekangan utama:
MASUKKAN KE NILAI Mata Pelajaran (1, 'Algebra');MASUKKAN NILAI Mata Pelajaran (2, 'Kursus Pangkalan Data');MASUKKAN NILAI Mata Pelajaran (2, 'Struktur Data');MASUKKAN NILAI Mata Pelajaran (4, 'Algoritma');
Dalam pernyataan INSERT ini, kami cuba memasukkan dua kursus dengan id Subjek Utama Utama yang sama, yang merupakan pelanggaran terhadap kekangan kunci utama.
Perintah harus berjalan dengan baik dan anda tidak seharusnya mendapat kesalahan. Seperti berikut:
Langkah 3) Pilih semua subjek dari jadual seperti berikut:
PILIH * DARI Subjek;
Ini akan memberi anda senarai subjek:
Perhatikan bahawa hanya tiga subjek yang disisipkan " Algebra, Struktur Data, dan Algoritma " sedangkan kami cuba memasukkan 4 baris.
Baris yang mempunyai nilai yang melanggar kekangan kunci utama, yaitu " Struktur Data " menggantikan nilai " Kursus Pangkalan Data " sebagai berikut:
- Dua penyataan sisipan pertama berjalan lancar tanpa masalah. Dua mata pelajaran Aljabar, dan Kursus Pangkalan Data akan disisipkan dengan id 1, 2.
- Apabila SQLite cuba menjalankan pernyataan sisipan ketiga dengan SubjectId 2 dan SubjectName " Struktur Data ", ia mendapati bahawa sudah ada subjek dengan SubjectId = 2. Yang merupakan pelanggaran terhadap kekangan kunci utama yang ditentukan pada lajur SubjectId.
- SQLite akan memilih penyelesaian GANTI untuk konflik ini. Ia menggantikan nilai yang sudah ada dalam jadual subjek dengan nilai baru dari pernyataan sisipan. Jadi, SubjectName " Kursus Pangkalan Data " akan digantikan dengan " Data Struktur " SubjectName.
Ringkasan:
Klausa INSERT, UPDATE, dan DELETE digunakan untuk mengubahsuai data dalam pangkalan data SQLite. Klausa KONFLIK adalah klausa yang kuat untuk menyelesaikan sebarang konflik antara data dan data yang akan diubah suai.