SQLite ΕΙΣΑΓΩΓΗ, ΕΝΗΜΕΡΩΣΗ, ΔΙΑΓΡΑΦΗ Ερώτημα με Παράδειγμα

Οι ρήτρες τροποποίησης δεδομένων σε SQLite είναι δηλώσεις INSERT, UPDATE και DELETE. Χρησιμοποιείται για την εισαγωγή νέων σειρών, την ενημέρωση υπαρχουσών τιμών ή τη διαγραφή σειρών από τη βάση δεδομένων.

Σημειώστε ότι, για όλα τα ακόλουθα παραδείγματα, πρέπει να εκτελέσετε το sqlite3.exe και να ανοίξετε μια σύνδεση με το δείγμα βάσης δεδομένων ως ρέουσα:

Βήμα 1) Στο στάδιο αυτό,

  1. Ανοίξτε τον Υπολογιστή μου και μεταβείτε στον ακόλουθο κατάλογο "C:\sqlite" και
  2. Στη συνέχεια ανοίξτε "sqlite3.exe"

SQLite Ερώτημα - ΕΙΣΑΓΩΓΗ, ΕΝΗΜΕΡΩΣΗ, ΔΙΑΓΡΑΦΗ

Βήμα 2) Ανοίξτε τη βάση δεδομένων "TutorialsSampleDB.db” με την ακόλουθη εντολή:

.open TutorialsSampleDB.db

SQLite Ερώτημα - ΕΙΣΑΓΩΓΗ, ΕΝΗΜΕΡΩΣΗ, ΔΙΑΓΡΑΦΗ

Τώρα είστε έτοιμοι να εκτελέσετε οποιοδήποτε τύπο ερωτήματος στη βάση δεδομένων.

SQLite ΕΝΘΕΤΟ

SQLite Το INSERT χρησιμοποιείται για την εισαγωγή εγγραφών σε έναν καθορισμένο πίνακα της βάσης δεδομένων. πρέπει να χρησιμοποιήσετε την ρήτρα «INSERT». Η σύνταξη της πρότασης INSERT είναι η εξής:

SQLite ΕΝΘΕΤΟ

  • Μετά τον όρο INSERT, θα πρέπει να δηλώσετε σε ποιον πίνακα πρέπει να εισαγάγετε τις τιμές.
  • Μετά το όνομα του πίνακα που γράφετε τη λίστα των στηλών, θέλετε να εισαγάγετε τις τιμές.
  • Μπορείτε να αγνοήσετε το όνομα των στηλών και να μην γράψετε σε αυτές.
  • Εάν δεν γράψετε το όνομα των στηλών, οι τιμές θα εισαχθούν σε όλες τις στήλες που βρίσκονται στον πίνακα με την ίδια σειρά, οι στήλες ορίζονται στον πίνακα.
  • Μετά τον όρο VALUES, θα πρέπει να παραθέσετε τις τιμές που θα εισαχθούν.
  • Κάθε όρος INSERT εισάγει μόνο μία σειρά. Εάν θέλετε να εισαγάγετε πολλές σειρές, θα πρέπει να γράψετε πολλές προτάσεις INSERT, μία για κάθε σειρά.

SQLite Εισαγωγή παραδείγματος

Στο παρακάτω παράδειγμα, θα εισαγάγουμε 2 σειρές στον πίνακα μαθητών, μία για κάθε μαθητή:

INSERT INTO Students(StudentId, StudentName, DepartmentId, DateOfBirth)
              VALUES(11, 'Ahmad', 4, '1997-10-12');

INSERT INTO Students VALUES(12, 'Aly', 4, '1996-10-12');

Αυτό θα πρέπει να εκτελεστεί με επιτυχία και δεν υπάρχει έξοδος για αυτό:

SQLite Κύριο θέμα

Αυτό θα εισάγει δύο μαθητές:

  • Ο πρώτος μαθητής με StudentId=11, StudentName = Ahmad, DepartmentId = 4 και DateOfBirth = 1997-10-12.
  • Ο δεύτερος μαθητής με StudentId=12, StudentName = Aly, DepartmentId = 4 και DateOfBirth = 1996-10-12′.

Στην πρώτη δήλωση, παραθέσαμε τα ονόματα των στηλών "StudentId, StudentName, DepartmentId, DateOfBirth«.Ωστόσο, στη δεύτερη δήλωση, δεν το κάναμε.

Οι τέσσερις αξίες»12, 'Aly', 4, '1996-10-12'” θα εισαχθεί και στις τέσσερις στήλες του πίνακα Students με την ίδια σειρά που ορίζονται οι στήλες.

Τώρα, ας επαληθεύσουμε ότι οι δύο μαθητές εισήχθησαν στον πίνακα Students εκτελώντας τα παρακάτω απορία:

SELECT * FROM Students;

Στη συνέχεια, θα πρέπει να δείτε τους δύο μαθητές που επέστρεψαν από αυτό το ερώτημα ως εξής:

SQLite Κύριο θέμα

SQLite Ενημέρωση

SQLite Το ερώτημα UPDATE χρησιμοποιείται για την τροποποίηση των υπαρχουσών εγγραφών σε έναν πίνακα. Μπορείτε να χρησιμοποιήσετε τον όρο WHERE με το ερώτημα UPDATE για να ενημερώσετε επιλεγμένες σειρές. Η ρήτρα UPDATE ενημερώνει έναν πίνακα αλλάζοντας μια τιμή για μια συγκεκριμένη στήλη. Ακολουθεί η σύνταξη της ρήτρας UPDATE:

SQLite Ενημέρωση

Ως εξής:

  • Μετά την «ρήτρα ενημέρωσης», θα πρέπει να γράψετε το όνομα του πίνακα για ενημέρωση.
  • Πρέπει να γράψετε "SET clause" που χρησιμοποιείται για να γράψετε το όνομα της στήλης για ενημέρωση και την τιμή που θα ενημερωθεί.
  • Μπορείτε να ενημερώσετε περισσότερες από μία στήλες. Μπορείτε να χρησιμοποιήσετε κόμμα μεταξύ κάθε γραμμής.
  • Μπορείτε να καθορίσετε μια ρήτρα WHERE για να καθορίσετε μόνο ορισμένες σειρές. Ενημερώνονται μόνο οι σειρές που η έκφραση αξιολογεί ως true. Εάν δεν καθορίσατε μια ρήτρα WHERE, όλες οι σειρές θα ενημερωθούν.

SQLite Παράδειγμα ενημέρωσης

Στην ακόλουθη δήλωση UPDATE, θα ενημερώσουμε το DepartmentId για τον Student με StudentId = 6 σε 3:

UPDATE Students
SET DepartmentId = 3 
WHERE StudentId = 6;

Αυτό θα πρέπει να εκτελεστεί με επιτυχία και δεν θα πρέπει να λάβετε καμία έξοδο:

SQLite Ενημέρωση

Στην ρήτρα UPDATE, καθορίσαμε ότι θέλουμε να ενημερώσουμε τον πίνακα Students.

  • Στην πρόταση WHERE, φιλτράραμε όλους τους μαθητές για να επιλέξουμε μόνο τη σειρά για StudentId = 6.
  • Η ρήτρα SET θα ενημερώσει την τιμή του αναγνωριστικού τμήματος για τους επιλεγμένους μαθητές σε 3.

Τώρα, ας επαληθεύσουμε ότι ο μαθητής με ID 6 είναι ενημερωμένος, εκτελώντας την ακόλουθη εντολή:

SELECT * FROM Students WHERE StudentId = 6;

Θα πρέπει τώρα να δείτε ότι η τιμή Αναγνωριστικό Τμήματος είναι τώρα 3 ως εξής:

SQLite Ενημέρωση

SQLite Διαγραφή

SQLite Το ερώτημα DELETE χρησιμοποιείται για την αφαίρεση υπαρχουσών εγγραφών από έναν καθορισμένο πίνακα. Μπορείτε να χρησιμοποιήσετε τον όρο WHERE με ερωτήματα DELETE για να διαγράψετε τις επιλεγμένες σειρές.

Η πρόταση DELETE έχει την ακόλουθη σύνταξη:

SQLite Διαγραφή

  • Πρέπει να γράψετε ένα όνομα πίνακα μετά την πρόταση DELETE FROM, από την οποία θέλετε να διαγράψετε εγγραφές. (Σημείωση: ότι η ΔΙΑΓΡΑΦΗ ρήτρας χρησιμοποιείται για τη διαγραφή ορισμένων εγγραφών από έναν πίνακα ή τη διαγραφή όλων των εγγραφών και δεν θα διαγράψει τον ίδιο τον πίνακα. Ωστόσο, το Ρήτρα ΑΠΟΡΡΙΨΗΣ χρησιμοποιείται για τη διαγραφή ολόκληρου του πίνακα με όλες τις εγγραφές σε αυτόν.)
  • Εάν γράψετε την ρήτρα ΔΙΑΓΡΑΦΗ όπως αυτή "ΔΙΑΓΡΑΦΗ ΑΠΟ γκουρού", αυτό θα διαγράψει όλες τις εγγραφές από τον πίνακα "γκουρού".
  • Μπορείτε να καθορίσετε μια συνθήκη WHERE με μια έκφραση εάν θέλετε να διαγράψετε ορισμένες συγκεκριμένες σειρές. Μόνο οι σειρές για τις οποίες η έκφραση αξιολογείται ως true θα διαγραφούν. Για παράδειγμα, "ΔΙΑΓΡΑΦΗ ΑΠΟ τον γκουρού WHERE id > 5" - αυτό θα διαγράψει μόνο τις εγγραφές που έχουν αναγνωριστικό μεγαλύτερο από 5.

Παράδειγμα

Στην παρακάτω δήλωση, θα διαγράψουμε δύο μαθητές με StudentId 11 και 12:

DELETE FROM Students WHERE StudentId = 11 OR StudentId = 12;

Η έκφραση "StudentId = 11 Ή StudentId = 12” θα ισχύει μόνο για μαθητές με αναγνωριστικά 11 και 12. Έτσι η ρήτρα ΔΙΑΓΡΑΦΗ θα εφαρμοστεί και στα δύο και θα τους διαγράψει μόνο.

Αυτή η εντολή θα πρέπει να εκτελείται με επιτυχία και δεν θα πρέπει να λαμβάνετε καμία έξοδο ως εξής:

SQLite Διαγραφή

Μπορείτε να επαληθεύσετε ότι οι δύο μαθητές διαγράφηκαν, επιλέγοντας όλες τις εγγραφές από τον πίνακα Students ως εξής:

SELECT * FROM Students;

Δεν πρέπει να βλέπετε τους δύο μαθητές με αναγνωριστικά 11 και 12 ως εξής:

SQLite Διαγραφή

SQLite Ρήτρα σύγκρουσης

Ας υποθέσουμε ότι έχετε μια στήλη που έχει έναν από τους ακόλουθους περιορισμούς στηλών: ΜΟΝΑΔΙΚΟ, ΟΧΙ NULL, ΕΛΕΓΧΟΣ ή ΚΥΡΙΟ ΚΛΕΙΔΙ. Στη συνέχεια, προσπαθήσατε να εισαγάγετε ή να ενημερώσετε μια τιμή σε αυτήν τη στήλη με μια τιμή που έρχεται σε διένεξη με αυτόν τον περιορισμό.

Για παράδειγμα, εάν μια στήλη έχει έναν περιορισμό UNIQUE και προσπαθήσατε να εισαγάγετε μια τιμή που υπάρχει ήδη (μια διπλή τιμή), η οποία έρχεται σε διένεξη με τον περιορισμό UNIQUE. Στη συνέχεια, η ρήτρα CONFLICT σάς επιτρέπει να επιλέξετε τι να κάνετε σε τέτοιες περιπτώσεις για να επιλύσετε αυτήν τη διένεξη.

Πριν συνεχίσουμε να εξηγούμε πώς η ρήτρα CONFLICT επιλύει τη σύγκρουση. Θα πρέπει να καταλάβετε τι είναι μια συναλλαγή βάσης δεδομένων.

Συναλλαγή βάσης δεδομένων

Ο όρος συναλλαγή βάσης δεδομένων είναι μια λίστα με SQLite λειτουργίες (εισαγωγή ή ενημέρωση ή διαγραφή). Η συναλλαγή της βάσης δεδομένων πρέπει να εκτελεστεί ως μία μονάδα, είτε όλες οι λειτουργίες εκτελούνται με επιτυχία είτε καθόλου. Όλες οι λειτουργίες θα ακυρωθούν εάν μία από αυτές δεν εκτελεστεί.

Παράδειγμα για μια συναλλαγή βάσης δεδομένων

Η συναλλαγή για τη μεταφορά χρημάτων από έναν τραπεζικό λογαριασμό σε έναν άλλο θα περιλαμβάνει μερικές δραστηριότητες. Αυτή η συναλλαγή περιλαμβάνει την ανάληψη χρημάτων από τον πρώτο λογαριασμό και την κατάθεσή τους σε άλλο λογαριασμό. Αυτή η συναλλαγή πρέπει να ολοκληρωθεί πλήρως ή να ακυρωθεί πλήρως και να μην αποτύχει στα μισά του δρόμου.

Ακολουθεί η λίστα των πέντε αναλύσεων που μπορείτε να επιλέξετε στη ρήτρα CONFLICT:

  1. ΕΠΑΝΑΦΟΡΑ – αυτό θα επαναφέρει τη συναλλαγή στην οποία η τρέχουσα SQLite δήλωση που έχει τη διένεξη (θα ακυρώσει ολόκληρη τη συναλλαγή). Για παράδειγμα, εάν προσπαθείτε να ενημερώσετε 10 σειρές και η πέμπτη σειρά έχει μια τιμή που έρχεται σε αντίθεση με έναν περιορισμό, τότε δεν θα ενημερωθούν καμία σειρά, οι 10 σειρές θα παραμείνουν ίδιες. Θα εμφανιστεί ένα σφάλμα.
  2. ΚΑΝΩ ΑΠΟΒΟΛΗ – αυτό θα ματαιώσει (ακυρώσει) το ρεύμα SQLite δήλωση μόνο που έχει τη διένεξη και η συναλλαγή δεν θα ακυρωθεί. Για παράδειγμα, εάν προσπαθείτε να ενημερώσετε 10 σειρές και η πέμπτη σειρά έχει μια τιμή που έρχεται σε σύγκρουση με έναν περιορισμό, τότε μόνο η πέμπτη τιμή δεν θα ενημερωθεί αλλά οι άλλες 9 σειρές θα ενημερωθούν. Θα εμφανιστεί ένα σφάλμα.
  3. ΑΠΟΤΥΧΙΑ - ματαιώνει το ρεύμα SQLite δήλωση που έχει τη σύγκρουση. Ωστόσο, η συναλλαγή δεν θα συνεχιστεί, αλλά οι προηγούμενες αλλαγές που έγιναν σε σειρές πριν από τη σειρά που έχει τη διένεξη θα πραγματοποιηθούν. Για παράδειγμα, εάν προσπαθείτε να ενημερώσετε 10 σειρές και η πέμπτη σειρά έχει μια τιμή που έρχεται σε αντίθεση με έναν περιορισμό, τότε μόνο οι 4 σειρές θα ενημερωθούν και η άλλη όχι. Θα εμφανιστεί ένα σφάλμα.
  1. ΑΓΝΟΩ – αυτό θα παρακάμψει τη σειρά που περιέχει την παραβίαση περιορισμών και θα συνεχίσει να επεξεργάζεται τις άλλες ακόλουθες σειρές του SQLite δήλωση. Για παράδειγμα, εάν προσπαθείτε να ενημερώσετε 10 σειρές και η πέμπτη σειρά έχει μια τιμή που έρχεται σε αντίθεση με έναν περιορισμό, τότε μόνο οι 4 σειρές θα ενημερωθούν και η άλλη όχι. Δεν θα προχωρήσει περαιτέρω στην ενημέρωση άλλων σειρών και θα σταματήσει στη σειρά που έχει την τιμή διένεξης. Δεν θα γίνει κανένα σφάλμα.
  1. ΑΝΤΙΚΑΤΑΣΤΑΣΗ – εξαρτάται από τον τύπο του περιορισμού που έχει την παραβίαση:
  • Όταν υπάρχει παραβίαση περιορισμού για τον περιορισμό ΜΟΝΑΔΙΚΟ ή ΚΥΡΙΟ ΚΛΕΙΔΙ. Το REPLACE θα αντικαταστήσει τη σειρά που προκαλεί την παραβίαση με τη νέα σειρά που έχει εισαχθεί ή ενημερωθεί.
  • Όταν υπάρχει παραβίαση περιορισμού NOT NULL, ο όρος REPLACE θα αντικαταστήσει την τιμή NULL με την προεπιλεγμένη τιμή αυτής της στήλης. Εάν η στήλη δεν έχει προεπιλεγμένη τιμή, τότε SQLite θα ακυρώσει τη δήλωση (η δήλωση θα ακυρωθεί)
  • ΑΝ παρουσιαστεί η παραβίαση του περιορισμού CHECK, η ρήτρα θα ματαιωθεί.

Σημείωση: Οι παραπάνω 5 λύσεις είναι επιλογές για το πώς θέλετε να επιλύσετε τη σύγκρουση. Μπορεί να μην είναι απαραίτητα αυτό που ισχύει για την επίλυση μιας σύγκρουσης ισχύει για την επίλυση άλλων τύπων διενέξεων.

Πώς να δηλώσετε τη ρήτρα CONFLICT

Μπορείτε να δηλώσετε τον όρο ON CONFLICT όταν ορίζετε έναν περιορισμό για έναν ορισμό στήλης μέσα στον όρο CREATE TABLE. Χρησιμοποιώντας την ακόλουθη σύνταξη:

SQLite Ρήτρα σύγκρουσης

Μπορείτε να επιλέξετε μία από τις πέντε λύσεις για να επιλύσετε τη διένεξη, όπως εξηγήθηκε προηγουμένως.

ΣΧΕΤΙΚΑ ΜΕ ΤΗ ΣΥΓΚΡΟΥΣΗ ΑΓΝΟΗ Παράδειγμα

Βήμα 1) Δημιουργήστε ένα νέο θέμα πίνακα ως εξής:

CREATE TABLE [Subjects] (  
    [SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT IGNORE,
    [SubjectName] NVARCHAR NOT NULL
);

Σημειώστε ότι έχουμε ορίσει έναν περιορισμό ΚΥΡΙΑ ΚΛΕΙΔΙ στη στήλη SubjectId. Ο περιορισμός του πρωτεύοντος κλειδιού δεν θα επιτρέψει την εισαγωγή δύο διπλότυπων τιμών στη στήλη SubjectId, έτσι ώστε όλες οι τιμές σε αυτήν τη στήλη να είναι μοναδικές. Επίσης, σημειώστε ότι επιλέγουμε μια επίλυση συγκρούσεων ως "ΑΓΝΟΩ".

Η εντολή θα πρέπει να εκτελείται με επιτυχία και δεν πρέπει να λαμβάνετε σφάλματα:

ΣΧΕΤΙΚΑ ΜΕ ΤΗ ΣΥΓΚΡΟΥΣΗ ΑΓΝΟΗ Παράδειγμα

Βήμα 2) Τώρα, ας εισαγάγουμε μερικές τιμές στα νέα θέματα του πίνακα, αλλά με μια τιμή που παραβαίνει τον περιορισμό του πρωτεύοντος κλειδιού:

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');

Σε αυτήν τη δήλωση INSERT, προσπαθήσαμε να εισαγάγουμε δύο μαθήματα με το ίδιο αναγνωριστικό θέματος πρωτεύοντος κλειδιού 2, το οποίο αποτελεί παραβίαση του περιορισμού του πρωτεύοντος κλειδιού.

Οι εντολές θα πρέπει να εκτελούνται μια χαρά και δεν θα πρέπει να λαμβάνετε κανένα σφάλμα. Ως εξής:

ΣΧΕΤΙΚΑ ΜΕ ΤΗ ΣΥΓΚΡΟΥΣΗ ΑΓΝΟΗ Παράδειγμα

Βήμα 3) Επιλέξτε όλα τα θέματα από τον πίνακα ως εξής:

SELECT * FROM Subjects;

Αυτό θα σας δώσει τη λίστα με τα θέματα:

ΣΧΕΤΙΚΑ ΜΕ ΤΗ ΣΥΓΚΡΟΥΣΗ ΑΓΝΟΗ Παράδειγμα

Σημειώστε ότι μόνο τρία θέματα εισήχθησαν "Άλγεβρα, Μάθημα Βάσεων Δεδομένων και Algorithms” αντί για 4 σειρές.

Η σειρά που έχει την τιμή που παραβιάζει τον περιορισμό του πρωτεύοντος κλειδιού, που είναι "Δομές δεδομένων" αγνοήθηκε και δεν εισήχθη. Ωστόσο, SQLite συνεχίζει να εκτελεί άλλες εντολές μετά από αυτήν τη σειρά.

Βήμα 4) ΔΙΑΓΡΑΨΤΕ τα θέματα του πίνακα για να τον δημιουργήσετε ξανά με έναν διαφορετικό όρο ON CONFLICT για το ακόλουθο παράδειγμα, εκτελώντας την ακόλουθη εντολή:

DROP TABLE Subjects;

Η εντολή drop διαγράφει ολόκληρο τον πίνακα. Θέματα πίνακα τώρα δεν υπάρχει.

ΣΧΕΤΙΚΑ ΜΕ ΤΗ ΣΥΓΚΡΟΥΣΗ ΑΝΤΙΚΑΤΑΣΤΗΣΤΕ Παράδειγμα

Βήμα 1) Δημιουργήστε ένα νέο θέμα πίνακα ως εξής:

CREATE TABLE [Subjects] (  
    [SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT REPLACE,
    [SubjectName] NVARCHAR NOT NULL
);

Σημειώστε ότι ορίσαμε έναν περιορισμό ΚΥΡΙΑ ΚΛΕΙΔΙ στη στήλη SubjectId. Ο περιορισμός του πρωτεύοντος κλειδιού δεν θα επιτρέψει την εισαγωγή δύο διπλότυπων τιμών στη στήλη SubjectId, έτσι ώστε όλες οι τιμές σε αυτήν τη στήλη να είναι μοναδικές.

Επίσης, σημειώστε ότι επιλέγουμε μια επιλογή επίλυσης διενέξεων ως "ΑΝΤΙΚΑΤΑΣΤΑΣΗ". Η εντολή θα πρέπει να εκτελείται με επιτυχία και δεν πρέπει να λαμβάνετε σφάλματα:

ΣΧΕΤΙΚΑ ΜΕ ΤΗ ΣΥΓΚΡΟΥΣΗ ΑΝΤΙΚΑΤΑΣΤΗΣΤΕ Παράδειγμα

Βήμα 2) Τώρα, ας εισαγάγουμε ορισμένες τιμές στον νέο πίνακα Θέματα, αλλά με μια τιμή που παραβαίνει τον περιορισμό του πρωτεύοντος κλειδιού:

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');

Σε αυτήν τη δήλωση INSERT, προσπαθήσαμε να εισαγάγουμε δύο μαθήματα με το ίδιο αναγνωριστικό θέματος πρωτεύοντος κλειδιού 2, το οποίο αποτελεί παραβίαση του περιορισμού του πρωτεύοντος κλειδιού.

Οι εντολές θα πρέπει να εκτελούνται μια χαρά και δεν θα πρέπει να λαμβάνετε κανένα σφάλμα. Ως εξής:

ΣΧΕΤΙΚΑ ΜΕ ΤΗ ΣΥΓΚΡΟΥΣΗ ΑΝΤΙΚΑΤΑΣΤΗΣΤΕ Παράδειγμα

Βήμα 3) Επιλέξτε όλα τα θέματα από τον πίνακα ως εξής:

SELECT * FROM Subjects;

Αυτό θα σας δώσει τη λίστα με τα θέματα:

ΣΧΕΤΙΚΑ ΜΕ ΤΗ ΣΥΓΚΡΟΥΣΗ ΑΝΤΙΚΑΤΑΣΤΗΣΤΕ Παράδειγμα

Σημειώστε ότι μόνο τρία θέματα εισήχθησαν "Άλγεβρα, Δομές Δεδομένων και Algorithms” ενώ προσπαθήσαμε να εισάγουμε 4 σειρές.

Η σειρά που έχει την τιμή που παραβιάζει τον περιορισμό του πρωτεύοντος κλειδιού, η οποία είναι "Δομές δεδομένων"αντικατέστησε την τιμή"Μάθημα βάσης δεδομένων” ως εξής:

  • Οι δύο πρώτες δηλώσεις εισαγωγής λειτουργούν κανονικά χωρίς πρόβλημα. Θα εισαχθούν δύο θέματα Άλγεβρα και Μάθημα βάσης δεδομένων με αναγνωριστικά 1, 2.
  • Όταν SQLite προσπαθεί να εκτελέσει την τρίτη πρόταση εισαγωγής με SubjectId 2 και SubjectName "Δομές δεδομένων", διαπιστώνει ότι υπάρχει ήδη ένα θέμα με SubjectId = 2. Αυτό αποτελεί παραβίαση για τον περιορισμό πρωτεύοντος κλειδιού που ορίζεται στη στήλη SubjectId.
  • SQLite θα επιλέξει μια ανάλυση REPLACE για αυτήν τη διένεξη. Αντικαθιστά την τιμή που υπάρχει ήδη στον πίνακα θεμάτων με τη νέα τιμή από την πρόταση εισαγωγής. Ετσι το "Μάθημα βάσης δεδομένων"Το όνομα θέματος θα αντικατασταθεί με "Δομές δεδομένων” Όνομα θέματος.

Σύνοψη

Οι όροι INSERT, UPDATE και DELETE χρησιμοποιούνται για την τροποποίηση των δεδομένων στο SQLite βάσεις δεδομένων. Η ρήτρα CONFLICT είναι μια ισχυρή ρήτρα για την επίλυση τυχόν σύγκρουσης μεταξύ των δεδομένων και των δεδομένων προς τροποποίηση.