MySQL


Σύνδεση με MySQL

Για να συνδεθείτε στη MySQL:

mysql -u username -p

Στη συνέχεια, μπορείτε να δίνετε SQL εντολές στο command line.


Καταγραφή εντολών σε script

Για να καταγράψετε το session σας στη MySQL, μπορείτε να χρησιμοποιήσετε την εντολή "tee" ως εξής:

mysql -u username -p --tee filename

Χρήσιμο link στο on-line MySQL Documentation:


Περιορισμοί Ξένου Κλειδιού και Μηχανές Αποθήκευσης

Η MySQL διαθέτει πάνω από μία επιλογές όσον αφορά την μηχανή αποθήκευσης που χρησιμοποιείται για τους πίνακες μίας Βάσης Δεδομένων. Αυτές διαφέρουν στον τρόπο που αποθηκεύονται τα δεδομένα στο δίσκο, η meta-πληροφορίες των πινάκων κτλ. Οι δύο κύριες επιλογές μηχανών είναι η MyISAM και η InnoDB.

Η default επιλογή όταν δημιουργείται ένας πίνακας μέσω μίας CREATE TABLE εντολής είναι η χρήση της MyISAM. Αυτή η μηχανή όμως δεν εφαρμόζει τους περιορισμούς ξένου κλειδιού. Αυτό σημαίνει ότι οποιοσδήποτε περιορισμός της μορφής "FOREIGN KEY X REFERENCES Τ" που εμφανίζεται σε μια CREATE TABLE εντολή απλά αγνοείται, επομένως στο μέλλον είναι δυνατόν να εισαχθούν δεδομένα στον πίνακα που παραβιάζουν αυτούς τους περιορισμούς. Κατά την εκτέλεση της CREATE TABLE εντολής δεν εμφανίζεται κάποιο μήνυμα λάθους.

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

CREATE TABLE T(
	...
	)ENGINE=innodb;
δηλαδή, προσθέτουμε στο τέλος της CREATE TABLE εντολής "ENGINE=innodb".

Σε έναν InnoDB πίνακα μπορείτε να έχετε επιπλέον "ON DELETE ..." και "ON UPDATE ..." περιορισμούς στα ξένα κλειδιά σας. Αυτοί οι περιορισμοί ελέγχονται σε μελλοντικές εισαγωγές και τροποποιήσεις δεδομένων. Γενικά, υπάρχουν τέσσερις διαφορετικές επιλογές για τα "ON DELETE" και "ON UPDATE". Έστω ότι έχετε ένα ξένο κλειδί από τον πίνακα Τ2 στον πίνακα Τ1. Τότε, οι διαθέσιμες επιλογές είναι οι:

CASCADE:
Όταν διαγράφετε ή τροποποιείτε κάτι στον Τ1, τότε οι αλλαγές μεταφέρονται και στις αντίστοιχες πλειάδες του Τ2.
SET NULL:
Όταν διαγράφετε ή τροποποιείτε κάτι στον Τ1, τότε οι αντίστοιχες πλειάδες του Τ2 παίρνουν την τιμή NULL (αρκεί να μην υπάρχει ταυτόχρονα και κάποιος περιορισμός NOT NULL στην στήλη του ξένου κλειδιού).
NO ACTION:
Εάν υπάρχουν πλειάδες του Τ2 που αναφέρονται σε αυτές του Τ1 που επιχειρείτε να διαγράψετε/τροποποιήσετε, τότε η εντολή δεν εκτελείται.
RESTRICT:
Το ίδιο με το "NO ACTION" (διαφέρουν στο πώς γίνεται ο έλεγχος αλλά έχουν το ίδιο αποτέλεσμα).

Σε μία Βάση Δεδομένων είναι δυνατόν κάποιοι πίνακες να χρησιμοποιούν την MyISAM και κάποιοι άλλοι την InnoDB. Παρόλα αυτά, εφόσον θέλετε να έχετε περιορισμούς ξένου κλειδιού σε κάποιους πίνακες, καλό είναι να χρησιμοποιείτε την InnoDB για ολόκληρη τη Βάση Δεδομένων σας. Μην ξεχνάτε ότι πρέπει να το διευκρινίζεται σε κάθε έναν πίνακα της Βάσης χωριστά.

Χρήσιμα links στο on-line MySQL Documentation:


Μαζική Φόρτωση Δεδομένων

Για να εισάγετε μαζικά δεδομένα σε μία βάση δεδομένων μπορείτε να χρησιμοποιήσετε την εντολή LOAD DATA. Ας υποθέσουμε ότι έχετε έναν πίνακα Τ, έστω:

CREATE TABLE MyTable(
	A int,
	B varchar(5),
	C int,
	primary key(A)
)ENGINE=innodb;

και ένα αρχείο δεδομένων, έστω:

1	"foo"	10
2	"bar"	20
3	"baz"	30

Το αρχείο αυτό έχει 3 στήλες δεδομένων. Kάθε γραμμή περιέχει μία πλειάδα δεδομένων. Τα δεδομένα σε κάθε γραμμή χωρίζονται με tab και κάποια από αυτά περικλείονται σε εισαγωγικά (χρήσιμο ειδικά αν θέλουμε να φορτώσουμε συμβολοσειρές που περιέχουν κενά).

Μία LOAD DATA εντολή έχει την εξής μορφή:

LOAD DATA LOCAL INFILE '/home/userdir/filename.txt'
INTO TABLE MyTable
FIELDS TERMINATED BY '\t'
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;

στην πρώτη γραμμή δίνουμε το path του αρχείου που περιέχει τα δεδομένα. Ακολουθεί στην δεύτερη το όνομα του πίνακα στον οποίο θέλουμε να τα φορτώσουμε, στην τρίτη ο χαρακτήρας που διαχωρίζει τις τιμές σε κάθε γραμμή (π.χ. κόμμα (,), tab (\t)), στην τέταρτη ο χαρακτήρας που περικλείει τις τιμές (συνήθως εισαγωγικά, δεν χρειάζεται να περικλείει όλες τις τιμές, μπορεί να περικλείει μόνο κάποιες από αυτές) και στην πέμπτη ο χαρακτήρας που διαχωρίζει τις γραμμές (συνήθως ο χαρακτήρας νέας γραμμής (\n)). Στην τελευτααία γραμμή δηλώνουμε πόσες από τις αρχικές γραμμές του αρχείου θέλουμε να αγνοηθούν (επειδή π.χ. περιέχουν ονόματα στηλών ή κάποιο άλλο σχόλιο).

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

Ο χαρακτήρας διαφυγής στην MySQL είναι το backslash. Οπότε αν εργάζεστε σε περιβάλλον windows και θέλετε να φορτώσετε δεδομένα από ένα path που τα directories χωρίζονται με backslash (αντί για slash όπως στο unix) και έχει και κενά, θα πρέπει να χρησιμοποιήσετε μία έκφραση της μορφής: 'C:\\Documents\ and\ Settings\\user\\Desktop\\filename.txt'.

Χρήσιμο link στο on-line MySQL Documentation: