SQLite Προβολές, Ευρετήριο & Ενεργοποιητής με Παράδειγμα

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

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

  • 👁️ Εμφανίσεις: Μια προβολή είναι ένας λογικός πίνακας που δημιουργείται από μια πρόταση SELECT, επιτρέποντάς σας να επαναχρησιμοποιείτε σύνθετα ερωτήματα χωρίς να τα ξαναγράφετε.
  • Προσωρινές προβολές: Οι προσωρινές προβολές υπάρχουν μόνο για την τρέχουσα σύνδεση και διαγράφονται αυτόματα μόλις κλείσει η σύνδεση.
  • Ευρετήρια: Τα ευρετήρια λειτουργούν όπως ένα ευρετήριο βιβλίων, επιτρέποντας SQLite Εντοπίστε γρήγορα τις αντίστοιχες γραμμές αντί να σαρώνετε κάθε γραμμή του πίνακα.
  • 🎯 Τύποι ευρετηρίου: SQLite Υποστηρίζει ευρετήρια έκφρασης, μερικούς και μοναδικούς δείκτες για τη βελτιστοποίηση της απόδοσης για συγκεκριμένα μοτίβα ερωτημάτων.
  • 🔔 Ενεργοποιητές: Οι εναύσματα εκτελούν αυτόματα προκαθορισμένες λειτουργίες πριν ή μετά τις εντολές INSERT, UPDATE ή DELETE σε έναν πίνακα.
  • 🤖 Βοήθεια AI: Εργαλεία τεχνητής νοημοσύνης για μετατροπή κειμένου σε SQL και GitHub Copilot δημιουργούν SQLite προβολές, ευρετήρια και εναύσματα από απλά αγγλικά μηνύματα.

SQLite Ενεργοποίηση, Προβολές και Ευρετήριο

Στην καθημερινή χρήση του SQLite, θα χρειαστείτε κάποια εργαλεία διαχείρισης στη βάση δεδομένων σας. Μπορείτε επίσης να τα χρησιμοποιήσετε για να κάνετε την αναζήτηση στη βάση δεδομένων πιο αποτελεσματικά δημιουργώντας ευρετήρια ή πιο επαναχρησιμοποιήσιμα δημιουργώντας προβολές.

SQLite Προβολή

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

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

ΔΗΜΙΟΥΡΓΙΑ ΔΗΛΩΣΗΣ ΠΡΟΒΟΛΗ

Για να δημιουργήσετε μια προβολή σε μια βάση δεδομένων, μπορείτε να χρησιμοποιήσετε τη δήλωση CREATE VIEW ακολουθούμενη από το όνομα της προβολής και, στη συνέχεια, να βάλετε το ερώτημα που θέλετε μετά από αυτό.

Παράδειγμα: Στο ακόλουθο παράδειγμα θα δημιουργήσουμε μια προβολή με το όνομα "AllStudentsView" στη δειγματοληπτική βάση δεδομένων "TutorialsSampleDB.db" ως εξής:

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

SQLite Προβολή

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

SQLite Προβολή

Βήμα 3) Ακολουθεί μια βασική σύνταξη της εντολής sqlite3 για τη δημιουργία της Προβολής

CREATE VIEW AllStudentsView
AS
  SELECT 
    s.StudentId,
    s.StudentName,
    s.DateOfBirth,
    d.DepartmentName
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

Δεν πρέπει να υπάρχει έξοδος από την εντολή όπως αυτή:

SQLite Προβολή

Βήμα 4) Για να βεβαιωθείτε ότι έχει δημιουργηθεί η προβολή, μπορείτε να επιλέξετε τη λίστα προβολών στη βάση δεδομένων εκτελώντας την ακόλουθη εντολή:

SELECT name FROM sqlite_master WHERE type = 'view';

Θα πρέπει να δείτε την προβολή "AllStudentsView" να επιστρέφεται:

SQLite Προβολή

Βήμα 5) Τώρα η άποψή μας δημιουργήθηκε, μπορείτε να τη χρησιμοποιήσετε ως κανονικό πίνακα κάπως έτσι:

SELECT * FROM AllStudentsView;

Αυτή η εντολή θα ρωτήσει την προβολή "AllStudents" και θα επιλέξει όλες τις σειρές από αυτήν όπως φαίνεται στο παρακάτω στιγμιότυπο οθόνης:

SQLite Προβολή

Προσωρινές Προβολές

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

  • ΔΗΜΙΟΥΡΓΙΑ ΠΡΟΒΟΛΗ ΘΕΡΜΟΚΡΑΣΙΑΣ ή
  • ΔΗΜΙΟΥΡΓΗΣΤΕ ΠΡΟΣΩΡΙΝΗ ΠΡΟΒΟΛΗ.

Οι προσωρινές προβολές είναι χρήσιμες εάν θέλετε να κάνετε κάποιες λειτουργίες προς το παρόν και δεν χρειάζεται να είναι μόνιμη προβολή. Έτσι, δημιουργείτε απλώς μια προσωρινή προβολή και, στη συνέχεια, πραγματοποιείτε την επεξεργασία χρησιμοποιώντας αυτήν την προβολή. Later όταν κλείσετε τη σύνδεση με τη βάση δεδομένων, θα διαγραφεί αυτόματα.

Παράδειγμα:

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

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

Βήμα 1) Ανοίξτε το sqlite3.exe από τον κατάλογο "C:\sqlite" όπως εξηγήθηκε προηγουμένως.

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

.open TutorialsSampleDB.db

Βήμα 3) Γράψτε την ακόλουθη εντολή που θα δημιουργήσει μια προσωρινή προβολή "AllStudentsTempView":

CREATE TEMP VIEW AllStudentsTempView
AS
  SELECT 
    s.StudentId,
    s.StudentName,
    s.DateOfBirth,
    d.DepartmentName
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

SQLite Προβολή

Βήμα 4) Βεβαιωθείτε ότι δημιουργείται η προσωρινή προβολή "AllStudentsTempView" εκτελώντας την ακόλουθη εντολή:

SELECT name FROM sqlite_temp_master WHERE type = 'view';

SQLite Προβολή

Βήμα 5) Κλείστε το sqlite3.exe και ανοίξτε το ξανά.

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

.open TutorialsSampleDB.db

Βήμα 7) Εκτελέστε την ακόλουθη εντολή για να λάβετε τη λίστα της προσωρινής προβολής που δημιουργήθηκε στη βάση δεδομένων:

SELECT name FROM sqlite_temp_master WHERE type = 'view';

Δεν θα πρέπει να βλέπετε καμία έξοδο, καθώς η προβολή temp που δημιουργήσαμε διαγράφεται όταν κλείσαμε τη σύνδεση της βάσης δεδομένων στο προηγούμενο βήμα. Διαφορετικά, όσο διατηρείτε τη σύνδεση με τη βάση δεδομένων ανοιχτή, θα μπορείτε να δείτε την προσωρινή προβολή με δεδομένα.

SQLite Προβολή

:

  • Δεν μπορείτε να χρησιμοποιήσετε τις δηλώσεις ΕΙΣΑΓΩΓΗ, ΔΙΑΓΡΑΦΗ ή ΕΝΗΜΕΡΩΣΗ με προβολές, μόνο μπορείτε να χρησιμοποιήσετε την εντολή "επιλογή από προβολές" όπως φαίνεται στο βήμα 5 στο παράδειγμα ΔΗΜΙΟΥΡΓΙΑ προβολής.
  • Για να διαγράψετε μια ΠΡΟΒΟΛΗ, μπορείτε να χρησιμοποιήσετε τη δήλωση "DROP VIEW":
DROP VIEW AllStudentsView;

Για να βεβαιωθείτε ότι η προβολή έχει διαγραφεί, μπορείτε να εκτελέσετε την ακόλουθη εντολή που σας δίνει τη λίστα των προβολών στη βάση δεδομένων:

SELECT name FROM sqlite_master WHERE type = 'view';

Δεν θα βρείτε προβολές που επιστράφηκαν καθώς η προβολή διαγράφηκε, ως εξής:

SQLite Προβολή

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

SQLite Περιεχόμενα

Εάν έχετε ένα βιβλίο και θέλετε να αναζητήσετε μια λέξη-κλειδί σε αυτό το βιβλίο. Θα αναζητήσετε αυτή τη λέξη-κλειδί στο ευρετήριο του βιβλίου. Στη συνέχεια, θα πλοηγηθείτε στον αριθμό σελίδας για τη συγκεκριμένη λέξη-κλειδί για να διαβάσετε περισσότερες πληροφορίες σχετικά με αυτήν τη λέξη-κλειδί.

Ωστόσο, εάν δεν υπάρχει ευρετήριο σε αυτό το βιβλίο ούτε αριθμοί σελίδων, θα σαρώσετε ολόκληρο το βιβλίο από την αρχή μέχρι το τέλος μέχρι να βρείτε τη λέξη-κλειδί που αναζητάτε. Και αυτό είναι πολύ δύσκολο, ειδικά όταν έχετε ευρετήριο και πολύ αργή διαδικασία για να αναζητήσετε μια λέξη-κλειδί.

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

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

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

Βελτίωση απόδοσης με δείκτες:

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

Στη συνέχεια, εάν εκτελέσετε ένα ερώτημα με μια συνθήκη αναζήτησης σε μια στήλη που αποτελεί μέρος ενός ευρετηρίου, SQLite θα αναζητήσει πρώτα την τιμή στο ευρετήριο. SQLite δεν θα σαρώσει ολόκληρο τον πίνακα για αυτό. Στη συνέχεια, θα διαβάσει τη θέση όπου δείχνει η τιμή για τη σειρά του πίνακα. SQLite θα εντοπίσει τη σειρά σε αυτήν την τοποθεσία και θα την ανακτήσει.

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

Φανταστείτε ένα βιβλίο χωρίς ευρετήριο και πρέπει να αναζητήσετε μια συγκεκριμένη λέξη. Θα σαρώσετε ολόκληρο το βιβλίο από την πρώτη σελίδα μέχρι την τελευταία σελίδα αναζητώντας αυτή τη λέξη. Ωστόσο, εάν έχετε ευρετήριο σε αυτό το βιβλίο, θα αναζητήσετε πρώτα τη λέξη σε αυτό. Λάβετε τον αριθμό σελίδας όπου βρίσκεται και, στη συνέχεια, μεταβείτε σε αυτόν. Κάτι που θα είναι πολύ πιο γρήγορο από το να σαρώσετε ολόκληρο το βιβλίο από εξώφυλλο σε εξώφυλλο.

SQLite ΔΗΜΙΟΥΡΓΙΑ ΔΕΙΚΤΗΣ

Για να δημιουργήσετε ένα ευρετήριο σε μια στήλη, θα πρέπει να χρησιμοποιήσετε την εντολή CREATE INDEX. Και θα πρέπει να το ορίσετε ως εξής:

  • Πρέπει να καθορίσετε το όνομα του ευρετηρίου μετά την εντολή CREATE INDEX.
  • Μετά το όνομα του ευρετηρίου, πρέπει να βάλετε τη λέξη-κλειδί «ON», ακολουθούμενη από το όνομα του πίνακα στον οποίο θα δημιουργηθεί το ευρετήριο.
  • Στη συνέχεια, η λίστα με τα ονόματα στηλών που χρησιμοποιούνται για το ευρετήριο.
  • Μπορείτε να χρησιμοποιήσετε μία από τις ακόλουθες λέξεις-κλειδιά "ASC" ή "DESC" μετά από οποιοδήποτε όνομα στήλης για να καθορίσετε μια σειρά ταξινόμησης που χρησιμοποιείται για την παραγγελία των δεδομένων ευρετηρίου.

Παράδειγμα:

Στο ακόλουθο παράδειγμα, θα δημιουργήσουμε ένα ευρετήριο "StudentNameIndex" στον πίνακα students στη βάση δεδομένων "Students" ως εξής:

Βήμα 1) Μεταβείτε στον φάκελο "C:\sqlite" όπως εξηγήθηκε προηγουμένως.

Βήμα 2) Ανοίξτε το sqlite3.exe.

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

.open TutorialsSampleDB.db

Βήμα 4) Δημιουργήστε ένα νέο ευρετήριο "StudentNameIndex" χρησιμοποιώντας την ακόλουθη εντολή:

CREATE INDEX StudentNameIndex ON Students(StudentName);

Δεν πρέπει να δείτε έξοδο για αυτό:

SQLite Περιεχόμενα

Βήμα 5) Για να βεβαιωθείτε ότι το ευρετήριο δημιουργήθηκε, μπορείτε να εκτελέσετε το ακόλουθο ερώτημα, το οποίο σας δίνει τη λίστα των ευρετηρίων που δημιουργήθηκαν στον πίνακα Students:

PRAGMA index_list(Students);

Θα πρέπει να δείτε το ευρετήριο που μόλις δημιουργήσαμε να επιστρέφεται:

SQLite Περιεχόμενα

:

  • Τα ευρετήρια μπορούν να δημιουργηθούν όχι μόνο με βάση στήλες αλλά και εκφράσεις. Κάτι σαν αυτό:
CREATE INDEX OrderTotalIndex ON OrderItems(OrderId, Quantity*Price);

Το "OrderTotalIdex" θα βασίζεται στη στήλη OrderId και επίσης στον πολλαπλασιασμό της τιμής της στήλης Quantity και της τιμής της στήλης Price. Επομένως, οποιοδήποτε ερώτημα για "OrderId" και "Quantity*Price" θα είναι αποτελεσματικό καθώς το ερώτημα θα χρησιμοποιεί το ευρετήριο.

  • Εάν καθορίσατε μια ρήτρα WHERE στη δήλωση CREATE INDEX, το ευρετήριο θα είναι ένα μερικό ευρετήριο. Σε αυτήν την περίπτωση, θα υπάρχουν καταχωρήσεις στο ευρετήριο μόνο για τις σειρές που ταιριάζουν με τις συνθήκες της ρήτρας WHERE. Για παράδειγμα, στο παρακάτω ευρετήριο:
    CREATE INDEX OrderTotalIndexForLargeQuantities ON OrderItems(OrderId, Quantity*Price)
    WHERE Quantity > 10000;

    ( Στο παραπάνω παράδειγμα, ο δείκτης θα είναι ένας μερικός δείκτης, καθώς υπάρχει μια ρήτρα WHERE. Σε αυτήν την περίπτωση, ο δείκτης θα εφαρμοστεί μόνο σε εκείνες τις παραγγελίες που έχουν αξία ποσότητας μεγαλύτερη από 10000. Σημειώστε ότι αυτός ο δείκτης ονομάζεται μερικός ευρετήριο λόγω της ρήτρας WHERE, όχι της έκφρασης που χρησιμοποιείται σε αυτήν. Ωστόσο, μπορείτε να χρησιμοποιήσετε τις εκφράσεις με κανονικά ευρετήρια.)

  • Μπορείτε να χρησιμοποιήσετε τη δήλωση CREATE UNIQUE INDEX αντί για CREATE INDEX για να αποτρέψετε διπλές εγγραφές για τις στήλες και έτσι όλες οι τιμές για τη στήλη με ευρετήριο θα είναι μοναδικές.
  • Για να διαγράψετε ένα ευρετήριο, χρησιμοποιήστε την εντολή DROP INDEX ακολουθούμενη από το όνομα του ευρετηρίου για διαγραφή.

Ενώ τα ευρετήρια κάνουν τις αναγνώσεις πιο γρήγορες, οι ενεργοποιητές επιτρέπουν SQLite να ανταποκρίνεται αυτόματα κάθε φορά που αλλάζουν τα δεδομένα.

SQLite Σκανδάλη

Εισαγωγή στην SQLite Σκανδάλη

Οι ενεργοποιητές είναι αυτόματες προκαθορισμένες λειτουργίες που εκτελούνται όταν μια συγκεκριμένη ενέργεια εμφανίζεται σε έναν πίνακα βάσης δεδομένων. Μπορεί να οριστεί ένας κανόνας που θα ενεργοποιείται κάθε φορά που συμβαίνει μία από τις ακόλουθες ενέργειες σε έναν πίνακα:

  • ΕΙΣΑΓΩΓΗ σε πίνακα.
  • ΔΙΑΓΡΑΦΗ σειρών από έναν πίνακα.
  • ΕΝΗΜΕΡΩΣΗ μιας από τις στήλες του πίνακα.

SQLite υποστηρίζει την ενεργοποίηση ΓΙΑ ΚΑΘΕ ΣΕΙΡΑ, έτσι ώστε οι προκαθορισμένες λειτουργίες στον κανόνα ετικέτας να εκτελούνται για όλες τις σειρές που εμπλέκονται στις ενέργειες που πραγματοποιήθηκαν στον πίνακα (είτε πρόκειται για εισαγωγή, διαγραφή ή ενημέρωση).

SQLite ΔΗΜΙΟΥΡΓΙΑ ΣΚΑΝΔΙΣΤΗΣ

Για να δημιουργήσετε ένα νέο TRIGGER, μπορείτε να χρησιμοποιήσετε τη δήλωση CREATE TRIGGER ως εξής:

  • Μετά το CREATE TRIGGER, θα πρέπει να καθορίσετε ένα όνομα ενεργοποίησης.
  • Μετά το όνομα της ενεργοποίησης, πρέπει να καθορίσετε πότε ακριβώς θα πρέπει να εκτελεστεί το όνομα ενεργοποίησης. Έχετε τρεις επιλογές:
    • ΠΡΙΝ – η ενεργοποίηση θα εκτελεστεί πριν από την καθορισμένη δήλωση INSERT, UPDATE ή delete.
    • Μετά – η ενεργοποίηση θα εκτελεστεί μετά την καθορισμένη δήλωση INSERT, UPDATE ή delete.
    • ΑΝΤΙ - Θα αντικαταστήσει την ενέργεια που συνέβη και η οποία πυροδότησε τη σκανδάλη με τη δήλωση που καθορίζεται στο TRIGGER. Η σκανδάλη ΑΝΤΙ ΓΙΑ δεν εφαρμόζεται με πίνακες, μόνο με προβολές.
  • Στη συνέχεια, πρέπει να καθορίσετε τον τύπο της ενέργειας, η σκανδάλη θα ενεργοποιηθεί όταν συμβεί. Είτε ΔΙΑΓΡΑΦΗ, ΕΙΣΑΓΩΓΗ ή ΕΝΗΜΕΡΩΣΗ.
  • Μπορείτε να επιλέξετε ένα προαιρετικό όνομα στήλης, έτσι ώστε ο κανόνας ετικέτας να μην ενεργοποιείται εκτός εάν η ενέργεια συνέβη σε αυτήν τη στήλη.
  • Στη συνέχεια, πρέπει να καθορίσετε το όνομα του πίνακα στο οποίο θα δημιουργηθεί η ενεργοποίηση.
  • Μέσα στο σώμα της σκανδάλης, θα πρέπει να καθορίσετε τη δήλωση που θα πρέπει να εκτελείται για κάθε σειρά όταν ενεργοποιείται η σκανδάλη.

Οι σκανδαλισμοί θα ενεργοποιούνται (ενεργοποιούνται) μόνο ανάλογα με τον τύπο της δήλωσης που καθορίζεται στην εντολή δημιουργίας ενεργοποίησης. Για παράδειγμα:

  • Η σκανδάλη ΠΡΙΝ ΕΙΣΑΓΩΓΗ θα ενεργοποιηθεί (ενεργοποιηθεί) πριν από οποιαδήποτε δήλωση εισαγωγής.
  • Η ενεργοποίηση AFTER UPDATE θα ενεργοποιηθεί (ενεργοποιηθεί) μετά από οποιαδήποτε δήλωση ενημέρωσης, … και ούτω καθεξής.

Μέσα στο έναυσμα, μπορείτε να ανατρέξετε στις τιμές που εισήχθησαν πρόσφατα χρησιμοποιώντας τη λέξη-κλειδί "νέα". Επίσης, μπορείτε να ανατρέξετε στις διαγραμμένες ή ενημερωμένες τιμές χρησιμοποιώντας την παλιά λέξη-κλειδί. Ως εξής:

  • Εντός κανόνων INSERT – μπορεί να χρησιμοποιηθεί νέα λέξη-κλειδί.
  • Εντός κανόνων UPDATE – μπορούν να χρησιμοποιηθούν νέες και παλιές λέξεις-κλειδιά.
  • Εντός κανόνων DELETE - μπορεί να χρησιμοποιηθεί παλιά λέξη-κλειδί.

Παράδειγμα

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

Θα καταγράψει τον νεοεισαχθέντα φοιτητή στον πίνακα "StudentsLog" με αυτόματη χρονική σήμανση για την τρέχουσα ημερομηνία και ώρα που έγινε η εντολή εισαγωγής. Ως εξής:

Βήμα 1) Μεταβείτε στον κατάλογο "C:\sqlite" και εκτελέστε το sqlite3.exe.

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

.open TutorialsSampleDB.db

Βήμα 3) δημιουργήστε την ενεργοποίηση “InsertIntoStudentTrigger” Εκτελώντας την ακόλουθη εντολή:

CREATE TRIGGER InsertIntoStudentTrigger 
       BEFORE INSERT ON Students
BEGIN
  INSERT INTO StudentsLog VALUES(new.StudentId, datetime(), 'Insert');
END;

Η συνάρτηση “datetime()” θα σας δώσει την τρέχουσα ημερομηνία και ώρα που πραγματοποιήθηκε η εντολή εισαγωγής. Έτσι, μπορούμε να καταγράψουμε τη συναλλαγή εισαγωγής με αυτόματες χρονικές σημάνσεις που προστίθενται σε κάθε συναλλαγή.

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

SQLite Σκανδάλη

Η ενεργοποίηση "InsertIntoStudentTrigger" θα ενεργοποιείται κάθε φορά που εισάγετε έναν νέο μαθητή στον πίνακα φοιτητών. Η λέξη-κλειδί "new" αναφέρεται στις τιμές που θα εισαχθούν. Για παράδειγμα, το "new.StudentId" θα είναι το αναγνωριστικό μαθητή που θα εισαχθεί.

Τώρα, θα δοκιμάσουμε πώς συμπεριφέρεται η σκανδάλη όταν εισάγουμε έναν νέο μαθητή.

Βήμα 4) Γράψτε την ακόλουθη εντολή που θα εισάγει έναν νέο μαθητή στον πίνακα μαθητών:

INSERT INTO Students VALUES(11, 'guru11', 1, '1999-10-12');

Βήμα 5) Γράψτε την ακόλουθη εντολή που θα επιλέξει όλες τις γραμμές από τον πίνακα "StudentsLog":

SELECT * FROM StudentsLog;

Θα πρέπει να δείτε μια νέα σειρά που επιστρέφεται για τον νέο μαθητή που μόλις εισαγάγαμε:

SQLite Σκανδάλη

Αυτή η σειρά εισήχθη από το έναυσμα πριν από την εισαγωγή του νέου μαθητή με αναγνωριστικό 11.

Σε αυτό το παράδειγμα χρησιμοποιήσαμε την ενεργοποίηση "InsertIntoStudentTrigger" που δημιουργήσαμε, για να καταγράψουμε αυτόματα τυχόν συναλλαγές εισαγωγής στον πίνακα "StudentsLog". Με τον ίδιο τρόπο μπορείτε να καταγράψετε οποιαδήποτε ενημέρωση ή να διαγράψετε δηλώσεις.

Αποτροπή ακούσιων ενημερώσεων με ενεργοποιητές:

Χρησιμοποιώντας τους κανόνες ετικέτας ΠΡΙΝ ΕΝΗΜΕΡΩΣΗ σε έναν πίνακα, μπορείτε να αποτρέψετε τις δηλώσεις ενημέρωσης σε μια στήλη που βασίζονται σε μια έκφραση.

Παράδειγμα

Στο παρακάτω παράδειγμα, θα αποτρέψουμε οποιαδήποτε δήλωση ενημέρωσης από την ενημέρωση της στήλης "όνομα μαθητή" στον πίνακα Students:

Βήμα 1) Μεταβείτε στον κατάλογο "C:\sqlite" και εκτελέστε το sqlite3.exe.

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

.open TutorialsSampleDB.db

Βήμα 3) Δημιουργήστε μια νέα ενεργοποίηση "preventUpdateStudentName" στον πίνακα "Students" εκτελώντας την ακόλουθη εντολή

CREATE TRIGGER preventUpdateStudentName
BEFORE UPDATE OF StudentName ON Students
FOR EACH ROW
BEGIN
    SELECT RAISE(ABORT, 'You cannot update studentname');
END;

Η εντολή "RAISE" θα εμφανίσει ένα σφάλμα με το μήνυμα σφάλματος "Δεν μπορείτε να ενημερώσετε το όνομα_μαθητή" και στη συνέχεια θα αποτρέψει την εκτέλεση της εντολής ενημέρωσης.

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

Βήμα 4) Εκτελέστε την ακόλουθη εντολή ενημέρωσης, η οποία θα ενημερώσει το όνομα του μαθητή "Jack" σε "Jack1".

UPDATE Students SET StudentName = 'Jack1' WHERE StudentName = 'Jack';

Θα πρέπει να λάβετε το μήνυμα σφάλματος που καθορίσαμε στην ενεργοποίηση, το οποίο αναφέρει ότι "Δεν μπορείτε να ενημερώσετε το όνομα μαθητή" ως εξής:

SQLite Σκανδάλη

Βήμα 5) Εκτελέστε την ακόλουθη εντολή, η οποία θα επιλέξει τη λίστα με τα ονόματα των μαθητών από τον πίνακα μαθητών.

SELECT StudentName FROM Students;

Θα πρέπει να δείτε ότι το όνομα του μαθητή "Jack" εξακολουθεί να είναι το ίδιο και δεν αλλάζει:

SQLite Σκανδάλη

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

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

SQLite Οι προβολές είναι μόνο για ανάγνωση, επομένως οι εντολές INSERT, UPDATE και DELETE δεν μπορούν να εκτελεστούν απευθείας σε αυτές. Για να κάνετε μια προβολή εγγράψιμη, επισυνάψτε ένα έναυσμα INSTEAD OF που μεταφράζει τη λειτουργία σε αλλαγές στους υποκείμενους βασικούς πίνακες.

Δημιουργήστε ένα ευρετήριο σε στήλες που χρησιμοποιούνται συχνά σε όρους WHERE, JOIN ή ORDER BY, ειδικά σε στήλες υψηλής πληθικότητας με λίγες διπλότυπες τιμές. Τα ευρετήρια επιταχύνουν τις αναζητήσεις SELECT, αλλά η προσθήκη τους σε πίνακες που αναζητούνται σπάνια ή σε πολύ μικρούς πίνακες δεν προσφέρει μεγάλο όφελος.

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

Όχι. SQLite Δεν έχει εντολή CREATE MATERIALIZED VIEW και οι συνηθισμένες προβολές δεν αποθηκεύουν ποτέ τα αποτελέσματά τους στην προσωρινή μνήμη. Για να μιμηθείτε έναν, δημιουργήστε έναν πραγματικό πίνακα και διατηρήστε τον συγχρονισμένο χρησιμοποιώντας τις ενεργοποιήσεις AFTER INSERT, UPDATE και DELETE στους πίνακες προέλευσης.

Το sqlite_master είναι ο ενσωματωμένος κατάλογος σχήματος που παραθέτει κάθε πίνακα, προβολή, ευρετήριο και ενεργοποίηση στη βάση δεδομένων. Υποβάλετε ερώτημα, για παράδειγμα SELECT name FROM sqlite_master WHERE type = 'view';, για να ελέγξετε ποια αντικείμενα υπάρχουν.

Ναι. Οι βοηθοί τεχνητής νοημοσύνης για τη μετατροπή κειμένου σε SQL μετατρέπουν τα αιτήματα σε απλά αγγλικά σε SQLite Δηλώσεις CREATE VIEW, CREATE INDEX και CREATE TRIGGER. Η ​​παροχή των πραγματικών ονομάτων πινάκων και στηλών βελτιώνει την ακρίβεια και κάθε δημιουργούμενη δήλωση θα πρέπει να ελέγχεται και να δοκιμάζεται πριν από την εκτέλεση σε δεδομένα παραγωγής.

GitHub Copilot προτείνει SQLite προβολές, ευρετήρια και εναύσματα ενσωματωμένα σε προγράμματα επεξεργασίας όπως VS CodeΔιαβάζει κοντινά σχήματα και σχόλια, επομένως οι συμπληρώσεις επαναχρησιμοποιούν τα πραγματικά ονόματα πινάκων και στηλών σας, ωστόσο θα πρέπει να επαληθεύετε κάθε πρόταση πριν την εκτελέσετε.

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