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

⚡ Έξυπνη Σύνοψη

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

  • 📝 ΕΙΣΑΓΕΤΕ: Η πρόταση INSERT προσθέτει μία ή περισσότερες νέες γραμμές, παραθέτοντας τις στήλες-στόχους και τις τιμές τους με τον όρο VALUES.
  • ΕΚΣΥΓΧΡΟΝΊΖΩ: Η εντολή UPDATE αλλάζει τις υπάρχουσες τιμές στηλών, χρησιμοποιώντας την εντολή SET για νέα δεδομένα και την εντολή WHERE για να στοχεύσει συγκεκριμένες γραμμές.
  • 🗑️ ΔΙΑΓΡΑΦΩ: Η πρόταση DELETE αφαιρεί γραμμές που ταιριάζουν με μια συνθήκη WHERE ή κάθε γραμμή όταν παραλείπεται η ρήτρα WHERE.
  • ⚠️ Ρήτρα Σύγκρουσης: Η ρήτρα ON CONCLICT επιλύει παραβιάσεις περιορισμών μέσω ROLLBACK, ABORT, FAIL, IGNORE ή REPLACE.
  • 🔁 συναλλαγές: Μια συναλλαγή βάσης δεδομένων ομαδοποιεί πολλές λειτουργίες σε μία μονάδα που είτε την ολοκληρώσει πλήρως είτε την ακυρώσει πλήρως.
  • 🤖 Βοήθεια AI: Εργαλεία τεχνητής νοημοσύνης για μετατροπή κειμένου σε SQL και GitHub Copilot δημιουργούν SQLite Δηλώσεις INSERT, UPDATE και DELETE από εντολές απλής αγγλικής γλώσσας.

SQLite ΕΙΣΑΓΩΓΗ, ΕΝΗΜΕΡΩΣΗ, ΔΙΑΓΡΑΦΗ ερωτήματος

Εισαγωγή, Ενημέρωση και Διαγραφή Ερωτήματος σε SQLite

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

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

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

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

Παράδειγμα

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

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

Η έκφραση «StudentId = 11 Ή StudentId = 12» θα ισχύει μόνο για φοιτητές με Ids 11 και 12. Επομένως, η ρήτρα DELETE θα εφαρμοστεί και στους δύο και θα τους διαγράψει μόνο.

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

SQLite Διαγραφή

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

SELECT * FROM Students;

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

SQLite Διαγραφή

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

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

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

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

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

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

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

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

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

  1. ROLLBACK – αυτό θα ακυρώσει τη συναλλαγή στην οποία η τρέχουσα SQLite δήλωση που έχει τη διένεξη (θα ακυρώσει ολόκληρη τη συναλλαγή). Για παράδειγμα, εάν προσπαθείτε να ενημερώσετε 10 σειρές και η πέμπτη σειρά έχει μια τιμή που έρχεται σε αντίθεση με έναν περιορισμό, τότε δεν θα ενημερωθούν καμία σειρά, οι 10 σειρές θα παραμείνουν ίδιες. Θα εμφανιστεί ένα σφάλμα.
  2. ΑΚΥΡΩΣΗ – αυτό θα διακόψει (ακυρώσει) την τρέχουσα SQLite δήλωση μόνο που έχει τη διένεξη και η συναλλαγή δεν θα ακυρωθεί. Για παράδειγμα, εάν προσπαθείτε να ενημερώσετε 10 σειρές και η πέμπτη σειρά έχει μια τιμή που έρχεται σε σύγκρουση με έναν περιορισμό, τότε μόνο η πέμπτη τιμή δεν θα ενημερωθεί αλλά οι άλλες 9 σειρές θα ενημερωθούν. Θα εμφανιστεί ένα σφάλμα.
  3. ΑΠΟΤΥΧΙΑ – διακόπτει την τρέχουσα SQLite δήλωση που έχει τη σύγκρουση. Ωστόσο, η συναλλαγή δεν θα συνεχιστεί, αλλά οι προηγούμενες αλλαγές που έγιναν σε σειρές πριν από τη σειρά που έχει τη διένεξη θα πραγματοποιηθούν. Για παράδειγμα, εάν προσπαθείτε να ενημερώσετε 10 σειρές και η πέμπτη σειρά έχει μια τιμή που έρχεται σε αντίθεση με έναν περιορισμό, τότε μόνο οι 4 σειρές θα ενημερωθούν και η άλλη όχι. Θα εμφανιστεί ένα σφάλμα.
  4. IGNORE – αυτό θα παραλείψει τη γραμμή που περιέχει την παραβίαση περιορισμού και θα συνεχίσει την επεξεργασία των άλλων επόμενων γραμμών του SQLite δήλωση. Για παράδειγμα, εάν προσπαθείτε να ενημερώσετε 10 σειρές και η πέμπτη σειρά έχει μια τιμή που έρχεται σε αντίθεση με έναν περιορισμό, τότε μόνο οι 4 σειρές θα ενημερωθούν και η άλλη όχι. Δεν θα προχωρήσει περαιτέρω στην ενημέρωση άλλων σειρών και θα σταματήσει στη σειρά που έχει την τιμή διένεξης. Δεν θα γίνει κανένα σφάλμα.
  5. ΑΝΤΙΚΑΤΑΣΤΑΣΗ – εξαρτάται από τον τύπο του περιορισμού που έχει την παραβίαση:
    • Όταν υπάρχει παραβίαση περιορισμού για τον περιορισμό ΜΟΝΑΔΙΚΟ ή ΚΥΡΙΟ ΚΛΕΙΔΙ. Το 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. Έτσι, το SubjectName του "Database Course" θα αντικατασταθεί με το SubjectName του "Data Structures".

Συχνές Ερωτήσεις

Το UPSERT συνδυάζει την εισαγωγή και την ενημέρωση. Από τότε που το UPSERT συνδυάζει την εισαγωγή και την ενημέρωση. SQLite 3.24.0 (2018), ΕΙΣΑΓΩΓΗ ΣΕ … ΣΕ ΣΥΓΚΡΟΥΣΗ(στήλη) DO UPDATE SET … εισάγει μια νέα γραμμή ή ενημερώνει την υπάρχουσα όταν προκύπτει διένεξη ΜΟΝΑΔΙΚΟΥ ή ΠΡΩΤΕΥΟΝΤΟΣ ΚΛΕΙΔΙΟΥ. Η εντολή DO NOTHING παραλείπει τη γραμμή σιωπηλά.

Η εντολή ΕΙΣΑΓΩΓΗ Ή ΑΝΤΙΚΑΤΑΣΤΑΣΗ διαγράφει τη γραμμή που βρίσκεται σε διένεξη και εισάγει μια νέα, επομένως οι στήλες που δεν αναφέρονται επανέρχονται στις προεπιλεγμένες τιμές τους. Η εντολή ΕΝΗΜΕΡΩΣΗ ΣΕ ΠΕΡΙΠΤΩΣΗ ΣΥΓΚΡΟΥΣΗΣ επεξεργάζεται την υπάρχουσα γραμμή στη θέση της, διατηρώντας την.ping άλλες στήλες άθικτες, γεγονός που το καθιστά την ασφαλέστερη αληθινή ανατροπή.

Παραθέστε αρκετές ομάδες τιμών μετά τις ΤΙΜΕΣ, διαχωρισμένες με κόμματα: ΕΙΣΑΓΩΓΗ ΣΤΟ Φοιτητές (id, name) ΤΙΜΕΣ (1,'A'), (2,'B'), (3,'C');. Αυτή η φόρμα πολλαπλών γραμμών λειτουργεί από SQLite 3.7.11 και είναι ταχύτερη από την εκτέλεση μίας εντολής INSERT ανά γραμμή.

Εκτελέστε την εντολή DELETE FROM table_name; χωρίς την ρήτρα WHERE. SQLite Δεν έχει εντολή TRUNCATE, αλλά εφαρμόζει μια βελτιστοποίηση περικοπής που καταργεί όλες τις γραμμές ταυτόχρονα. Η δομή του πίνακα παραμένει. Χρησιμοποιήστε την εντολή DROP TABLE για να καταργήσετε εντελώς τον πίνακα.

Από SQLite 3.35.0 (2021), οι INSERT, UPDATE και DELETE δέχονται μια προαιρετική ρήτρα RETURNING που εμφανίζει τις επηρεαζόμενες γραμμές. Για παράδειγμα, η INSERT … RETURNING id; επιστρέφει αμέσως τις τιμές που δημιουργήθηκαν, αποφεύγοντας μια ξεχωριστή εντολή SELECT για την ανάγνωση των αλλαγών.

Χρησιμοποιήστε την εντολή INSERT INTO … ΕΠΙΛΟΓΗ: INSERT INTO Archive (id, name) SELECT id, name FROM Students WHERE DepartmentId = 4;. SQLite εισάγει κάθε γραμμή που επιστρέφει η συνάρτηση SELECT, επομένως η σειρά και ο αριθμός των στηλών πρέπει να ταιριάζουν με τον πίνακα προορισμού.

Ναι. Οι βοηθοί τεχνητής νοημοσύνης για τη μετατροπή κειμένου σε SQL μετατρέπουν αιτήματα σε απλά αγγλικά σε SQLite Δηλώσεις INSERT, UPDATE και DELETE, συμπεριλαμβανομένων των ρητρών WHERE και ON CONFLICT. Η παροχή των ονομάτων των πινάκων και των στηλών βελτιώνει την ακρίβεια και κάθε δημιουργούμενη δήλωση θα πρέπει να ελέγχεται και να δοκιμάζεται πριν από την εκτέλεση σε πραγματικά δεδομένα.

GitHub Copilot προτείνει SQLite Ερωτήματα ΕΙΣΑΓΩΓΗΣ, ΕΝΗΜΕΡΩΣΗΣ και ΔΙΑΓΡΑΦΗΣ ενσωματωμένα σε προγράμματα επεξεργασίας όπως VS CodeΔιαβάζει κοντινά σχήματα και σχόλια, επομένως οι συμπληρώσεις επαναχρησιμοποιούν τα πραγματικά ονόματα πινάκων και στηλών σας, αλλά θα πρέπει να επαληθεύετε κάθε πρόταση πριν από την εκτέλεση.

Συνοψίστε αυτήν την ανάρτηση με: