Page 73 - Linux_7

Basic HTML Version

Linux Inside
73
Και για του λόγου το αληθές, κάνουμε έναν έλεγχο
(εικόνα
8)
:
SELECT * FROM Books;
Με την παρακάτω εντολή εισάγουμε την τρίτη γραμμή. Πα-
ρατηρούμε ότι έχουμε παραλείψει εντελώς τα ονόματα των
στηλών. Είναι εφικτό να εισάγουμε μία νέα γραμμή, ορίζοντας
μόνο τις τιμές των στηλών. Θα πρέπει, όμως, να ορίσουμε τι-
μές για όλες τις στήλες, χωρίς να παραλείψουμε καμία. Σε
αντίθετη περίπτωση, για την αποφυγή δυσάρεστων αποτελε-
σμάτων, η SQLite μάς εμφανίζει μήνυμα λάθους
(εικόνα 8)
:
INSERT INTO Books VALUES(3, ‘Crime and Punishment’,
‘Fyodor Dostoevsky’, ‘978-1840224306’);
Στο επόμενο παράδειγμα, παράλληλα με τη εισαγωγή της
τέταρτης γραμμής, κάνουμε μία ενδιαφέρουσα προσθήκη,
την εντολή .nullvalue.
Με τη συγκεκριμένη εντολή μπορούμε να ορίσουμε τι θέ-
λουμε να εμφανίζεται σε στήλες με τιμές NULL. Από προεπι-
λογή η SQLite εμφανίζει ένα κενό σε τιμές NULL.
Υπάρχει, βέβαια, και πιο πρακτικός τρόπος να ορίσουμε
κατά τη δημιουργία του πίνακα μία προκαθορισμένη τιμή σε
μία στήλη, η οποία τιμή θα εισάγεται κάθε φορά που θα αφή-
νουμε τη στήλη χωρίς τιμή (NULL).
Ακριβώς αυτό έχουμε κάνει με τη στήλη isbn. Όποτε δεν
θα ορίζουμε τιμή για τη στήλη isbn, αντικαθίσταται η τιμή
NULL με το string ‘not available’
(εικόνα 8)
:
.nullvalue NULL
INSERT INTO Books(id, title) VALUES(4, ‘Paradise Lost’);
SELECT * FROM Books;
Στην επόμενη εντολή βλέπουμε τη χρησιμότητα της στήλης
id integer primary key. Θέλουμε να προσθέσουμε στην τέταρ-
τη γραμμή τα στοιχεία που είχαμε παραλείψει, αλλά με τη
εντολή INSERT θα λάβουμε από την SQLite μήνυμα λάθους,
καθώς προσπαθούμε να εισαγάγουμε μία γραμμή με id=4,
το οποίο, όμως, ήδη υπάρχει. Σε αυτή τη περίπτωση θα χρη-
σιμοποιήσουμε την εντολή INSERT σε συνδυασμό με τη
REPLACE, ώστε να αντικαταστήσουμε τις υπάρχουσες τιμές
με τις νέες, εκτός της στήλης id, φυσικά, που δεν είναι εφικτό
να αλλάξει
(εικόνα 8)
:
INSERT OR REPLACE INTO Books VALUES(4, ‘Paradise
Lost’, ‘John Milton’, ‘978-0486442877’);
Ενδιαφέρον είναι να αναφέρουμε ότι με την παραπάνω
εντολή, εάν δεν υπήρχε id=4, η καταχώριση θα γινόταν και
πάλι κανονικά. Με το INSERT OR REPLACE, δηλαδή, εισά-
γουμε μία νέα γραμμή εάν δεν υπάρχει ήδη, ή εάν υπάρχει,
αντικαθιστούμε τις τιμές για τις στήλες που ορίζουμε.
Μια άλλη ενδιαφέρουσα δυνατότητα είναι ο συνδυασμός
της εντολής INSERT με τη SELECT, μία ιδιαίτερα χρήσιμη δυ-
νατότητα όταν θέλουμε να κάνουμε αντιγραφή ενός ολόκλη-
ρου πίνακα, όπως στο παρακάτω παράδειγμα. Δημιουργούμε
πρώτα έναν προσωρινό πίνακα BooksTemp με την ίδια δομή
όπως του πίνακα Books και με το συνδυασμό των δύο εντο-
λών, INSERT & SELECT, επιτυγχάνουμε μία πλήρη αντιγραφή
του πίνακα Books στον πίνακα BooksTemp
(εικόνα 8)
:
CREATE TEMP TABLE BooksTemp(id integer primary key,
title text, author text, isbn text);
INSERT INTO BooksTemp SELECT * FROM Books;
SELECT * FROM BooksTemp;
Βλέπουμε ότι έχει γίνει πλήρης αντιγραφή του πίνακα
Books στον προσωρινό πίνακα BooksTemp. Να σημειώσου-
με ότι δίνοντας τον όρο TEMP κατά τη δημιουργία ενός πίνα-
κα, τον ορίζουμε ως προσωρινό. Αυτό σημαίνει ότι ο πίνακας
δημιουργείται στη περιοχή της μνήμης και εάν δεν τον απο-
θηκεύσουμε χειροκίνητα, θα χαθεί μόλις κλείσουμε το αρχείο
test.db.
Ενημέρωση δεδομένων
Η ενημέρωση των δεδομένων είναι πιο απλή και συγκεκρι-
μένη από τη εισαγωγή δεδομένων. Η εντολή UPDATE ενημε-
ρώνει τα δεδομένα των στηλών των επιλεγμένων γραμμών
ενός πίνακα.
Το παρακάτω παράδειγμα θα αλλάξει το string της στήλης
author ‘Leo Tolstoy’ σε ‘Lev Nikolayevich Tolstoy’ στη γραμμή
id=1 του πίνακα Books:
UPDATE Books SET author=’Lev Nikolayevich Tolstoy’
WHERE id=1;
Κάνουμε και τη σχετική επαλήθευση:
SELECT * FROM Books WHERE id=1;
Βλέπουμε ότι η ενημέρωση ολοκληρώθηκε επιτυχώς
(εικό-
να 9)
.
Διαγραφή δεδομένων
Η διαγραφή δεδομένων ενός πίνακα γίνεται με την εντολή
DELETE. Στο παρακάτω παράδειγμα θα διαγράψουμε μία συ-
γκεκριμένη γραμμή από τον προσωρινό πίνακα BooksTemp
που είχαμε δημιουργήσει προηγουμένως:
DELETE FROM BooksTemp WHERE id = 1;
Κάνουμε το σχετικό έλεγχο:
SELECT * FROM BooksTemp;
Βλέπουμε ότι η γραμμή id=1 έχει διαγραφεί (εικόνα 9). Πα-
ρακάτω, διαγράφουμε ολόκληρο τον πίνακα BooksTemp:
DELETE FROM BooksTemp;
Κάνουμε το σχετικό έλεγχο:
.table;
Βλέπουμε ότι ο πίνακας BooksTemp έχει διαγραφεί
(εικό-
να 9)
.
Επίλογος
Σε αυτά τα δύο άρθρα έχουμε καλύψει την εισαγωγή στη
SQLite και τις βασικές εντολές SQL.
Τώρα έχετε αποκτήσει τις βάσεις για να εμβαθύνετε περαι-
τέρω στα πιο προχωρημένα επίπεδα της SQLite, όπως τα
joining tables, SQLite functions, triggers, transactions κ.λπ.
Καλή συνέχεια!
Linux Labs – SQLite
Μία άλλη ενδιαφέρουσα δυνατότητα είναι ο
συνδυασμός της εντολής INSERT με τη SELECT,
μία ιδιαίτερα χρήσιμη δυνατότητα όταν θέλουμε
να κάνουμε αντιγραφή ενός ολόκληρου πίνακα.
Διαγράφοντας μία γραμμή και έναν πίνακα με την εντολή
DELETE.
9