ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΚΑΒΑΛΑΣ ΤΜΗΜΑ ΒΙΟΜΗΧΑΝΙΚΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ. ΘΕΜΑ: Ηλεκτρονική Διαχείριση Αποθήκης Εργοστασίου

Σχετικά έγγραφα
Εργαστήριο Βάσεων Δεδομένων

SQL Τύποι Δεδομένων Δημιουργία Πίνακα Παράδειγμα.. Εργαστήριο Βάσεων Δεδομένων. Εισαγωγή στη MySQL (1)

Εργαστήριο Βάσεων Δεδομένων. Εισαγωγή στη MySQL (1)

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ.Ε.

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ. Ε. Χρήσιμοι Σύνδεσμοι

Σχεδίαση Βάσεων Δεδομένων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. 1 ο ΣΧΟΛΕΙΟ ΚΩΔΙΚΑ «Βασικά Θέματα Προγραμματισμού στην Ανάπτυξη Δυναμικών Διαδικτυακών Εφαρμογών» (Part 3) Ουρανία Σμυρνάκη

Τεχνικός Εφαρμογών Πληροφορικής

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ.

Η SQL αποτελείται από δύο υποσύνολα, τη DDL και τη DML.

Εργαστήριο Βάσεων Δεδομένων. Εισαγωγικό Φροντιστήριο Βασικές Έννοιες - Ανάλυση Απαιτήσεων

Συστήματα Διαχείρισης Βάσεων Δεδομένων

Ορισμοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

Ορισμοί Σχεσιακού Μοντέλου και (απλές)τροποποιήσεις Σχέσεων στην SQL. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

H SQL είναι η γλώσσα για όλα τα εμπορικά σχεσιακά συστήματα διαχείρισης βάσεων δεδομένων

Ορισμοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

ΗΛΕΚΤΡΟΝΙΚΟ ΚΑΤΑΣΤΗΜΑ

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ.Ε.

Ανάπτυξη πλήρους διαδικτυακής e-commerce εφαρμογής με χρήση του CMS WordPress

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΜΕ ΧΡΗΣΗ PHP

Ορισµοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

Μέρος 3 ο : Βασικές Έννοιες για δυναμικές ιστοσελίδες

Εργαστήριο Βάσεων Δεδομένων

Εργαστήριο 6 ο 7 ο / Ερωτήματα Ι

Εργαστήριο «Τεχνολογία Πολιτισμικού Λογισμικού» Ενότητα. Επεξεργασία πινάκων

Εισαγωγικό Μάθημα Βασικές Έννοιες - Ανάλυση Απαιτήσεων

Βάσεις Δεδομένων 2η εργαστηριακή άσκηση

Μέρος Ι: Εγκατάσταση και ιαμόρφωση των MySQL, Apache και PHP

Διαχείριση Βάσης Δεδομένων (dbadmin)

. Εργαστήριο Βάσεων Δεδομένων. Εισαγωγικό Μάθημα Βασικές Έννοιες - Ανάλυση Απαιτήσεων

Εργαστήριο Βάσεων Δεδομένων. Εισαγωγικό Φροντιστήριο Βασικές Έννοιες - Ανάλυση Απαιτήσεων

Διαγραφή Επιλέγετε Διαγραφή για να διαγράψετε μία ήδη υπάρχουσα διαδικασία εισαγωγής ASCII

Εργαστήριο Βάσεων Δεδομένων. Εισαγωγικό Φροντιστήριο Βασικές Έννοιες - Ανάλυση Απαιτήσεων

10 η Διάλεξη Python Βάσεις δεδομένων στη python

Περιεχόμενα. Κεφάλαιο 1 Εισαγωγή στην Access Κεφάλαιο 2 Χειρισμός πινάκων... 27

Βασικές Εντολές SQL. Θεωρία & Εντολές SQL. Γραμμή Εντολών MS-DOS (MySQL)

Εργαστήριο Βάσεων Δεδομένων

DELETE, UPDATE, INSERT.

A ΕΠΑ.Λ ΕΦΑΡΜΟΓΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 5 η ΕΝΟΤΗΤΑ: ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Εκπαιδευτικοί: ΓΑΛΑΝΟΣ ΓΕΩΡΓΙΟΣ ΜΠΟΥΣΟΥΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΣ

DELETE, UPDATE, INSERT

Field Service Management ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ

Σχεδίαση και Χρήση Βάσεων Δεδομένων. Χρήση της MySQL. Γιώργος Πυρουνάκης -

Ανάπτυξη και Σχεδίαση Λογισμικού

ΤΕΙ ΚΑΒΑΛΑΣ. Πτυχιακή εργασία ΕΙΣΑΓΩΓΗ. Μιλτιάδης Κακλαμάνης

Αρχιτεκτονική του πληροφοριακού συστήµατος Cardisoft Γραµµατεία 2003 ιαχείριση Προσωπικού

Τεχνολογίες Ανάπτυξης Ηλεκτρονικού Καταστήματος Μικρομεσαίας Επιχείρησης. Μικρομεσαίες Επιχειρήσεις και Καινοτομία

Λίγα λόγια από το συγγραφέα Κεφάλαιο 1: Βάσεις δεδομένων και Microsoft Access Κεφάλαιο 2: Microsoft Access

ΤΑΞΙΝΟΜΗΣΗ ΑΠΟΤΕΛΕΣΜΑΤΩΝ ΕΡΩΤΗΜΑΤΟΣ

Σχεδιασμός Βάσεων Δεδομένων

Ηλεκτρονικοί Υπολογιστές II

Κεφάλαιο 5. Δημιουργία φορμών για τη βάση δεδομένων DVDclub

Ακαδημαϊκό Έτος , Χειμερινό Εξάμηνο Μάθημα: Εργαστήριο «Πληροφορική Υγείας» ΕΙΣΑΓΩΓΗ ΣΤΗΝ ACCESS

Διαδικτυακές Εφαρμογές Ενότητα 1: JPA

Οι εντολές CREATE TABLE, ALTER TABLE, CREATE KEY, ALTER KEY.

Διαδικασιακός Προγραμματισμός

Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα Επιχειρηματικότητας. 2 ο Μάθημα: Βασικά Θέματα Βάσεων Δεδομένων. Δρ. Κωνσταντίνος Χ.

Περιεχόμενα. Μέρος 1: Βασικές έννοιες Πληροφορικής και επικοινωνιών Μέρος 2: Χρήση υπολογιστή και διαχείριση αρχείων Πρόλογος...

1 Συστήματα Αυτοματισμού Βιβλιοθηκών

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Τμήμα Πληροφορικής ΑΠΘ

Οδηγίες Χρήσης της MySQL

Α.Τ.Ε.Ι. ΚΑΒΑΛΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ

ΦΡΟΝΤΙΣΤΗΡΙΟ ΣΤΗ ΓΛΩΣΣΑ SQL

Εργαλεία ανάπτυξης εφαρμογών internet Ι

ΣΧΕΔΙΑΣΜΟΣ ΒΑΣΕΩΝ ΔΕΔΟΜΕΝΩΝ ΕΡΓΑΣΤΗΡΙΟ 2

PROJECT ΕΡΓΑΣΤΗΡΙΩΝ ΒΑΣΕΩΝ ΔΕΔΟΜΕΝΩΝ Ι. Τμήμα Μηχανικών Πληροφορικής Τ.Ε.

Οι εντολές CREATE TABLE, ALTER TABLE, CREATE KEY, ALTER KEY.

ΘΕΜΑ ΣΧΕΔΙΑΣΜΟΣ ΚΑΙ ΑΝΑΠΤΥΞΗ ΔΙΑΔΙΚΤΥΑΚΗΣ ΕΦΑΡΜΟΓΗΣ ΧΡΗΜΑΤΟΟΙΚΟΝΟΜΙΚΗΣ ΑΝΑΛΥΣΗΣ ΚΑΙ ΑΞΙΟΛΟΓΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ

Βάσεις Δεδομένων. Εισαγωγή Ανάλυση Απαιτήσεων. Φροντιστήριο 1 ο

Προγραμματισμός διαδικτυακών εφαρμογών με PHP

Βασικές Έννοιες Web Εφαρμογών

Ηλεκτρονικοί Υπολογιστές II

Τμήμα Διοίκησης Επιχειρήσεων

ΟΝΟΜΑ : ΚΩΝΣΤΑΝΤΙΝΟΣ ΕΠΩΝΥΜΟ : ΚΟΚΟΛΟΓΟΣ Α.Μ. : Ε11060 ΕΞΑΜΗΝΟ : ΕΠΙ ΠΤΥΧΙΟ ΤΜΗΜΑ : ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΜΑΘΗΜΑ : ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΘΕΜΑ : ΕΦΑΡΜΟΓΗ

Διαχείριση Ειδοποιήσεων με Κινητές Συσκευές

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

ΕΓΧΕΙΡΙΔΙΟ ΟΔΗΓΙΩΝ ΧΡΗΣΤΗ. Ηλεκτρονική Υποβολή Α.Π.Δ.

Συνοπτικός Οδηγός Χρήσης του Moodle για τον Καθηγητή

Γενικά Στοιχεία Ηλεκτρονικού Υπολογιστή

9η Εργαστηριακή Άσκηση: Stored Procedures - Triggers. Αποθηκευμένες Διαδικασίες (Stored Procedures):

ΦΡΟΝΤΙΣΤΗΡΙΟ ΣΤΗ ΓΛΩΣΣΑ SQL

Vodafone Business Connect

ΕΡΓΑΣΙΑ. (στο μάθημα: Τεχνολογίες Εφαρμογών Διαδικτύου του Η εξαμήνου σπουδών του Τμήματος Πληροφορικής & Τηλ/νιών)

Οδηγός Εγκατάστασης και Χρήσης του Arebas Easy

Εργαστήριο Βάσεων Δεδομένων. Triggers

Διαδικτυακό Περιβάλλον Διαχείρισης Ασκήσεων Προγραμματισμού

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

ΣΧΕΔΙΑΣΜΟΣ ΒΑΣΕΩΝ ΔΕΔΟΜΕΝΩΝ ΕΡΓΑΣΤΗΡΙΟ 3

Δείχτες Επιτυχίας και Δείχτες Επάρκειας

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ACCESS

Βάσεις Δεδομένων Ι 6. Ιδιότητες πεδίων. Τμήμα Διοίκησης Επιχειρήσεων (Μεσολόγγι) ΤΕΙ Δυτικής Ελλάδας

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

Εισαγωγή στην Access 2007

ΕΡΓΑΣΙΑ. (στο µάθηµα: Τεχνολογίες Εφαρµογών ιαδικτύου του Η εξαµήνου σπουδών του Τµήµατος Πληροφορικής & Τηλ/νιών)

Σχεσιακή Άλγεβρα και Σχεσιακός Λογισμός. Σχεσιακή Άλγεβρα Σχεσιακός Λογισμός

Βάσεις Δεδομένων. Ενότητα 6: Γλώσσα Structured Query Language -SQL. Πασχαλίδης Δημοσθένης Τμήμα Ιερατικών σπουδών

Θέματα Προγραμματισμού Διαδικτύου ~ MySQL & PHP ~

Σχεδίαση και ανάπτυξη ιστοχώρου του εργαστηρίου Μηχανικής Λογισμικού. Παληόπουλος Αποστόλης-Παπαναγιώτου Παναγιώτης

Από τα Δεδομένα στην Πληροφορία: Διδακτικό Σενάριο για Εισαγωγή στη Γλώσσα SQL. Σ. Φίλου Β. Βασιλάκης

Transcript:

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΚΑΒΑΛΑΣ ΤΜΗΜΑ ΒΙΟΜΗΧΑΝΙΚΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΘΕΜΑ: Ηλεκτρονική Διαχείριση Αποθήκης Εργοστασίου Επιβλέπων Καθηγητής: Παπαδάκης Στυλιανός Επιμέλεια- Εκπόνηση Πτυχιακής Εργασίας: Α.Ε.Μ : 699 Α.Ε.Μ: 641

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΚΑΒΑΛΑΣ ΤΜΗΜΑ ΒΙΟΜΗΧΑΝΙΚΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΘΕΜΑ: ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΑΧΕΙΡΙΣΗ ΑΠΟΘΗΚΗΣ ΕΡΓΟΣΤΑΣΙΟΥ Επιβλέπων Καθηγητής: Παπαδάκης Στυλιανός Επιμέλεια- Εκπόνηση Πτυχιακής Εργασίας: Α.Ε.Μ : 699 Α.Ε.Μ: 641

ΠΕΡΙΛΗΨΗ ΚΕΦΑΛΑΙΩΝ ΠΤΥΧΙΑΚΗΣ ΕΡΓΑΣΙΑΣ ΕΙΣΑΓΩΓΗ: Στην εισαγωγή γίνεται μία σύντομη αναφορά για το θέμα που διαπραγματεύεται η πτυχιακή εργασία. Μέρος Α : Στο πρώτο μέρος της πτυχιακής εργασίας γίνεται μια αναφορά στα προγράμματα που χρησιμοποιήθηκαν για την υλοποίηση της και πιο συγκεκριμένα γίνεται μια ανάλυση στα προγράμματα Php, MySql και Apache. Μέρος Β : Το δεύτερο μέρος πραγματεύεται τη σχεδίαση ανάπτυξη και ανάλυση της σχεσιακής βάσης δεδομένων της εφαρμογής. Μέρος Γ : Το τρίτο μέρος αναφέρεται στον έλεγχο της εφαρμογής με τη μέθοδο του κλειστού κουτιού. Η μέθοδος αυτή εξετάζει τις περιπτώσεις λαθών που μπορεί να συμβούν κατά τη λειτουργία της εφαρμογής όπως και την αντίδραση του συστήματος σ αυτές τις περιπτώσεις. Παράρτημα Α : Περιλαμβάνει εγχειρίδια εγκατάστασης των προγραμμάτων που είναι απαραίτητα για την υλοποίηση της συγκεκριμένης εφαρμογής. Παράρτημα Β : Περιλαμβάνει το εγχειρίδιο χρήσης της εφαρμογής. Παράρτημα Γ : Σε αυτό το παράρτημα παρατίθεται η υλοποίηση κωδικοποίηση της εφαρμογής Ηλεκτρονική Διαχείριση Αποθήκης Εργοστασίου

ΠΕΡΙΕΧΟΜΕΝΑ Α Μέρος: Σελίδες Μια μικρή αναφορά. 2 1.1. Php 3 1.1.1. Η Ιστορία του Php 4 1.1.2. Πλεονεκτήματα του Php 5 1.1.2.1 Λεπτομερής περιγραφή των πλεονεκτημάτων 6 1.2. MySql 8 1.2.1 Η ιστορία της MySql 8 1.2.2 Πλεονεκτήματα της MySql 8 1.2.2.1 Λεπτομερής περιγραφή των πλεονεκτημάτων 10 1.2.3 Οι τύποι δεδομένων της MySql 10 1.2.3.1 Οι αριθμητικοί τύποι δεδομένων 11 1.2.3.2 Τύποι δεδομένων για τιμές Ημερομηνίας/Ώρας 12 1.2.3.3 Τύποι αλφαριθμητικών 13 1.2.4 Η εντολή για την δημιουργία πινάκων 14 1.2.4.1 Χρήση της εντολής INSERT 15 1.2.4.2 Αναλυτική παρουσίαση της εντολής INSERT 16 1.2.5 Χρήση της εντολής SELECT 17 1.2.5.1 Ταξινόμηση των αποτελεσμάτων που επιστρέφει η εντολή SELECT 18 1.2.6 Χρήση της πρότασης WHERE στα ερωτήματά σας 20 1.2.7 Οι βασικοί τελεστές σύγκρισης και η σημασία τους 21 1.2.8 Επιλογή Δεδομένων από Πολλαπλούς Πίνακες 22 1.2.9 Χρήση της Εντολής UPDATE για την Τροποποίηση Εγγράφων 23 1.2.10 Χρήση της Εντολής DELETE 26 1.3. Apache 28 1.3.1 Τι είναι ένας Web server 29 1.3.2 Χαρακτηριστικά του Apache 31 1.3.3 Hypertext Transfer Protocol (http) 31 1.4 Γιατί να χρησιμοποιείτε το PHP και τη MySQL. 32 1.5 ΒΕΛΤΙΣΤΟΠΟΙΗΣΗ ΤΗΣ MySQL 38 1.5.1 Βελτιστοποίηση της Δομής των Πινάκων 41 1.6 Χαρακτηριστικά και Προς τα Πίσω Συμβατότητα της MySQL 4.1. 44 1.7 ΆΛΛΕΣ ΝΕΕΣ ΔΥΝΑΤΟΤΗΤΕΣ. 48 1.8 Κοιτάζοντας το Μέλλον: MySQL 5.0. 49 1.9 PHP Scripts..Τα Βασικά 50 1.10 Χαρακτηριστικά και Προς τα Πίσω Συμβατότητα της PHP 5.0 55 1.11 Τι Πρόβλημα Υπάρχει στην PHP 4; 55 1.12 Το Νέο Μοντέλο Αντικειμένων. 57 1.13 Άλλες Νέες Δυνατότητες. 59

1.14 Πότε πρέπει να αναβαθμιστείτε στην PHP 5; 59 1.15 Προς τα πίσω Συμβατότητα. 60 1.16 ΔΗΜΙΟΥΡΓΙΑ ΕΝΟΣ ΑΣΦΑΛΟΥΣ Web Server 60 1.16.1 Η ΑΝΑΓΚΗ ΓΙΑ ΑΣΦΑΛΕΙΑ. 60 1.16.2 ΤΟ ΠΡΩΤΟΚΟΛΛΟ SSL. 61 1.16.3 Συμμετρική Κρυπτογράφηση. 62 1.16.4 Κρυπτογράφηση Δημοσίου Κλειδιού 63 1.16.5 H Ανάγκη για Ακεραιότητα. 64 1.16.6 Η Ανάγκη για Πιστοποίηση. 65 1.16.7 Το Πρωτόκολλο SSL και τα Πιστοποιητικά. 66 1.16.8 Σύνοψη του Πρωτόκολλου SSL. 67 1.17 ΕΓΚΑΤΑΣΤΑΣΗ ΤΟΥ SSL. 67 1.17.1 OpenSSL. 68 1.17.2 mod_ssl. 69 1.18 ΔΙΑΧΕΙΡΙΣΗ ΠΙΣΤΟΠΟΙΗΤΙΚΩΝ. 70 1.18.1 Δημιουργία ενός Ζεύγους Κλειδιών. 71 1.19 Δημιουργία μιας Αίτησης Πιστοποιητικού. 72 1.20 Δημιουργία ενός Αυτό- Υπογραφόμενου Πιστοποιητικού 73 1.21 Διαμόρφωση του SSL. 73 1.22 Εκκίνηση του Server. 74 Β Μέρος : Σχεδίαση Σχεσιακής Βάσης Δεδομένων της Εφαρμογής 2.1 Απαιτήσεις 76 2.2 Μοντέλο Οντοτήτων Συσχετίσεων 77 2.3 Ανάλυση Μοντέλου Οντοτήτων Συσχετίσεων 78 2.4 Κανόνες για την μετάβαση από το Μοντέλο Οντοτήτων Συσχετίσεων στη Σχεσιακή Βάση Δεδομένων 80 2.5 Σχεσιακή Βάση Δεδομένων 80 2.6 Τεκμηρίωση Σχεσιακής Βάσης Δεδομένων. 82 2.7 Μέθοδος Ορθότητας Μοντέλου 84 2.8 Συναρτησιακές Εξαρτήσεις. 85 Γ Μέρος: Έλεγχος Εφαρμογής. 3.1 Σκοπός του Ελέγχου 90 3.2 Έλεγχος κλειστού κουτιού 91

ΠΑΡΑΡΤΗΜΑ Α : ΕΓΚΑΤΑΣΤΑΣΗ ΤΟΥ WampServer 2. 131 Παρουσίαση 131 Εγκατάσταση 131 Λειτουργίες 132 Η Αρχή 132 ΠΑΡΑΡΤΗΜΑ Β : Εγχειρίδιο Χρήσης της Εφαρμογής 136 ΠΑΡΑΡΤΗΜΑ Γ : Υλοποίηση λογισμικού για την Ηλεκτρονική Διαχείριση Αποθήκης Εργοστασίου 151

Α ΜΕΡΟΣ 1

ΜΙΑ ΜΙΚΡΗ ΑΝΑΦΟΡΑ.. Ο Apache είναι ο δημοφιλέστερος web server. Το λογισμικό αυτό (ο web server) ακούει αιτήσεις από έναν πελάτη Browser. Όταν λάβει μια αίτηση την επεξεργάζεται και επιστρέφει στον Browser κάποια δεδομένα τα οποία αντλεί από κάποια κατάλληλα διαμορφωμένη σελίδα, τα δεδομένα αυτά μπορεί να είναι κείμενο και γραφικά. Από την άλλη πλευρά η Php και η Mysql είναι open source γλώσσες προγραμματισμού, οι οποίες συνεργαζόμενες, αποτελούν ένα πολύ δυνατό εργαλείο για την κατασκευή δυναμικών website. Η PHP, της οποίας τα αρχικά αντιπροσωπεύουν το "PHP: Hypertext Preprocessor" είναι μια ευρέως χρησιμοποιούμενη, ανοιχτού κώδικα, γενικού σκοπού scripting γλώσσα προγραμματισμού, η οποία είναι ειδικά κατάλληλη για ανάπτυξη εφαρμογών για το Web και μπορεί να ενσωματωθεί στην HTML. Τέλος η MySql, είναι μια ελεύθερη προς χρήση σχεσιακή βάση δεδομένων και γνωρίζει μεγάλη απήχηση. Η MySQL είναι μια πολύ γρήγορη,πολύ -νηματική, πολύ-χρηστική, αξιόπιστη βάση δεδομένων. Επίσης το σύστημα της MySQL, ανήκει στην κατηγορία των σχεσιακών βάσεων δεδομένων. Το γεγονός αυτό την κάνει αρκετά ευέλικτη στην διαχείριση μεγάλου όγκου πληροφορίας. Όλα τα αποθηκευμένα δεδομένα είναι καταχωρημένα υπό μορφή πινάκων, και υπάρχει μια αλληλεξάρτηση μεταξύ αυτών, μέσω των σχέσεων των πινάκων της βάσης (relationship). Επίσης υποστηρίζει την φυσική και λογική ανεξαρτησία των δεδομένων, όπως αυτά περιγράφονται στα πρότυπα των σχεσιακών βάσεων (RDBMS). Ανάλυση αυτών των προγραμμάτων θα ακολουθήσει εκτενέστερα παρακάτω : 2

1.1 ΤΙ ΕΙΝΑΙ PHP. Το PHP είναι γλώσσα ανάπτυξης διαδικτύου που δημιουργήθηκε από τους υπεύθυνους ανάπτυξης του Παγκόσμιου Ιστού. Το PHP είναι ένας Προεπεξεργεστής υπερκειμένων (Hypertext Preprocessor). Αρχικά ονομάστηκε προσωπικό εργαλείο κατασκευής ιστοσελίδων,(personal Home Page Tools ) και πολλοί ακόμη θεωρούν ότι αυτό το αρκτικόλεξο αντιπροσωπεύει τα αρχικά του PHP. Αλλά καθώς η φήμη του επεκτάθηκε ένα νέο και πιο κατάλληλο όνομα επιλέχτηκε από το κοινό. Το PHP αυτή τη περίοδο είναι στη πέμπτη του έκδοση η οποία ξαναγράφεται, αποκαλούμενη ως PHP5 ή απλά PHP. To PHP είναι μια γλώσσα που αφορά το server-side scripting, η οποία μπορεί να ενσωματωθεί μέσα σε HTML ή να χρησιμοποιηθεί ως αυτόνομο δυαδικό (αν και η χρήση ως φόρμα είναι πιο κοινή). Τα ιδιόκτητα προϊόντα σε αυτήν την θέση είναι της Microsoft Active Server Pages, ColdFusion Macromedia, και Sun s Java Server Pages. Μερικοί δημοσιογράφοι της τεχνολογίας αποκάλεσαν το PHP "ASP ανοιχτής πηγής" επειδή η λειτουργία του είναι παρόμοια με αυτή. Αν και προϊόν της Microsoft, ωστόσο αυτή η διατύπωση ήταν παραπλανητική, καθώς το PHP αναπτύχθηκε πριν από την ASP. Τα τελευταία χρόνια, εντούτοις το PHP και η server-side Java έχουν κερδίσει έδαφος, ενώ η ASP έχει χάσει, και έτσι αυτή η σύγκριση δεν φαίνεται πλέον να είναι η κατάλληλη. προς το παρόν μπορείτε να θεωρήσετε το server side scripting ως μια συλλογή super-html ετικετών ή μικρά προγράμματα που τρέχουν μέσα ιστοσελίδας σας εκτός της πλευράς του server, προτού να σταλθούν στον browser. Παραδείγματος χάριν, μπορείτε να χρησιμοποιήστε τo PHP για να προσθέσετε τις κοινές επιγραφές και τις υποσημειώσεις σε όλες τις σελίδες σ ένα site ή για να αποθηκεύσει τα form submitted data σε μια βάση δεδομένων. Στη κυριολεξία, το PHP έχει λίγο να κάνει με σχεδιαγράμματα, γεγονότα στο χειρισμό DOM, ή πραγματικά τίποτα για το πώς μια ιστοσελίδα μπορεί να είναι. Στην πραγματικότητα, το μεγαλύτερο μέρος από αυτό που μπορεί να κάνει το PHP είναι αόρατο στον τελικό χρήστη. Κάποιος που εξετάζει μια σελίδα PHP δεν θα είναι σε θέση να πει ότι δεν γράφτηκε καθαρά στο HTML, επειδή συνήθως το αποτέλεσμα του PHP είναι HTML Τo PHP είναι μια επίσημη ενότητα του Apache http server, η αγορά πλέον ξεχειλίζει από δωρεάν Web servers που τρέχουν περίπου 67 τοις εκατό του World Wide Web (σύμφωνα με έρευνα του ευρέως αναφερμένο Netcraft Web server). Αυτό σημαίνει ότι η μηχανή PHP scripting μπορεί να χτιστεί μόνη της στον Web Server, οδηγώντας τη γρηγορότερη επεξεργασία, την αποδοτικότερη κατανομή μνήμης, και απλούστευση της συντήρησης. Όπως ο Apache server, τo PHP είναι μια πλήρης πλατφόρμα, που αυτό σημαίνει ότι τρέχει σε αρκετές εκδοχές των Unix, καθώς επίσης και στα Windows και τώρα και στα MAC OS Χ. Όλα τα προγράμματα κάτω από την αιγίδα του Apache Software Foundation συμπεριλαμβανομένου και του PHP είναι ανοικτή πηγή λογισμικού. 3

1.1.1 Η Ιστορία του PHP. Ο Lerdorf Rasmus, Μηχανικός λογισμικού μέλος της ομάδας Apache, είναι ο δημιουργός και η αρχικά κατευθυντήρια δύναμη πίσω από το PHP. Το πρώτο μέρος του PHP αναπτύχθηκε για την προσωπική χρήση του στα τέλη του 1994. Αυτό ήταν ένα περιτύλιγμα της CGI που τον βοήθησε να παρακολουθήσει τα άτομα που υπέκλεβαν τα προσωπικά του Site. Το επόμενο έτος, δημιούργησε ένα πακέτο αποκαλούμενο ως Personal Home Page Tools (PHP) σε απάντηση στην απαίτηση των χρηστών που υπέκλεβαν τις εργασίες του. Η έκδοση 2 κυκλοφόρησε σύντομα με τον τίτλο PHP/FI και συμπεριλαμβανόμενου του Form Interpreter, ένα εργαλείο για τα ερωτήματα της SQL. Στα μέσα του 1997, το PHP χρησιμοποιούνταν σε περίπου 50.000 περιοχές παγκοσμίως. Ήταν σαφώς δύσκολο για οποιοδήποτε πρόσωπο να το χειριστεί, ακόμη και για κάποιον τόσο συγκεντρωμένο και ενεργητικό σαν τον Rasmus. Μια μικρή ομάδα ανάπτυξης τρέχει το πρόγραμμα open source με το μοντέλο development junta με συνεισφορές από τους υπεύθυνους για την ανάπτυξη και χρήστες από όλο τον κόσμο. Οι Zeev Suraski και Andi Gutmans, δύο ισραηλινοί προγραμματιστές που ανέπτυξαν το PHP3 και PHP4, έχουν γενικεύσει και έχουν επεκτείνει την εργασία τους κάτω από τη ρουμπρίκα του Zend.com. Το τέταρτο τρίμηνο του 1998 άρχισε μια περίοδο εκρηκτικής αύξησης για το PHP και όπως όλες οι open source τεχνολογίες απόλαυσε την ογκώδη δημοσιότητα. Τον Οκτώβριο του 1998, σύμφωνα με την καλύτερη εικασία, ακριβώς πάνω από 100.000 domains χρησιμοποιούσαν το PHP με οποιοδήποτε τρόπο. Ακριβώς κατά τη διάρκεια του επόμενου έτους, η χρήση του PHP αυξήθηκε σε ένα εκατομμύριο domains. Στο πρώτο εξάμηνο του 2000 η χρήση του PHP αυξήθηκε σε δύο εκατομμύρια domains, επίσης υπολογίζεται ότι 15 εκατομμύρια δημόσιοι Web Servers έχουν εγκαταστήσει το PHP για τη χρήση του μόνο σε software. Οι δημόσιες επεκτάσεις του PHP καλύπτουν κλίμακα από μαζικές αγορές site όπως τα Web site Excite Webmail και Indianapolis 500, που εξυπηρετούν εκατομμύρια χρήστες ιστοσελίδων ανά ημέρα, μέσω του massniche" site όπως το Sourceforge.net και το Epinions.com, τα οποία τείνουν να έχουν την υψηλότερη λειτουργία αναγκών και εκατοντάδες χιλιάδες χρήστες, στο ηλεκτρονικό εμπόριο και στα brochureware sites όπως το ηλεκτρονικά βιβλιοπωλεία Harvard.com και Sade.com, τα οποία πρέπει να είστε οπτικά ελκυστικά και να έχουν ευκολία ενημέρωσης. Υπάρχουν επίσης PHP sites, όπως τα φόρουμ του Internet Movie Database (imdb.com) και μια μεγάλη εγκατεστημένη βάση PHP μη δημόσιας ανάπτυξης, όπως οι κατάλογοι LDAP (η MCI WorldCom δημιούργησε μία με 100.000 καταχωρήσεις). Στη νεότερη έκδοση του, το PHP5 προσπαθεί να παραδώσει κάτι για το οποίο πολλοί χρήστες έχουν διαμαρτυρηθεί τα τελευταία χρόνια: τη πολλή βελτιωμένη αντικειμενοστραφής λειτουργία προγραμματισμού (OOP). 4

Το PHP έχει από καιρό στη χρήση του το πρότυπο λειτουργίας αντικειμενοστραφούς προγραμματισμού που επιτρέπει τους προγραμματιστές να βγάλουν τα αποτελέσματα και τις πληροφορίες που χρειάζονται με έναν τρόπο οικείο για αυτούς. Αυτές οι προσπάθειες δεν έχουν πλησιάσει ακόμα την ιδέα του ιδανικού για πολλούς προγραμματιστές, εντούτοις, οι προσπάθειες ενσωμάτωσης του PHP στα πλήρως αντικειμενοστραφή συστήματα παρήγαγαν συχνά απρομελέτητα αποτελέσματα και έβλαπταν την απόδοση. Η νέα έκδοση PHP5 είναι το πρόσφατα ανοικοδομημένο πρότυπο αντικειμένου φέρνει το PHP σε σύγκριση με άλλες αντικειμενοστραφείς γλώσσες τέτοιες όπως η Java και η C ++, που προσφέρουν την υποστήριξη για χαρακτηριστικά γνωρίσματα όπως overloading, interfaces, private member μεταβλητές και μέθοδοι, και άλλες τυποποιημένες OOP κατασκευές. Με την αποτυχία του dot-com bubble, το PHP χρησιμοποιήθηκε σε περισσότερα site από ποτέ. Η απαίτηση για απόδοση λειτουργίας μέσω Web έχει μειώσει πολύ λίγo και η ανάπτυξη των τεχνολογικών προτύπων συνεχίζει να αυξάνεται συνεχώς, αλλά διαθέσιμη χρηματοδότηση για hardware, άδειες, και ειδικά η μέτρηση ατόμων έχει μειωθεί δραστικά. Στον κόσμο του Παγκόσμιου Ιστού, η ρηχή καμπύλη εκμάθησης του PHP, η γρήγορη εφαρμογή της νέας λειτουργίας του, και το χαμηλό κόστος της επέκτασης του είναι επιχειρήματα που δύσκολα συγκρίνονται με άλλα. 1.1.2 ΠΛΕΟΝΕΚΤΗΜΑΤΑ ΤΗΣ PHP Κάποιοι από τους βασικούς ανταγωνιστές της PHP είναι οι Perl, Microsoft Active Server Pages (ASP), Java Server Pages (JSP) και Allaire Cold Fusion. Σε σύγκριση με αυτά τα προϊόντα, η PHP έχει πολλά πλεονεκτήματα, όπως: Υψηλή απόδοση Διασυνδέσεις με πολλά διαφορετικά συστήματα βάσεων δεδομένων Ενσωματωμένες βιβλιοθήκες για πολλές συνηθισμένες Web διαδικασίες Χαμηλό κόστος Ευκολία μάθησης και χρήσης Μεταφερσιμότητα Διαθεσιμότητα του κώδικα προέλευσης 5

1.1.2.1 Λεπτομερής περιγραφή των πλεονεκτημάτων Απόδοση Η PHP είναι πολύ αποτελεσματική. Με ένα φθηνό διακομιστή, μπορείτε να εξυπηρετήσετε εκατομμύρια επισκέψεων καθημερινά. Οι δοκιμές που δημοσιεύθηκαν από την Zend Technologies, δείχνουν ότι η PHP ξεπερνά τους ανταγωνιστές της. Ολοκλήρωση με Βάσεις Δεδομένων Η PHP έχει εγγενείς συνδέσεις για πολλά συστήματα βάσεων δεδομένων. Εκτός από την MySQL, μπορείτε να συνδεθείτε κατευθείαν με τις βάσεις δεδομένων PostgreSQL, msql, Oracle, dbm, filepro, Hyperwave, Informix, InterBase και Sybase, μεταξύ των άλλων. Χρησιμοποιώντας Open Database Connectivity Standard (ODBC), μπορείτε να συνδεθείτε σε οποιαδήποτε βάση δεδομένων παρέχει ένα πρόγραμμα οδήγησης ODBC. Αυτό περιλαμβάνει και τα προϊόντα της Microsoft products, μεταξύ των άλλων. Ενσωματωμένες Βιβλιοθήκες Επειδή η PHP σχεδιάσθηκε για να χρησιμοποιείται στο Web, έχει πολλές ενσωματωμένες βιβλιοθήκες, που εκτελούν πολλές χρήσιμες λειτουργίες σχετικά με το Web. Μπορείτε να δημιουργήσετε εικόνες GIF δυναμικά, να συνδεθείτε με άλλες υπηρεσίες δικτύων, να στείλετε ηλεκτρονικό ταχυδρομείο, να δουλέψετε με cookies και να δημιουργήσετε PDF έγγραφα όλα αυτά με λίγες γραμμές κώδικα. Κόστος Η PHP είναι δωρεάν. Μπορείτε να μεταφέρετε την τελευταία εκδοσή της χωρίς καμία χρέωση. Εκμάθηση της PHP Η σύνταξη της PHP βασίζεται σε άλλες γλώσσες προγραμματισμού, βασικά στην C και στην Perl. Αν ήδη ξέρετε C ή Perl, ή μια γλώσσα παρόμοια με την C, όπως C++ ή την Java, θα αρχίσετε να προγραμματίζετε με την PHP σχεδόν αμέσως. Μεταφερσιμότητα Η PHP είναι διαθέσιμη για πολλά λειτουργικά συστήματα. Μπορείτε να γράψετε κώδικα PHP για δωρεάν συστήματα τύπου Unix, όπως στο Linux και στο FreeBSD, για εμπορικές εκδόσεις του Unix, όπως το Solaris και το IRIX, ή για διαφορετικές εκδόσεις των Microsoft Windows. 6

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

1.2 ΤΙ ΕΙΝΑΙ Η MYSQL. H MySQL (αναφερόμενη ως Ess Q EL) είναι μια ανοικτή πηγή, SQL Relational Database Management System (RDBMS) που είναι ελεύθερη για πολλές χρήσεις. Στην ιστορία της, η MySQL αντιμετώπισε περιστασιακά την αντίθεση λόγω της έλλειψης υποστήριξής του για μερικά κατασκευάσματα SQL όπως subselects και τα ξένα κλειδιά (foreign keys). Τελικά, εντούτοις, η MySQL βρήκε μία ευρέως, ενθουσιώδης βάση χρηστών για τους φιλελεύθερους όρους χορήγησης αδειών, τη ζωηρή της απόδοση, και την ευκολία χρήσης της. Η αποδοχή της βοηθήθηκε εν μέρει από την ευρεία ποικιλία άλλων τεχνολογιών όπως το PHP, Java, Perl, Python, και όμοια με αυτά προγράμματα που έχουν ενθαρρύνει τη χρήση της μέσω των σταθερών, καλά τεκμηριωμένων ενοτήτων και επεκτάσεων της. Η MySQL δεν έχει αποτύχει να ανταμείψει την πίστη αυτών των χρηστών με την προσθήκη subselects και ξένων κλειδιών και από τις 4 εκδόσεις της. Οι βάσεις δεδομένων γενικά είναι χρήσιμες, αναμφισβήτητα οι πιο συνεπής χρήσιμη οικογένεια των λογισμικών προϊόντων. Όπως πολλά ανταγωνιστικά προϊόντα, και τα δύο ελεύθερα και εμπορικά, η MySQL δεν είναι μια βάση δεδομένων έως ότου της δοθεί κάποια δομή και μορφή. Κάποιος μπορεί να το σκεφτεί αυτό ως μια διαφορά μεταξύ μιας βάσης δεδομένων και ενός RDBMS (δηλαδή RDBMS συν τις απαιτήσεις χρηστών που είναι ίσες με μια βάση δεδομένων). 1.2.1 Η Ιστορία της MySQL. Ανάλογα με το πόσο λεπτομερειακά κάποιος θα ήθελε να μάθει για την ιστορία της, η MySQL «υπάρχει» από το 1979, όταν ο δημιουργός της, Monty Widenius, εργαζόταν σε μια Σουηδική εταιρία. Ενώ εργαζόταν ακόμη στην εταιρεία αυτή, ο Monty δημιούργησε το UNIREG, ένα τερματικό interface builder που συνέδεσε σε σειρά τα ISAM data stores. Στα 15 χρόνια που μεσολάβησαν, το UNIREG εξυπηρέτησε τους κατασκευαστές του μέσω μιας σειράς μεταφράσεων και επεκτάσεων για να προσαρμόσει τα όλο και περισσότερο μεγάλα σύνολα δεδομένων. Το 1994, όταν άρχισε το TcX να εφαρμόζεται στα data Web άρχισαν να εμφανίζονται ρωγμές στο UNIREG, που αρχικά είχαν να κάνουν με τα γενικά έξοδα εφαρμογής. Αυτό έκανε τον Monty και τους συναδέλφους του να ψάξουν για άλλα εργαλεία. Ένα από τα εργαλεία που διερεύνησαν ήταν το Hughes msql, μια ελαφριά και δραστήρια εφαρμογή βάσεων δεδομένων που αναπτύχθηκε από τον David Hughes. To msql κατείχε τα ευδιάκριτα πλεονεκτήματα της ανέξοδης και κάπως «οχυρωμένης» εφαρμογής στην αγορά, καθώς επίσης περιείχε και τα χαρακτηριστικά ενός αρκετά καλά ανεπτυγμένου API client. Η σειρά 1,0 της msql, παρουσίασε μια ελλιπής εύρεση σε ότι αφορά ένα χαρακτηριστικό γνώρισμα κρίσιμο για την απόδοση σε μεγάλη ποσότητες αποθηκευμένων δεδομένων. Αν και η σειρά 2,0 της 8

msql θα έκανε την προσθήκη αυτού του χαρακτηριστικού γνωρίσματος, η ιδιαίτερη αυτή εφαρμογή που χρησιμοποιήθηκε δεν ήταν συμβατή με τα χαρακτηριστικά γνωρίσματα του συστήματος UNIREG Β+. Από αυτό το σημείο και έπειτα γεννήθηκε η MySQL( τουλάχιστον εννοιολογικά). Ο Monty και η ομάδα του αποφάσισαν να αρχίσουν με την ουσιαστική δουλειά που είχε ήδη γίνει στο UNIREG ενώ αναπτυσσόταν ένα νέο API που ήταν ουσιαστικά παρόμοιο με αυτό που χρησιμοποιήθηκε από τη msql, με την εξαίρεση της δημιουργίας ενός σχεδίου για πιο αποτελεσματική έρευση από αυτή που πρόσφερε το UNIREG. Μέχρι τις αρχές του 1995, η ομάδα είχε έτοιμη την πρώτη έκδοση αυτού του νέου προϊόντος. Του έδωσαν το όνομα MySQL και αργότερα την ίδια χρονιά, το δουλέψανε υπό ένα συνδυασμό open source και εμπορικής χορήγησης αδειών που επέτρεψαν τη συνεχή ανάπτυξη του προϊόντος παρέχοντας ένα ρεύμα εισοδήματος για MySQL ΑΒ, την εταιρεία που εξελίχτηκε από την ομάδα του TcX. Κατά τη διάρκεια των προηγούμενων δέκα ετών, η MySQL έχει αναπτυχθεί σε ένα προϊόν παγκόσμιας κατηγορίας. Η MySQL τώρα ανταγωνίζεται ακόμη και με τις πιο πλούσιες και εμπορικές εφαρμογές βάσεων δεδομένων όπως η Oracle και η Informix. Οι προσθήκες που έγιναν στη 4.x έκδοσή της έχουν περιλάβει πιο εξεζητημένα χαρακτηριστικά γνωρίσματα όπως συναλλαγές και ξένη βασική υποστήριξη. Όλο αυτό έχει καταστήσει τη MySQL ως μια παγκόσμια πολυχρησιμοποιημένη open source βάση δεδομένων. 1.2.2 ΠΛΕΟΝΕΚΤΗΜΑΤΑ ΤΗΣ MYSQL Μερικοί από τους κύριους ανταγωνιστές της MySQL είναι οι PostgreSQL, Microsoft SQL Server και Oracle. Η MySQL έχει πολλά πλεονεκτήματα όπως: Υψηλή απόδοση Χαμηλό κόστος Ευκολία χρήσης Μεταφερσιμότητα Κώδικας προέλευσης 9

1.2.2.1 Λεπτομερής περιγραφή των πλεονεκτημάτων Απόδοση Η MySQL είναι χωρίς αμφιβολία γρήγορη. Έχουν γίνει πολλές δοκιμές οι οποίες δείχνουν ότι είναι αρκετά πιο γρήγορη από τον ανταγωνισμό. Χαμηλό Κόστος Η MySQL είναι διαθέσιμη δωρεάν, με άδεια ανοικτού κώδικα, ή με χαμηλό κόστος, αν πάρετε εμπορική άδεια, αν απαιτείται για την εφαρμογή σας. Ευκολία Χρήσης Οι περισσότερες μοντέρνες βάσεις δεδομένων χρησιμοποιούν SQL. Αν έχετε χρησιμοποιήσει ένα άλλο σύστημα διαχείρισης βάσεων δεδομένων, δεν θα πρέπει να έχετε πρόβλημα να προσαρμοστείτε σε αυτό. Η MySQL είναι επίσης ευκολότερη από παρόμοια προϊόντα. Μεταφερσιμότητα Η MySQL μπορεί να χρησιμοποιηθεί σε διαφορετικά συστήματα UNIX, όπως επίσης και στα Microsoft Windows. Κώδικας Προέλευσης Όπως και με την PHP, μπορείτε να πάρετε και να τροποποιήσετε τον κώδικα προέλευσης της MySQL. 1.2.3 Οι Τύποι Δεδομένων της MySQL Ο σωστός ορισμός των πεδίων ενός πίνακα είναι σημαντικός για την συνολική βελτιστοποίηση μιας βάσης δεδομένων. Θα πρέπει πάντα να χρησιμοποιείται τον τύπο δεδομένων και το μέγεθος που χρειάζεστε πραγματικά για κάθε πεδίο δηλαδή, δεν θα πρέπει να ορίζετε ένα πεδίο με μέγεθος 10 χαρακτήρες εάν ξέρετε ότι θα το χρησιμοποιείτε πάντα για την αποθήκευση τιμών 2 χαρακτήρων. Αυτοί οι τύποι πεδίων αναφέρονται σαν τύποι δεδομένων, είδη ορίζουν τα είδη δεδομένων που μπορείτε να αποθηκεύσετε στα πεδία. Η MySQL χρησιμοποιεί πολλούς διαφορετικούς τύπους δεδομένων, οι οποίοι ταξινομούνται σε τρεις κατηγορίες: αριθμητικοί, ημερομηνίας/ώρας και αλφαριθμητικών. 10

1.2.3.1 Οι Αριθμητικοί Τύποι Δεδομένων Η MySQL χρησιμοποιεί όλους τους αριθμητικούς τύπους δεδομένων της ANSI SQL. Στην ακόλουθη λίστα παρουσιάζονται οι πιο κοινοί τύποι δεδομένων, μαζί με τις περιγραφές τους. INT: Ένας ακέραιος κανονικού μεγέθους, ο οποίος μπορεί να είναι είτε προσημασμένος, είτε μη-προσημασμένος. Εάν είναι προσημασμένος, το υποστηριζόμενο πεδίο τιμών είναι από -2147483648 έως 2147483647. Εάν είναι μη-προσημασμένος, το υποστηριζόμενο πεδίο τιμών είναι από 0 έως 4294967295.Το μέγιστο μήκος του είναι 11 ψηφία. TINYINT: Ένας πολύ μικρός ακέραιος, ο οποίος μπορεί να είναι είτε προσημασμένος, είτε μη-προσημασμένος. Εάν είναι προσημασμένος, το υποστηριζόμενο πεδίο τιμών είναι από -128 έως 127. Εάν είναι μηπροσημασμένος, το υποστηριζόμενο πεδίο τιμών είναι από 0 έως 255.Το μέγιστο μήκος του είναι 4 ψηφία. SMALLINT: Ένας μικρός ακέραιος, ο οποίος μπορεί να είναι είτε προσημασμένος, είτε μη-προσημασμένος. Εάν φέρει πρόσημο, το υποστηριζόμενο πεδίο τιμών είναι από -32768 έως 32767. Εάν δε φέρει πρόσημο, το υποστηριζόμενο πεδίο τιμών είναι από 0 έως 65535. Το μέγιστο μήκος του είναι 5 ψηφία. MEDIUMINT: Ένας μεσαίου μεγέθους ακέραιος, ο οποίος μπορεί να είναι είτε προσημασμένος, είτε μη-προσημασμένος. Εάν φέρει πρόσημο, το υποστηριζόμενο πεδίο τιμών είναι από -8388608 έως 8388607. Εάν δε φέρει πρόσημο, το υποστηριζόμενο πεδίο τιμών είναι από 0 έως 16777215. Το μέγιστο μήκος του είναι 9 ψηφία. BIGINT: Ένας μεγάλος ακέραιος, ο οποίος μπορεί να είναι είτε προσημασμένος, είτε μη-προσημασμένος. Εάν φέρει πρόσημο, το υποστηριζόμενο πεδίο τιμών είναι από -9223372036854775808 έως 9223372036854775807. Εάν δε φέρει πρόσημο, το υποστηριζόμενο πεδίο τιμών είναι από 0 έως 18446744073709551615. Το μέγιστο μήκος του είναι 11 ψηφία. FLOAT (M, D): Ένας αριθμός κινητής υποδιαστολής, ο οποίος μπορεί να είναι μη-προσημασμένος. Μπορείτε να ορίσετε το μέγεθος εμφάνισης (Μ) και το πλήθος των δεκαδικών(d). Αυτές οι παράμετροι δεν είναι απαραίτητες εάν δεν τις καθορίσετε, χρησιμοποιούνται οι τιμές 10,2, όπου το 2 είναι ο αριθμός των δεκαδικών και το 10 ο συνολικός αριθμός ψηφίων (συμπεριλαμβανομένων των δεκαδικών). Η ακρίβεια μιας τιμής τύπου FLOAT μπορεί να φτάσει τα 24 δεκαδικά ψηφία. 11

DOUBLE (M, D): Ένας αριθμός κινητής υποδιαστολής διπλής ακρίβειας, ο οποίος δεν μπορεί να είναι μη-προσημασμένος. Μπορείτε να ορίσετε το μέγεθος εμφάνισης (Μ) και το πλήθος των δεκαδικών (D). Αυτές οι παράμετροι δεν είναι απαραίτητες εάν δεν τις καθορίσετε, χρησιμοποιούνται οι τιμές 16,4, όπου ο 4 είναι ο αριθμός των δεκαδικών. Η ακρίβεια μιας τιμής τύπου DOUBLE μπορεί να φτάσει τα 53 δεκαδικά ψηφία. Ο όρος REAL είναι συνώνυμος του όρου DOUBLE. DECIMAL (M, D): Ένας μη-συμπιεσμένος αριθμός κινητής υποδιαστολής, ο οποίος δεν μπορεί να είναι μη-προσημασμένος. Στους μη-συμπιεσμένους αριθμούς τύπου DECIMAL, κάθε δεκαδικό ψηφίο αντιστοιχεί σε ένα byte. Είναι υποχρεωτικό να ορίσετε το μέγεθος εμφάνισης (Μ) και το πλήθος των δεκαδικών (D). Το NUMERIC είναι ένα συνώνυμο για τον τύπο DECIMAL. Από όλους του αριθμητικούς τύπους δεδομένων που υποστηρίζει η MySQL, κατά πάσα πιθανότητα θα χρησιμοποιείτε πιο συχνά τον INT. Εάν ορίσετε τα πεδία σας σε πιο μικρότερο μέγεθος απ όσο πραγματικά χρειάζεστε, να συναντήσετε διάφορα προβλήματα για παράδειγμα, εάν ορίσετε ένα πεδίο αποθήκευσης κωδικών με τύπο δεδομένων TINYINT (μηπροσημασμένο), δεν θα μπορέσετε να προσθέσετε την 256 η εγγραφή στον πίνακα σας εάν το πεδίο αυτό είναι πρωτεύον κλειδί. 1.2.3.2 Τύποι Δεδομένων για Τιμές Ημερομηνίας/ Ώρας H MySQL υποστηρίζει αρκετούς τύπους δεδομένων για την αποθήκευση τιμών ημερομηνίας/ώρας, και αυτοί οι τύποι δεδομένων είναι ιδιαίτερα ευέλικτοι όσον αφορά στην είσοδο δεδομένων από τον χρήστη. Με άλλα λόγια μπορείτε να εισάγετε ημερομηνίες οι οποίες δεν είναι πραγματικές, όπως για παράδειγμα η 30 Φεβρουαρίου. Μπορείτε επίσης να αποθηκεύσετε ημιτελείς τιμές ημερομηνίας τιμές από τις οποίες λείπουν κάποια στοιχεία. Η ευελιξία των τύπων δεδομένων ημερομηνίας/ώρας της MySQL σημαίνει επίσης ότι όλη η ευθύνη για τον έλεγχο των ημερομηνιών επαφίεται στον δημιουργό της εφαρμογής. Η MySQL ελέγχει μόνο την εγκυρότητα δύο στοιχείων: ότι η τιμή για τον μήνα ανήκει στο πεδίο τιμών 0-12 και η τιμή για την ημέρα ανήκει στο πεδίο τιμών 0-31. Η MySQL δεν ελέγχει αυτόματα εάν η 30 η ημέρα του δεύτερου μήνα είναι μία έγκυρη ή μη-έγκυρη ημερομηνία. Οι τύποι δεδομένων που υποστηρίζει η MySQL για τις τιμές ημερομηνίας/ώρας είναι: DATE: Μία τιμή ημερομηνίας με την μορφή ΕΕΕΕ-ΜΜ-ΗΗ, μεταξύ 1000-01-01 και 9999-12-31. για παράδειγμα, η 30 η Δεκεμβρίου 1973 θα αποθηκευτεί σαν 1973-12-30. DATETIME: Ένας συνδυασμός τιμών ημερομηνίας και ώρας με την μορφή ΕΕΕΕ-ΜΜ-ΗΗ ΩΩ:ΛΛ:ΔΔ, μεταξύ 1000-01-01 00:00:00 και 12

9999-12-31 23:59:59. για παράδειγμα, η ώρα 3:30 το μεσημέρι της 30 ης Δεκεμβρίου 1973 αποθηκεύεται σαν 1973-12-30 15:30:00. TIMESTAMP: Μια χρονική ένδειξη ανάμεσα στα μεσάνυχτα της 1 ης Ιανουαρίου 1970 και στο έτος 2003. Μπορείτε να ορίζετε πολλαπλά μήκη στο πεδίο TIMESTAMP, το οποίο συσχετίζεται άμεσα με την οποιαδήποτε τιμή αποθηκεύεται σε αυτό. Το προεπιλεγμένο μήκος για τον τύπο δεδομένων TIMESTAMP είναι 14 και αποθηκεύει τιμές της μορφής ΕΕΕΕΜΜΗΗΩΩΛΛΔΔ. Η μορφή αυτή δείχνει παρόμοια με την μορφή του τύπου δεδομένων DATETIME, χωρίς τις παύλες ανάμεσα στους αριθμούς η ώρα 3:30 το μεσημέρι της 30 ης Δεκεμβρίου του 1973 αποθηκεύεται σαν 19731230153000. Άλλα μεγέθη διαθέσιμα για τον τύπο δεδομένων TIMESTAMP είναι τα 12 (ΕΕΜΜΗΗΩΩΛΛΔΔ), 8 (ΕΕΕΕΜΜΗΗ), και 6 (ΕΕΜΜΗΗ). TIME: Αποθηκεύει την ώρα σε μορφή ΩΩ:ΛΛ:ΔΔ. YEAR (Μ): Αποθηκεύει ένα έτος σε διψήφια ή τετραψήφια μορφή. Εάν η παράμετρος μεγέθους (Μ) οριστεί σε 2, το έτος μπορεί να είναι από 1970 έως 2069 (70 έως 69). Εάν η παράμετρος μεγέθους οριστεί σε 4, το έτος μπορεί να είναι από 1901 έως 2155. Το προεπιλεγμένο μέγεθος είναι 4. Κατά πάσα πιθανότητα θα χρησιμοποιείτε τους τύπους δεδομένων DATETIME ή DATE πιο συχνά από οποιανδήποτε άλλο σχετιζόμενο με ημερομηνίες/ώρες τύπο δεδομένων. 1.2.3.3 Τύποι Αλφαριθμητικών Αν και οι τύποι δεδομένων για τους αριθμούς και τις τιμές ημερομηνίας/ώρας είναι χρήσιμοι, τα περισσότερα δεδομένα που αποθηκεύετε θα είναι σε μορφή αλφαριθμητικών. Η ακόλουθη λίστα περιγράφει τους πιο κοινούς τύπους δεδομένων για αλφαριθμητικά που υποστηρίζει η MySQL. CHAR (M): Ένα αλφαριθμητικό σταθερού μεγέθους, με μέγεθος μεταξύ 1 και 255 χαρακτήρες (για παράδειγμα, CHAR (5)), στο οποίο προστίθενται κενά διαστήματα στα δεξιά μέχρι να φτάσει στο προσδιοριζόμενο μήκος. Ο ορισμός μήκους δεν είναι απαραίτητος, αλλά το προεπιλεγμένο μήκος είναι 1. VARCHAR(M): Ένα αλφαριθμητικό μεταβλητού μεγέθους, με μήκος από 1 έως 255 χαρακτήρες (για παράδειγμα, VARCHAR(25)). Θα πρέπει να ορίζετε την παράμετρο μήκους όταν δημιουργείτε ένα πεδίο VARCHAR. BLOB ή TEXT: Ένα πεδίο με μέγιστο μέγεθος 65535 χαρακτήρες. Ο όρος BLOB είναι ακρωνύμιο του Binary Large Objects, που σημαίνει 13

μεγάλα αντικείμενα δυαδικής μορφής. Ο τύπος BLOB χρησιμοποιείτε για την αποθήκευση μεγάλων ποσοτήτων δυαδικών δεδομένων, όπως για παράδειγμα εικόνες ή άλλοι τύποι αρχείων. Τα πεδία που ορίζονται με τύπο TEXT αποθηκεύουν επίσης μεγάλες ποσότητες δεδομένων, η διαφορά μεταξύ των δύο είναι ότι οι λειτουργίες ταξινόμησης και σύγκρισης που εκτελούνται στα αποθηκευμένα δεδομένα κάνουν διάκριση μεταξύ κεφαλαίων/ πεζών χαρακτήρων για τα δεδομένα του BLOB, ενώ αυτό δεν ισχύει για τα πεδία με τύπο δεδομένων TEXT. Οι τύποι δεδομένων BLOB και TEXT δεν απαιτούν από εσάς να καθορίσετε μέγεθος. TINYBLOB ή TINYTEXT: Ένα πεδίο τύπου BLOB ή TEXT με μέγιστο μέγεθος 255 χαρακτήρες. Για τους τύπους TINYBLOB ή TINYTEXT δεν καθορίζεται μέγεθος. MEDIUMBLOB ή MEDIUMTEXT: Ένα πεδίο τύπου BLOB ή TEXT με μέγιστο μέγεθος 16777215 χαρακτήρες. Για τους τύπους MEDIUMBLOB ή MEDIUMTEXT δεν καθορίζεται μέγεθος. LONGBLOB ή LONGTEXT: Ένα πεδίο τύπου BLOB ή TEXT με μέγιστο μέγεθος 4294967295 χαρακτήρες. Για τους τύπους LONGBLOB ή LONGTEXT δεν καθορίζεται μέγεθος. ENUM: Μία απαρίθμηση δηλαδή, μία λίστα. Όταν ορίζετε έναν τύπο ENUM, ουσιαστικά δημιουργείτε μια λίστα στοιχείων, από τα οποία πρέπει να επιλεχθεί μια τιμή. Για παράδειγμα, εάν θέλετε το πεδίο σας να περιέχει μία από τις τιμές Α, Β, Γ, θα έπρεπε να το ορίσετε ENUM ( Α, Β, Γ ), έτσι ώστε μόνο αυτές οι τιμές να μπορούν να εισαχθούν στο πεδίο. Ένας τύπος ENUM μπορεί να περιέχει 65535 διαφορετικές τιμές. Κατά πάσα πιθανότητα θα χρησιμοποιείτε πεδία με τύπους δεδομένων VARCHAR και TEXT πιο συχνά από τους άλλους τύπους δεδομένων. 1.2.4 Η Εντολή για την Δημιουργία Πινάκων Η εντολή για την δημιουργία ενός πίνακα απαιτεί τα ακόλουθα στοιχεία: a) Το όνομα του πίνακα b) Τα ονόματα των πεδίων c) Έναν ορισμό για κάθε πεδίο Η γενική σύνταξη για την εντολή δημιουργίας πίνακα είναι: CREATE TABLE όνομα πίνακα (όνομα_στήλης τύπος_στήλης); Το όνομα του πίνακα είναι δική σας επιλογή, αλλά θα πρέπει ν α αντικατοπτρίζει την χρήση ή τον ρόλο του πίνακα. Για παράδειγμα, εάν έχετε 14

έναν πίνακα για την παρακολούθηση των αποθεμάτων ενός παντοπωλείου, δεν θα ήταν συνετό εκ μέρους σας να του δώσετε το όνομα s. Ένα λογικό και περιγραφικό θα ήταν κάτι του στυλ grocery_inventory. Παρόμοια. Τα ονόματα των πεδίων θα πρέπει να είναι όσο το δυνατόν πιο περιγραφικά και συσχετιζόμενα με τον ρόλο των πεδίων ή με τα δεδομένα που αποθηκεύουν. Για παράδειγμα, για το πεδίο το οποίο θα αποθηκεύει τα ονόματα των προϊόντων, ένα καλό όνομα θα είναι item_name και όχι το n. Το ακόλουθο παράδειγμα δημιουργεί έναν γενικευμένο πίνακα grocery_inventory με πεδία για τον κωδικό (id), το όνομα (item_name), την περιγραφή (item_desc), την τιμή (item_price) και την ποσότητα (curr_qty) των προϊόντων: mysql> CREATE TABLE grocery_inventory ( -> id int not null primary key, -> item_name varchar (50) not null, -> item_desc text, -> item_price float not null, -> curr_qty int not null -> ); Query OK, 0 rows affected (0.02 sec) Ο MySQL server ανταποκρίνεται με το μήνυμα Query OK κάθε φορά που εκτελείτε επιτυχώς ένα ερώτημα, ανεξαρτήτου του τύπου του. Σε κάθε άλλη περίπτωση εμφανίζετε ένα μήνυμα σφάλματος. 1.2.4.1 Χρήση της Εντολής INSERT Αφού δημιουργηθούν κάποιοι πίνακες, θα χρησιμοποιείτε την εντολή insert της SQL για να προσθέτετε νέες εγγραφές σ αυτούς. Η βασική σύνταξη της εντολής insert είναι: INSERT INTO όνομα_πίνακα (λίστα στηλών) VALUES (τιμές στηλών); Στη λίστα των τιμών μέσα στις παρενθέσεις τα αλφαριθμητικά θα πρέπει να περικλείονται σε εισαγωγικά. Η SQL χρησιμοποιεί εξ ορισμού απόστροφους, αλλά η MySQL σας επιτρέπει να επιλέξετε εάν χρησιμοποιείτε απόστροφους ή εισαγωγικά. Μην ξεχνάτε να χρησιμοποιείτε τον χαρακτήρα \ πριν από τα εισαγωγικά που περιλαμβάνονται στο ίδιο αλφαριθμητικό. Ακολουθεί ένα παράδειγμα αλφαριθμητικού στο οποίο είναι απαραίτητη η χρήση του χαρακτήρα \: INSERT INTO όνομα_πίνακα (όνομα_στήλης) VALUES ( εισαγωγή στον πίνακα \ grocery_inventory\ ); 15

1.2.4.2 Αναλυτική Παρουσίαση της Εντολής INSERT Εκτός από το όνομα του πίνακα, δύο είναι τα βασικά μέρη της εντολής insert: Η λίστα των στηλών Η λίστα των τιμών Στην πραγματικότητα, η μόνη απαιτούμενη είναι η λίστα των τιμών, αλλά εάν παραλείψετε την λίστα των στηλών, θα πρέπει να κατονομάζετε ρητά κάθε στήλη με την σειρά στην λίστα των τιμών. Χρησιμοποιώντας για παράδειγμα τον πίνακα grocery_inventory, έχετε πέντε πεδία τα: id, item_name, item_desc, item_price και curr_qty. Για να εισαγάγετε μία πλήρη εγγραφή σ αυτό τον πίνακα, θα μπορούσατε να ακολουθήσετε οποιαδήποτε από τις ακόλουθες εντολές: Μία εντολή στην οποία κατονομάζονται όλες οι στήλες: Insert into grocery_inventory (id, item_name, item_desc, item_price, curr_qty) values (1, Apples, Beautiful ripe apples, 0.25, 1000); Μία εντολή που χρησιμοποιεί όλες τις στήλες, αλλά δεν τις κατονομάζει ρητά: Insert into grocery_inventory values (1, Apples, Beautiful ripe apples, 0.25, 1000); Τα αποτελέσματα που θα πρέπει να πάρουμε κατά την εκτέλεση των παραπάνω εντολών στην MySQL είναι παρόμοια με τα παρακάτω: mysql> Insert into grocery_inventory -> (id, item_name, item_desc, item_price, curr_qty) -> values -> (1, Apples, Beautiful ripe apples, 0.25, 1000); Query OK, 1 row affected (0.01 sec) mysql> Insert into grocery_inventory -> values -> (1, Apples, Beautiful ripe apples, 0.25, 1000); Query OK, 1 row affected (0.01 sec) 16

Εάν στόχος μας είναι να αφήσουμε την MySQL να αυξάνει την τιμή του ιd αυτόματα καθώς είναι ένας αυτόματα αυξανόμενος ακέραιος, θα πρέπει να χρησιμοποιήσετε μία από τις ακόλουθες εντολές: Μία εντολή στην οποία κατονομάζονται όλες οι στήλες εκτός της id: Insert into grocery_inventory ( item_name, item_desc, item_price, curr_qty) values ( Bottled Water (6 pack), 500ml spring water, 2.29, 250); Μία εντολή η οποία χρησιμοποιεί όλες τις στήλες, αλλά δεν τις κατονομάζει ρητά, και περιλαμβάνει την καταχώρηση NULL στο πεδίο id: Insert into grocery_inventory values ( NULL, Bottled Water (6 pack), 500ml spring water, 2.29, 250); Το ποια μορφή της εντολής θα επιλέξετε δεν έχει σημασία για την MySQL, αλλά θα πρέπει να επιλέξετε μία μορφή και να παραμείνετε σταθεροί σ αυτήν καθ όλη την διάρκεια ανάπτυξης της εφαρμογής σας. Η συνέπεια και η ομοιομορφία στις συμβάσεις και στις δομές που χρησιμοποιείτε είναι δύο πλεονεκτήματα τα οποία θα σας διευκολύνουν κατά την αποσφαλμάτωση της εφαρμογής, επειδή θα ξέρετε τι πρέπει να περιμένετε σε κάθε περίπτωση. 1.2.5 Χρήση της Εντολής SELECT H Select είναι η εντολή της SQL που χρησιμοποιείτε για την ανάκτηση εγγράφων από έναν πίνακα. Η σύνταξη αυτής της εντολής μπορεί να είναι εντελώς απλή, ή εξαιρετικά πολύπλοκη. εξής: Στην απλούστερη μορφή της, η σύνταξη της εντολής Select είναι η SELECT εκφράσεις_και_στήλες FROM όνομα_πίνακα [WHERE συνθήκη_αληθής ] [ORDER BY κάποια στήλη [ASC DESC]] [LIMIT μετάθεση, γραμμές] Ας ξεκινήσουμε με την πρώτη γραμμή: SELECT εκφράσεις_και_στήλες FROM όνομα_πίνακα Μία ιδιαίτερα βολική έκφραση είναι το σύμβολο * το οποίο αντιπροσωπεύει «τα πάντα». Συνεπώς, για να επιλέξετε όλες τις γραμμές και 17

όλες τις στήλες από τον πίνακα grocery_inventory, η εντολή Select θα πρέπει να έχει την ακόλουθη μορφή: SELECT * FROM grocery_inventory; Τα αποτελέσματα που θα πάρετε ανάλογα με τα στοιχεία που θα έχετε εισαγάγει στον πίνακα grocery_inventory θα πρέπει να δείχνουν παρόμοια με την ακόλουθη λίστα: mysql> select * from grocery_inventory; id item_name item_desc item_price curr_qty 1 Apples Beautiful, 0.25 1000 ripe apples 2 Bunches of grapes 3 Bottled water (6- pack) 3 rows in set (0.00 sec) Seedless grapes 500ml spring water 2.99 500 2.29 250 Εάν θέλετε να επιλέξετε μόνο συγκεκριμένες στήλες, αντικαταστήστε τον χαρακτήρα * με τα ονόματα των επιθυμητών στηλών διαχωρισμένα με κόμματα. Η ακόλουθη εντολή επιλέγει μόνο τα πεδία id, item_name και curr_qty από τον πίνακα grocery_inventory. mysql> select id, item_name, curr_qty from grocery_inventory; id item_name curr_qty 1 Apples 1000 2 Bunches of grapes 500 3 Bottled water (6- pack) 250 3 rows in set (0.00 sec) 1.2.5.1 Ταξινόμηση των Αποτελεσμάτων που Επιστρέφει η Εντολή SELECT Εξ ορισμού, τα αποτελέσματα των ερωτημάτων που εκτελείτε με την εντολή Select σε έναν πίνακα μιας βάσης δεδομένων εμφανίζονται με την σειρά με την οποία εισαγάγατε τις εγγραφές στον πίνακα, χωρίς κάποιο είδος ταξινόμησης. Εάν θέλετε να ταξινομήσετε τα αποτελέσματα με έναν συγκεκριμένο τρόπο, όπως π.χ κατά κωδικό, όνομα κ.λ.π, θα πρέπει να καθορίσετε αυτή την απαίτηση σας στην εντολή χρησιμοποιώντας την πρόταση ORDER BY. Στο αποτέλεσμα της ακόλουθης εντολής, οι εγγραφές θα εμφανιστούν ταξινομημένες κατά όνομα προϊόντος: 18

mysql> select id, item_name, curr_qty from grocery_inventory -> order by item_name; id item_name curr_qty 1 Apples 1000 3 Bottled water (6- pack) 250 2 Bunches of grapes 500 3 rows in set (0.04 sec) Η προεπιλεγμένη σειρά ταξινόμησης που χρησιμοποιεί η πρόταση ORDER BY είναι αύξουσα (ASC) τα αλφαριθμητικά ταξινομούνται αλφαβητικά, από το Α έως το Ω, οι ακέραιοι αυξητικά ξεκινώντας από το 0 και οι ημερομηνίες από την παλαιότερη έως την νεότερη. Μπορείτε επίσης να καθορίσετε φθίνουσα σειρά ταξινόμησης χρησιμοποιώντας την λέξη DESC: mysql> select id, item_name, curr_qty from grocery_inventory -> order by item_name desc; id item_name curr_qty 2 Bunches of grapes 500 3 Bottled water (6- pack) 250 1 Apples 1000 3 rows in set (0.04 sec) Δεν περιορίζεστε σε ταξινόμηση βάσει ενός μόνο πεδίου, μπορείτε να καθορίσετε όσα πεδία θέλετε, διαχωρίζοντας τα ονόματα τους με κόμματα. Η σειρά ταξινόμησης αντικατοπτρίζει την σειρά με την οποία κατονομάζετε τα πεδία. Περιορίζοντας τα Αποτελέσματα που Παίρνετε με την SELECT Μπορείτε να χρησιμοποιείτε την εντολή Limit για να ανακτάτε μόνο έναν συγκεκριμένο αριθμό εγγράφων στο αποτέλεσμα ενός ερωτήματος που εισάγετε με την εντολή Select. Δύο είναι οι παράμετροι που πρέπει να καθορίζετε όταν χρησιμοποιείτε την πρόταση Limit: η μετάθεση και το πλήθος των γραμμών. Η μετάθεση είναι η θέση έναρξης. Υποθέστε ότι έχετε περισσότερες από 2-3 εγγραφές στον πίνακα grocery_inventory και θέλετε να επιλέξετε τον κωδικό, το όνομα και την ποσότητα για τις πρώτες τρεις εγγραφές και να τις εμφανίσετε ταξινομημένες βάσει της τρέχουσας ποσότητας. Η ακόλουθη πρόταση Limit καθορίζει ότι η επιλογή θα ξεκινήσει από την αρχή του πίνακα και θα φτάσει μέχρι την Τρίτη εγγραφή: 19

mysql> select id, item_name, curr_qty from grocery_inventory -> order by curr_qty limit 3; id item_name curr_qty 4 Bananas 150 3 Bottled water (6- pack) 250 2 Bunches of grapes 500 3 rows in set (0.00 sec) Η πρόταση Limit μπορεί να αποδειχθεί ιδιαίτερα χρήσιμη σε μία πραγματική εφαρμογή. Για παράδειγμα, μπορείτε να χρησιμοποιείτε την πρόταση Limit σε μία σειρά εντολών SELECT για να εξετάζετε τα αποτελέσματα «σελίδα προς σελίδα». 1) SELECT * FROM grocery_inventory ORDER BY curr_qty LIMIT 0,3; 2) SELECT * FROM grocery_inventory ORDER BY curr_qty LIMIT 3,3; 3) SELECT * FROM grocery_inventory ORDER BY curr_qty LIMIT 6,3; Εάν καθορίσετε μετάθεση και αριθμό γραμμών στο ερώτημά σας και δεν βρεθούν αποτελέσματα, δεν θα δείτε ένα μήνυμα σφάλματος, επιστρέφει απλώς ένα κενό σύνολο εγγραφών. Για παράδειγμα, εάν ο πίνακας grocery_inventory περιέχει μόνο 6 εγγραφές, το ερώτημα στο οποίο η πρόταση Limit έχει τιμή 6 στην παράμετρο μετάθεσης δεν θα παράγει αποτέλεσμα. 1.2.6 Χρήση της Πρότασης WHERE στα Ερωτήματα σας Η πρόταση Where έρχεται να καλύψει την ανάγκη να μπορούμε να ανακτάμε συγκεκριμένες γραμμές από τους πίνακες τις βάσης δεδομένων. Από την βασική σύνταξη της Select, μπορείτε να δείτε ότι η πρόταση Where χρησιμοποιείται για τον καθορισμό μιας συγκεκριμένης συνθήκης. SELECT εκφράσεις_και_στήλες FROM όνομα_πίνακα [WHERE συνθήκη_αληθής ] Ένα παράδειγμα θα ήταν η ανάκτηση των εγγράφων όλων των προϊόντων υπάρχει διαθέσιμη ποσότητα 500: 20

mysql> select * from grocery_inventory where curr_qty=500; id item_name item_desc item_price curr_qty 2 Bunches of Seedless 2.99 500 grapes grapes 5 Pears Anjou, nice 0.5 500 and sweet 2 rows in set (0.00 sec) Στο προηγούμενο παράδειγμα χρησιμοποιούμε έναν ακέραιο στην συνθήκη της πρότασης Where. Όταν χρησιμοποιείτε ακέραιες τιμές, δεν χρειάζεται να τις περικλείετε σε εισαγωγικά. Τα εισαγωγικά είναι απαραίτητα μόνο για αλφαριθμητικά, όπου ισχύουν επίσης οι ίδιοι κανόνες όσον αφορά στην χρήση του χαρακτήρα \, όπως αναφέραμε και για την εντολή Insert. Χρήση Τελεστών σε Προτάσεις WHERE Στο προηγούμενο παράδειγμα χρησιμοποιήσαμε τον τελεστή ίσον( =) στην πρόταση Where για να καθοριστεί η αλήθεια της συνθήκης. Μπορείτε να χρησιμοποιήσετε πολλούς τύπους τελεστών, οι δημοφιλέστεροι είναι οι τελεστές σύγκρισης και οι λογικοί τελεστές. 1.2.7 Οι βασικοί τελεστές σύγκρισης και η σημασία τους είναι: Τελεστής Σημασία = Ίσο με!= Άνισο( διάφορο) <= Μικρότερο από ή ίσο με < Μικρότερο από >= Μεγαλύτερο από ή ίσο με > Μεγαλύτερο από Υπάρχει επίσης ένας βολικός τελεστής με το όνομα Between, ο οποίος είναι χρήσιμος για συγκρίσεις μεταξύ ακεραίων και άλλων δεδομένων, επειδή αναζητεί τα αποτελέσματα του μεταξύ μιας ελάχιστης και μιας μέγιστης τιμής. mysql> select * from grocery_inventory -> where item_price between 1.50 and 3.00; 21

id item_price item_desc item_price curr_qty 2 Bunches of Seedless 2.99 500 grapes grapes 3 Bottled water 500ml spring 2.29 250 (6- pack) water 4 Bananas Bunches, green 1.99 150 3 rows in set (0.00 sec) Υπάρχουν επίσης οι λογικοί τελεστές, οι οποίοι σας επιτρέπουν να χρησιμοποιείτε πολλαπλές συγκρίσεις στην πρόταση Where. Οι βασικοί λογικοί τελεστές είναι οι AND και OR. Όταν χρησιμοποιείτε τον τελεστή AND, όλες οι συγκρίσεις που περιλαμβάνετε στην πρόταση Where πρέπει να είναι αληθείς. Από την άλλη, ο τελεστής OR απαιτεί να είναι αληθής τουλάχιστον μία από τις συγκρίσεις της πρότασης Where. Συγκρίσεις Αλφαριθμητικών με τον Τελεστή LIKE Ιδιαίτερα χρήσιμος για την σύγκριση αλφαριθμητικών σε προτάσεις WHERE είναι ο τελεστής LIKE. Ο τελεστής αυτός χρησιμοποιεί δύο χαρακτήρες μπαλαντέρ για τις αναζητήσεις του: % Ταιριάζει με πολλαπλούς χαρακτήρες _ ταιριάζει με έναν ακριβώς χαρακτήρα Εάν θέλετε να βρείτε τις εγγραφές του πίνακα grocery_inventory στις οποίες το όνομα του προϊόντος ξεκινά με το γράμμα «Α», μπορείτε να χρησιμοποιήσετε την ακόλουθη εντολή: mysql> select * from grocery_inventory where item_name like A% ; id item_name item_desc item_price curr_qty 1 Apples Beautiful, ripe apples 0.25 1000 6 Avocado Large Haas 0.99 750 variety 1.2.8 Επιλογή Δεδομένων από Πολλαπλούς Πίνακες Η επιλογή δεδομένων δεν περιορίζετε από έναν πίνακα την φορά. Όταν επιλέγετε δεδομένα από περισσότερους από έναν πίνακα με μία εντολή Select, οι πίνακες ενώνονται για την παραγωγή του αποτελέσματος. Υποθέστε ότι έχετε δύο πίνακες, τους fruit και color. Μπορείτε να επιλέξετε όλες τις γραμμές από τους δύο πίνακες χρησιμοποιώντας δύο 22

ξεχωριστές εντολές SELECT. Όταν θέλετε να επιλέξετε ταυτόχρονα από δύο πίνακες, υπάρχουν ορισμένες διαφορές στην σύνταξη της εντολής SELECT. Όταν επιλέγετε δεδομένα από πολλαπλούς πίνακες, θα πρέπει να δίνετε ιδιαίτερη προσοχή στην σύνταξη της πρότασης WHERE για να διασφαλίζετε ότι θα πάρετε το σωστό αποτέλεσμα. Στην περίπτωση των πινάκων fruit και color, αυτό που θέλετε πραγματικά είναι να εμφανίσετε τα πεδία με τα ονόματα των φρούτων και τα ονόματα χρωμάτων από τους δύο πίνακες για τις εγγραφές με τους ίδιους κωδικούς στο πεδίο id. Η σύνταξη της εντολής θα είναι ως εξής: Όνομα_πίνακα, όνομα_πεδίου Συνεπώς, το ερώτημα για την επιλογή των ονομάτων και των χρωμάτων των φρούτων από τους δύο πίνακες για τις εγγραφές με τον ίδιο κωδικό πρέπει να διατυπωθεί ως εξής: mysql> select fruitname, colorname from fruit, color where fruit.id=color.id; fruitname Apple Orange Grape Banana 4 rows in set (0.00 sec) colorname Red Orange Purple Yellow 1.2.9 Χρήση της Εντολής UPDATE για την Τροποποίηση Εγγράφων Η εντολή UPDATE είναι μία εντολή της SQL η οποία χρησιμοποιείται για την τροποποίηση του περιεχομένου μιας ή περισσότερων στηλών σε μία υπάρχουσα εγγραφή ενός πίνακα. Στην απλούστερη μορφή της, η σύνταξη της εντολής UPDATE είναι: UPDATE όνομα_πίνακα SET στήλη1= νέα τιμή, στήλη2= νέα τιμή2 [ WHERE συνθήκη_αληθής] Η γενική διαδικασία για την ενημέρωση μιας εγγραφής είναι παρόμοια με αυτή που χρησιμοποιείται για την εισαγωγή μιας εγγραφής, τα δεδομένα 23

που εισάγετε πρέπει να είναι κατάλληλα για τον τύπο δεδομένων του πεδίου που τροποποιείτε. Για παράδειγμα υποθέστε ότι έχετε έναν πίνακα με το όνομα fruit ο οποίος περιλαμβάνει τα πεδία id, fruit_name και status, τα οποία περιέχουν, αντίστοιχα, δεδομένα για τον κωδικό, το όνομα και την κατάσταση των φρούτων: mysql> SELECT * FROM fruit; id fruit_name status 1 apple ripe 2 pear rotten 3 banana Ripe 4 grape rotten 4 rows in set (0.00 sec) Για να αλλάξετε την κατάσταση ενός φρούτου σε ripe, χρησιμοποιείστε την εντολή: mysql> update fruit set status= ripe ; Query OK, 2 rows affected (0.00 sec) Rows matched: 4 Changed: 2 Warnings: 0 Θα πρέπει να είστε ιδιαίτερα προσεκτικοί και να χρησιμοποιείτε μια συνθήκη ελέγχου όταν ενημερώνετε έναν πίνακα, εκτός και αν σκοπεύετε πράγματι να αλλάξετε όλες τις στήλες για όλες τις εγγραφές στην ίδια τιμή. Σαν παράδειγμα, υποθέστε ότι το όνομα του φρούτου grape έχει γραφτεί με λάθος τρόπο στον πίνακα και θέλετε να χρησιμοποιήσετε την εντολή UPDATE για να διορθώσετε αυτό το λάθος. Εάν χρησιμοποιήσετε την εντολή mysql> update fruit set fruit_name= grape ; το αποτέλεσμα θα ήταν να τροποποιηθούν όλες και οι τέσσερις εγγραφές και να μετατραπούν όλα τα φρούτα σε grape. Η σωστή εντολή UPDATE για την διόρθωση είναι η εξής: mysql> update fruit set fruit_name= grape where fruit_name= grappe ; Query OK, 1 rows affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 24

Σ αυτή την περίπτωση επιλέχθηκε και τροποποιήθηκε μόνο μία γραμμή. Όλος ο υπόλοιπος πίνακας fruit παραμένει άθικτος και όλα τα ονόματα των φρούτων είναι σωστά: mysql> select * from fruit; id fruit_name status 1 apple ripe 2 pear ripe 3 banana ripe 4 grape ripe 4 rows in set (0.00 sec) Χρήση Υπαρχουσών Τιμών Στηλών στην UPDATE Ένα άλλο σημαντικό χαρακτηριστικό της UPDATE είναι η δυνατότητα χρήσης της τρέχουσας τιμής μιας εγγραφής σαν τιμή βάσης. Για παράδειγμα, ας χρησιμοποιήσουμε τον πίνακα grocery_inventory. mysql> select * from grocery_inventory; id item_name item_desc item_price curr_qty 1 Apples Beautiful, 0.25 1000 ripe apples 2 Bunches of grapes 3 Bottled water (6- pack) Seedless grapes 500ml spring water 4 Bananas Bunches, green 5 Pears Anjou, nice and sweet 6 Avocado Large Haas variety 6 rows in set (0.00 sec) 2.99 500 2.29 250 1.99 150 0.5 500 0.99 750 Όταν κάποιος αγοράζει ένα μήλο, ο πίνακας του παντοπωλείου θα πρέπει να ενημερώνετε ανάλογα. Ωστόσο, επειδή δεν είστε σε θέση να ξέρετε ανά πάσα στιγμή την τρέχουσα ποσότητα κάθε προϊόντος, δεν ξέρετε ποιόν αριθμό πρέπει να εισάγετε για την στήλη curr_qty, το μόνο που ξέρετε είναι ότι πουλήσατε ένα μήλο. Σ αυτή τη περίπτωση, μπορείτε να χρησιμοποιήσετε σαν βάση την τρέχουσα τιμή αυτής της στήλης και να αφαιρέσετε 1 από αυτή: mysql> update grocery_inventory set curr_qty= curr_qty- 1 where id=1; Query OK, 1 rows affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 25

Η παραπάνω εντολή υπολογίζει μια νέα τιμή για την στήλη curr_qty(999), όπως φαίνετε παρακάτω. mysql> select * from grocery_inventory; id item_name item_desc item_price curr_qty 1 Apples Beautiful, ripe apples 0.25 999 2 Bunches of Seedless 2.99 500 grapes grapes 3 Bottled water (6- pack) 500ml spring water 4 Bananas Bunches, green 5 Pears Anjou, nice and sweet 6 Avocado Large Haas variety 6 rows in set (0.00 sec) 2.29 250 1.99 150 0.5 500 0.99 750 1.2.10 Χρήση της Εντολής DELETE Η βασική σύνταξη για την εντολή DELETE είναι: DELETE FROM όνομα_πίνακα [WHERE συνθήκη_αληθής] [LIMIT γραμμές] Υποθέστε ότι έχετε έναν πίνακα με όνομα fruit και την ακόλουθη δομή: mysql> select * from fruit; id fruit_name status 1 apple ripe 2 pear rotten 3 banana ripe 4 grape rotten 4 rows in set (0.00 sec) Η ακόλουθη εντολή θα διαγράψει όλες τις εγγραφές του πίνακα: mysql> delete from fruit; 26

Query OK, 0 rows affected (0.00 sec) Μπορείτε να επιβεβαιώσετε το γεγονός της διαγραφής εκτελώντας μια εντολή SELECT για να επιλέξετε δεδομένα από τον πίνακα: mysql> select * from fruit; Empty set(0.00 sec) Διαγραφή Υπό Συνθήκες Μια εντολή DELETE η οποία εκτελείται υπό συνθήκες, όμοια με μία εντολή SELECT ή UPDATE η οποία εκτελείται υπό συνθήκες, χρησιμοποιεί μια πρόταση WHERE για την επιλογή συγκεκριμένων εγγραφών. Για παράδειγμα, ας δούμε την διαγραφή όλων των εγγραφών από τον πίνακα fruit όπου έχουν status=rotten: mysql> delete from fruit where status= rotten ; Query OK, 2 rows affected (0.00 sec) Όπως υποδεικνύει το μήνυμα, διαγράφτηκαν δύο εγγραφές. Στον πίνακα παραμένουν μόνο οι εγγραφές ώριμων φρούτων: mysql> select * from fruit; Id fruit_name status 1 apple ripe 3 banana ripe 2 rows in set (0.00 sec) 27

1.3 ΤΙ ΕΙΝΑΙ Ο APACHE Διακομιστές Διαδικτύου (Web Servers) Αναρωτηθήκατε ποτέ για τους μηχανισμούς με τους οποίους μία ιστοσελίδα εμφανίζεται στον πλοηγό που χρησιμοποιείτε όταν δίνετε ένα συγκεκριμένο URL(Uniform Resource Locator); Γενικά όλα τα μηχανήματα που είναι συνδεδεμένα στο Internet κατηγοριοποιούνται σε δύο τύπους: Πελάτες(Clients) Διακομιστές(Servers) Οι διακομιστές είναι τα μηχανήματα που προσφέρουν υπηρεσίες ενώ οι πελάτες είναι τα μηχανήματα που ζητούν και δέχονται τις υπηρεσίες αυτές. Ένα μηχάνημα μπορεί να είναι οποιουδήποτε τύπου ακόμα και των δύο συγχρόνως. Ανάλογα με τις υπηρεσίες που προσφέρουν οι διακομιστές στο διαδίκτυο διαχωρίζονται σε: Web Servers E-mail Servers FTP Servers Το ενδιαφέρον μας εστιάζεται στους Web Servers. Στο παρακάτω σχήμα περιγράφονται με έναν πολύ απλό τρόπο τα βήματα που ακολουθούνται για να εμφανιστεί μια ιστοσελίδα στο μηχάνημα του πελάτη: Σχήμα 1 Διαδικασία εμφάνισης μιας σελίδας στον πελάτη 28