3. Indices (=ευρετήρια ή δευτερεύοντα κλειδιά)
Επιταχύνουν τη διαδικασία ανάκτησης των επιθυμητών δεδομένων
Δημιουργούμε σε στήλες τις οποίες χρησιμοποιούμε συνέχεια για αναζήτηση δεδομένων
Η προσθήκη ευρετηρίων πρέπει να γίνεται με σύνεση γιατί μπορεί να δημιουργήσει
σοβαρά προβλήματα, όπως
◦ η χρήση υπερβολικού αποθηκευτικού χώρου
◦ μεγάλος φόρτος εργασίας στη βάση αφού κάθε νέα καταχώρηση στον πίνακα απαιτεί την
ανανέωση ή και ταξινόμηση του ευρετηρίου.
3
sid name semeste
r
age did
121 Steve A 33 1
145 Graham B 45 1
646 Yanis A 37 2
756 Pye B 28 2
152 George B 33 1
sid
121
145
152
646
756
4. Δημιουργία Index
1. create table table_name(column1 column1_type, column2 column2_type, ……, index
index_name (column_name1, column_name2,…), index index_name(…),…);
2. create index index_name on table_name (column_name);
Παράδειγμα: create index schoolNameInd on school(name);
3. alter table table_name add index (column_name);
Παράδειγμα: alter table school add index(name);
Διαγραφή Index
1. drop index schoolNameInd on school;
2. alter table school drop index schoolNameInd;
4
5. Το foreign key είναι λογικός περιορισμός.
Η προκαθορισμένη μηχανή αποθήκευσης MyIsam έχει πολύ μεγάλη ταχύτητα,
αλλά δεν υποστηρίζει τα foreign keys.
show table status;
Alter table table_Name ENGINE=InnoDB;
Δοκιμάστε να προσθέσετε την παρακάτω εγγραφή στον πίνακα dept
insert into dept(did, name, scid) values(100, 'cs2‘, 512);
Τι παρατηρείτε?
5
6. Δημιουργία foreign key
1. create table table_name1(column1 column1_type, column2 column2_type, ……, foreign
key (column_name) references table_name2 (column_name) on delete cascade)
2. alter table table_name1 add foreign key (column_name) references table_name2
(column_name) on delete cascade;
3. alter table table_name1 add constraint constraint_name foreign key (column_name)
references table_name2 (column_name) on delete cascade;
3. Κάνετε foreign key το πεδίο που συνδέει τους πίνακες school και dept
alter table dept add foreign key(scid) references school(scid)
on delete cascade;
Ο όρος “on delete cascade” είναι προαιρετικός και λέει στη βάση ότι όταν σβηστεί
ένα πεδίο από τον πίνακα school, θα σβηστούν και τα αντίστοιχα πεδία από τον πίνακα
dept.
6
7. Δοκιμάστε τώρα να καταχωρήσετε την εγγραφή
insert into dept(did, name, scid) values(101, 'cs3‘, 1025);
Τι παρατηρείτε?
Διαγραφή foreign key
Για να διαγράψουμε το Foreign key πρέπει να ξέρουμε το όνομά του. Η
show create table dept;
επιστρέφει την εντολή “create table” που θα χρησιμοποιούσαμε
για να δημιουργήσουμε τον πίνακα dept στην τρέχουσα κατάστασή του, από όπου
μπορούμε να δούμε το όνομα που έχει δοθεί στο foreign key.
alter table table_name drop foreign key fkeyΝame;
Παράδειγμα: alter table dept drop foreign key fKeyName;
ΑΣΚΗΣΗ: Κάνετε foreign key το πεδίο που συνδέει τους πίνακες
dept και student
7
Foreign keys(3)Foreign keys(3)