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

Σχετικά έγγραφα
Οι εντολές CREATE TABLE, ALTER TABLE, CREATE KEY, ALTER KEY.

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


DELETE, UPDATE, INSERT

DELETE, UPDATE, INSERT.

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

1 / 105

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

1 / 150



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

Ερωτήματα επιλογής με σύζευξη πινάκων

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

DISTINCT, LIKE, NULL, AND, OR, BETWEEN

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι Ενότητα 3:

Βάσεις Δεδομένων Ι SQL Μέρος 3 ο. (Constraints & Joins) Φώτης Κόκκορας (MSc/PhD) Τμήμα Μηχανικών Πληροφορικής ΤΕ

ΕΠΛ 342 Βάσεις εδοµένων

Βάσεις Δεδομένων (Databases)

Πρόλογος Μέρος Ι Μια βόλτα στις βάσεις δεδομένων Μια βόλτα στις βάσεις δεδομένων...25

Φυσική Σχεδίαση Υλοποίηση βάσης


Ακεραιότητα και Ασφάλεια Μέρος 1 Σχεδιασμός Βάσεων Δεδομένων

Διάλεξη 07: Σχεσιακό Μοντέλο II (Relational Data Model) Διδάσκων: Παναγιώτης Ανδρέου

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


Σχεδίαση και λειτουργία βάσης δεδομένων Το παράδειγμα της μαιευτικής κλινικής Ευάγγελος Καρβούνης

1 / 106

ΚΕΡΑΜΟΠΟΥΛΟΣ ΕΥΚΛΕΙΔΗΣ


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

GROUP BY, HAVING, COUNT, MIN, MAX, SUM, AVG, ROLLUP.

Το σχεσιακό μοντέλο βάσεων δεδομένων

Το Μοντέλο των Οντοτήτων Συσχετίσεων Entity Relationship Model. Νικόλαος Ζ. Ζάχαρης

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

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

Παράδειγμα Insert Update Delete Alter.. Εργαστήριο Βάσεων Δεδομένων. Εισαγωγή στη MySQL (2)


1 / 97

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

1 / 87

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

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

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


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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

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

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

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

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

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

Ενεργές ΒΔ. Παύλος Εφραιμίδης pefraimi <at> ee.duth.gr. Βάσεις Δεδομένων Ενεργές ΒΔ 1

Πανεπιστήµιο Ιωαννίνων Τµήµα Μαθηµατικών Μάθηµα: Βάσεις εδοµένων (741) Εργαστηριακό Τεστ Οµάδα: Α 18/11/2004

ΗΓλώσσαSQL. Εισαγωγή Βασικές Έννοιες Τύποι Δεδομένων Ορισμός Δεδομένων Χειρισμός Δεδομένων

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 9β: SQL (Διαχείριση εγγραφών, Όψεις, Περιορισμοί, Εναύσματα) Ευαγγελίδης Γεώργιος. Τμήμα Εφαρμοσμένης Πληροφορικής

Διάλεξη 16: SQL DML IV, SQL DCL, SQL TCL. Διδάσκων: Παναγιώτης Ανδρέου

Βάσεις Δεδομένων ΗγλώσσαSQL (Structured Query Language)

Βάσεις Δεδομένων Η γλώσσα SQL (Structured Query Language) Εισαγωγή στην SQL (2) Ιστορικά Στοιχεία. SQL - Structured Query Language (1)

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

Βάσεις Δεδομένων (Databases)

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

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

2 ο Σύνολο Ασκήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Βάσεις Δεδομένων. Ενότητα 7.2: Structured Query Language - 2 ο Μέρος. Αθανάσιος Σπυριδάκος Τμήμα Διοίκησης Επιχειρήσεων

Αρχεία και Βάσεις Δεδομένων

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

(Μέρος 3:Γλώσσα Ορισµού, Γλώσσα Τροποποίησης, Ενσωµατωµένη SQL) Βάσεις εδοµένων Ευαγγελία Πιτουρά 2

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

ΕΝΑΥΣΜΑΤΑ ΣΤΗΝ POSTGRES

Βάσεις Περιβαλλοντικών Δεδομένων

ΚΕΦΑΛΑΙΟ ΤΡΙΤΟ ΕΝΤΟΛΕΣ SQL

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

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

Department of Computer Science University of Cyprus. EPL342 Databases. Lecture 8: RM II. Relational Model. (Chapter )

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

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

ΚΕΡΑΜΟΠΟΥΛΟΣ ΕΥΚΛΕΙΔΗΣ

Βάσεις Δεδομένων. Εισαγωγή για το Εργαστήριο. Δρ. Τιάκας Ελευθέριος. Τμήμα Πληροφορικής ΑΠΘ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Βάσεις Δεδομένων (4 ο εξάμηνο) Εργαστήριο MySQL #3

Κεφάλαιο 6. Περιορισμοί Ακεραιότητας Βάσεων Δεδομένων

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

Σχεδιασμός Πληροφοριακών Συστημάτων. Σημειώσεις

Ανάκτηση Δεδομένων (Information Retrieval)

Ανοικτά Ακαδημαϊκά Μαθήματα

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά) ΤΕΙ ΔυτικήςΜακεδονίας

Postgress ΣΤΟΧΟΣ ΣΧΕΤΙΚΟ ΕΚΠΑΙ ΕΥΤΙΚΟ ΥΛΙΚΟ. ΠΕΡΙΒΑΛΛΟΝ ΓΙΑ ΕΞΑΣΚΗΣΗ pgadmin ΥΠΟΒΑΘΡΟ. Συναρτήσεις στην PostgreSQL. 1. Γενικά

Κεφ 4: Προχωρημένες Εντολές SQL

Τεχνολογία Πολιτισμικού Λογισμικού

Εισαγωγή στην πληροφορική

ΗΥ-360 Αρχεία και Βάσεις Δεδομένων Διδάσκων: Δ. Πλεξουσάκης. Φροντιστήριο SQL Examples Ξένου Ρουμπίνη

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ - SQL

Παράδειγμα Select Introduction Group By Join Aliases.. Εργαστήριο Βάσεων Δεδομένων. Εισαγωγή στη MySQL (3)

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

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

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

Transcript:

Η γλώσσα ορισμού δεδομένων της SQL Οι εντολές CREATE TABLE, ALTER TABLE, CREATE KEY, ALTER KEY Αθανάσιος Σταυρακούδης http://stavrakoudis.econ.uoi.gr astavrak@uoi.gr @AStavrakoudis Άνοιξη 2016 1 / 85

Περιεχόμενα 1 Δημιουργία πινάκων με την εντολή CREATE TABLE 2 Περιορισμοί ξένου κλειδιού 2 / 85

Σκοπός της διάλεξης 3 / 85

Σκοπός της διάλεξης 1 Να δημιουργείτε πίνακες και να να ορίζετε τα πεδία που περιέχουν (CREATE TABLE). 4 / 85

Σκοπός της διάλεξης 1 Να δημιουργείτε πίνακες και να να ορίζετε τα πεδία που περιέχουν (CREATE TABLE). 2 Να εφαρμόζετε τους περιορισμούς πρωτεύοντος (PRIMARY KEY) και ξένου κλειδιού (FOREIGN KEY). 5 / 85

Σκοπός της διάλεξης 1 Να δημιουργείτε πίνακες και να να ορίζετε τα πεδία που περιέχουν (CREATE TABLE). 2 Να εφαρμόζετε τους περιορισμούς πρωτεύοντος (PRIMARY KEY) και ξένου κλειδιού (FOREIGN KEY). 3 Να εφαρμόζετε τα εναύσματα (πυροδοτήσεις) διαδοχικής ενημέρωσης και διαγραφής (ON UPDATE CASCADE, ON DELETE CASCADE). 6 / 85

Σκοπός της διάλεξης 1 Να δημιουργείτε πίνακες και να να ορίζετε τα πεδία που περιέχουν (CREATE TABLE). 2 Να εφαρμόζετε τους περιορισμούς πρωτεύοντος (PRIMARY KEY) και ξένου κλειδιού (FOREIGN KEY). 3 Να εφαρμόζετε τα εναύσματα (πυροδοτήσεις) διαδοχικής ενημέρωσης και διαγραφής (ON UPDATE CASCADE, ON DELETE CASCADE). 4 Να τροποποιείτε τη σχεδίαση των πινάκων με την εντολή ALTER TABLE. 7 / 85

Σκοπός της διάλεξης 1 Να δημιουργείτε πίνακες και να να ορίζετε τα πεδία που περιέχουν (CREATE TABLE). 2 Να εφαρμόζετε τους περιορισμούς πρωτεύοντος (PRIMARY KEY) και ξένου κλειδιού (FOREIGN KEY). 3 Να εφαρμόζετε τα εναύσματα (πυροδοτήσεις) διαδοχικής ενημέρωσης και διαγραφής (ON UPDATE CASCADE, ON DELETE CASCADE). 4 Να τροποποιείτε τη σχεδίαση των πινάκων με την εντολή ALTER TABLE. 5 Να δημιουργείτε δείκτες με την εντολή CREATE INDEX. 8 / 85

Η εντολή CREATE TABLE Γενική μορφή 1 CREATE TABLE πίνακας 2 ( 3 λίστα πεδίων, 4 λίστα περιορισμών, 5 άλλες επιλογές, 6 ); 9 / 85

Η εντολή CREATE TABLE Γενική μορφή 1 CREATE TABLE πίνακας 2 ( 3 λίστα πεδίων, 4 λίστα περιορισμών, 5 άλλες επιλογές, 6 ); Παράδειγμα (μόνο με λίστα πεδίων με ενσωματωμένους περιορισμούς) 1 CREATE TABLE friends 2 ( 3 id INTEGER NOT NULL PRIMARY KEY, 4 name CHAR(20) NOT NULL, 5 age INTEGER, 6 phone CHAR(10) 7 ); 10 / 85

Λίστα περιορισμών Περιορισμοί 1 Περιορισμοί ως προς το πρωτεύον κλειδί (PRIMARY KEY) 2 Περιορισμοί ως προς τα ξένα κλειδιά (FOREIGN KEY) 3 Περιορισμοί για έλεγχο μοναδικότητας (UNIQUE) 4 Περιορισμοί για έλεγχο των εισαγόμενων τιμών (CHECK) 11 / 85

Λίστα περιορισμών Περιορισμοί 1 Περιορισμοί ως προς το πρωτεύον κλειδί (PRIMARY KEY) 2 Περιορισμοί ως προς τα ξένα κλειδιά (FOREIGN KEY) 3 Περιορισμοί για έλεγχο μοναδικότητας (UNIQUE) 4 Περιορισμοί για έλεγχο των εισαγόμενων τιμών (CHECK) Παράδειγμα PRIMARY KEY 1 CONSTRAINT pk PRIMARY KEY(id) 12 / 85

Λίστα περιορισμών Περιορισμοί 1 Περιορισμοί ως προς το πρωτεύον κλειδί (PRIMARY KEY) 2 Περιορισμοί ως προς τα ξένα κλειδιά (FOREIGN KEY) 3 Περιορισμοί για έλεγχο μοναδικότητας (UNIQUE) 4 Περιορισμοί για έλεγχο των εισαγόμενων τιμών (CHECK) Παράδειγμα PRIMARY KEY 1 CONSTRAINT pk PRIMARY KEY(id) Παράδειγμα FOREIGN KEY 1 CONSTRAINT fk_depid FOREIGN KEY(depid) 2 REFERENCES departments (depid) 13 / 85

Σύνθετο πρωτεύον κλειδί Παράδειγμα PRIMARY KEY 1 CREATE TABLE friends 2 ( 3 name CHAR(20) NOT NULL, 4 age INTEGER, 5 phone CHAR(10), 6 CONSTRAINT pk PRIMARY KEY(name, phone) 7 ); 14 / 85

Σύνθετο πρωτεύον κλειδί Παράδειγμα PRIMARY KEY 1 CREATE TABLE friends 2 ( 3 name CHAR(20) NOT NULL, 4 age INTEGER, 5 phone CHAR(10), 6 CONSTRAINT pk PRIMARY KEY(name, phone) 7 ); Προσοχή Ο πίνακας έχει ένα πρωτεύον κλειδί. Το πρωτεύον κλειδί αποτελείται από δύο πεδία του πίνακα. Είναι λάθος να πούμε πως «δύο πεδία είναι πρωτεύοντα κλειδιά». 15 / 85

Παράδειγμα ξένου κλειδί: depid 16 / 85

Παράδειγμα ξένου κλειδί: depid departments 1 CREATE TABLE departments ( 2 depid INTEGER NOT NULL, 3 depname CHAR(30) NOT NULL, 4 manager INTEGER 5 CONSTRAINT pk PRIMARY KEY(depid) 6 ); 17 / 85

Παράδειγμα ξένου κλειδί: depid departments 1 CREATE TABLE departments ( 2 depid INTEGER NOT NULL, 3 depname CHAR(30) NOT NULL, 4 manager INTEGER 5 CONSTRAINT pk PRIMARY KEY(depid) 6 ); employees 1 CREATE TABLE employees ( 2 empid INTEGER NOT NULL, 3 firstname CHAR(30) NOT NULL, 4 lastname CHAR(30) NOT NULL, 5 depid INTEGER NOT NULL, 6 salary DECIMAL(6,2), 7 hiredate DATE, 8 CONSTRAINT pk PRIMARY KEY(empid), 18 / 85

Παράδειγμα ξένου κλειδί: depid departments 1 CREATE TABLE departments ( 2 depid INTEGER NOT NULL, 3 depname CHAR(30) NOT NULL, 4 manager INTEGER 5 CONSTRAINT pk PRIMARY KEY(depid) 6 ); employees 1 CREATE TABLE employees ( 2 empid INTEGER NOT NULL, 3 firstname CHAR(30) NOT NULL, 4 lastname CHAR(30) NOT NULL, 5 depid INTEGER NOT NULL, 6 salary DECIMAL(6,2), 7 hiredate DATE, 8 CONSTRAINT pk PRIMARY KEY(empid), 9 CONSTRAINT fk_depid FOREIGN KEY(depid) 10 REFERENCES departments(depid) 11 ); 19 / 85

Παρατηρήσεις για τα ξένα κλειδιά 1 Γενικά τα ξένα κλειδιά θα πρέπει να είναι ορισμένα με την επιλογή NOT NULL προς αποφυγή διαφόρων ανωμαλιών στην ενημέρωση της βάσης. 20 / 85

Παρατηρήσεις για τα ξένα κλειδιά 1 Γενικά τα ξένα κλειδιά θα πρέπει να είναι ορισμένα με την επιλογή NOT NULL προς αποφυγή διαφόρων ανωμαλιών στην ενημέρωση της βάσης. 2 Τα ξένα κλειδιά δεν έχουν καμία επίδραση στις εντολές SELECT. 21 / 85

Παρατηρήσεις για τα ξένα κλειδιά 1 Γενικά τα ξένα κλειδιά θα πρέπει να είναι ορισμένα με την επιλογή NOT NULL προς αποφυγή διαφόρων ανωμαλιών στην ενημέρωση της βάσης. 2 Τα ξένα κλειδιά δεν έχουν καμία επίδραση στις εντολές SELECT. 3 Η επίδραση που έχουν οι περιορισμοί ξένου κλειδιού αφορά τις πράξεις ενημέρωσης της βάσης (INSERT, DELETE και UPDATE). 22 / 85

Παρατηρήσεις για τα ξένα κλειδιά 1 Γενικά τα ξένα κλειδιά θα πρέπει να είναι ορισμένα με την επιλογή NOT NULL προς αποφυγή διαφόρων ανωμαλιών στην ενημέρωση της βάσης. 2 Τα ξένα κλειδιά δεν έχουν καμία επίδραση στις εντολές SELECT. 3 Η επίδραση που έχουν οι περιορισμοί ξένου κλειδιού αφορά τις πράξεις ενημέρωσης της βάσης (INSERT, DELETE και UPDATE). 4 Αν το ξένο κλειδί παίρνει πολλαπλές τιμές, π.χ. εμφανίζεται πολλές φορές ο ίδιος κωδικός τμήματος για διαφορετικούς υπαλλήλους, τότε ο περιορισμός του ξένου κλειδιού ισοδυναμεί με τη συσχέτιση ένα προς πολλά. 23 / 85

Παρατηρήσεις για τα ξένα κλειδιά 1 Γενικά τα ξένα κλειδιά θα πρέπει να είναι ορισμένα με την επιλογή NOT NULL προς αποφυγή διαφόρων ανωμαλιών στην ενημέρωση της βάσης. 2 Τα ξένα κλειδιά δεν έχουν καμία επίδραση στις εντολές SELECT. 3 Η επίδραση που έχουν οι περιορισμοί ξένου κλειδιού αφορά τις πράξεις ενημέρωσης της βάσης (INSERT, DELETE και UPDATE). 4 Αν το ξένο κλειδί παίρνει πολλαπλές τιμές, π.χ. εμφανίζεται πολλές φορές ο ίδιος κωδικός τμήματος για διαφορετικούς υπαλλήλους, τότε ο περιορισμός του ξένου κλειδιού ισοδυναμεί με τη συσχέτιση ένα προς πολλά. 5 Αν το ξένο κλειδί έχει περιορισμό μοναδικότητας και αναφέρεται σε πεδίο άλλου πίνακα με περιορισμό μοναδικότητας (πχ πρωτεύον κλειδί) τότε αυτό ισοδυναμεί με τη συσχέτιση ένα προς ένα. 24 / 85

Επίδραση ξένου κλειδιού 25 / 85

Επίδραση ξένου κλειδιού Εισαγωγή τμήματος 1 INSERT INTO departments (depid, depname) 2 VALUES (1, Διοίκησης ); 26 / 85

Επίδραση ξένου κλειδιού Εισαγωγή τμήματος 1 INSERT INTO departments (depid, depname) 2 VALUES (1, Διοίκησης ); Εισαγωγή υπαλλήλου 1 INSERT INTO employees (empid, firstname, lastname, depid) 2 VALUES (101, Μαρία, Αθανασίου, 1); 27 / 85

Επίδραση ξένου κλειδιού Εισαγωγή τμήματος 1 INSERT INTO departments (depid, depname) 2 VALUES (1, Διοίκησης ); Εισαγωγή υπαλλήλου 1 INSERT INTO employees (empid, firstname, lastname, depid) 2 VALUES (101, Μαρία, Αθανασίου, 1); Αποτυχία 1 INSERT INTO employees (empid, firstname, lastname, depid) 2 VALUES (201, Κρινιώ, Παπαδοπούλου, 2); 28 / 85

Συσχέτιση πολλά προς πολλά 29 / 85

Συσχέτιση πολλά προς πολλά projects 1 CREATE TABLE projects ( 2 proid INTEGER NOT NULL, 3 title VARCHAR(120) NOT NULL, 4 budget DECIMAL(9,2) NOT NULL DEFAULT 0, 5 startdate DATE, 6 enddate DATE, 7 progress DECIMAL(3,1) NOT NULL DEFAULT 0, 8 CONSTRAINT pk_projects PRIMARY KEY (proid) ); 30 / 85

Συσχέτιση πολλά προς πολλά projects 1 CREATE TABLE projects ( 2 proid INTEGER NOT NULL, 3 title VARCHAR(120) NOT NULL, 4 budget DECIMAL(9,2) NOT NULL DEFAULT 0, 5 startdate DATE, 6 enddate DATE, 7 progress DECIMAL(3,1) NOT NULL DEFAULT 0, 8 CONSTRAINT pk_projects PRIMARY KEY (proid) ); workson 1 CREATE TABLE workson ( 2 empid INTEGER NOT NULL, 3 proid INTEGER NOT NULL, 31 / 85

Συσχέτιση πολλά προς πολλά projects 1 CREATE TABLE projects ( 2 proid INTEGER NOT NULL, 3 title VARCHAR(120) NOT NULL, 4 budget DECIMAL(9,2) NOT NULL DEFAULT 0, 5 startdate DATE, 6 enddate DATE, 7 progress DECIMAL(3,1) NOT NULL DEFAULT 0, 8 CONSTRAINT pk_projects PRIMARY KEY (proid) ); workson 1 CREATE TABLE workson ( 2 empid INTEGER NOT NULL, 3 proid INTEGER NOT NULL, 4 CONSTRAINT pk_workson PRIMARY KEY (empid, proid), 32 / 85

Συσχέτιση πολλά προς πολλά projects 1 CREATE TABLE projects ( 2 proid INTEGER NOT NULL, 3 title VARCHAR(120) NOT NULL, 4 budget DECIMAL(9,2) NOT NULL DEFAULT 0, 5 startdate DATE, 6 enddate DATE, 7 progress DECIMAL(3,1) NOT NULL DEFAULT 0, 8 CONSTRAINT pk_projects PRIMARY KEY (proid) ); workson 1 CREATE TABLE workson ( 2 empid INTEGER NOT NULL, 3 proid INTEGER NOT NULL, 4 CONSTRAINT pk_workson PRIMARY KEY (empid, proid), 5 CONSTRAINT fk_emp FOREIGN KEY (empid) 6 REFERENCES employees(empid), 33 / 85

Συσχέτιση πολλά προς πολλά projects 1 CREATE TABLE projects ( 2 proid INTEGER NOT NULL, 3 title VARCHAR(120) NOT NULL, 4 budget DECIMAL(9,2) NOT NULL DEFAULT 0, 5 startdate DATE, 6 enddate DATE, 7 progress DECIMAL(3,1) NOT NULL DEFAULT 0, 8 CONSTRAINT pk_projects PRIMARY KEY (proid) ); workson 1 CREATE TABLE workson ( 2 empid INTEGER NOT NULL, 3 proid INTEGER NOT NULL, 4 CONSTRAINT pk_workson PRIMARY KEY (empid, proid), 5 CONSTRAINT fk_emp FOREIGN KEY (empid) 6 REFERENCES employees(empid), 7 CONSTRAINT fk_pro FOREIGN KEY (proid) 8 REFERENCES projects(proid) ); 34 / 85

Μοναδικές τιμές UNIQUE index, δείκτης μοναδικότητας 1 CREATE TABLE employees 2 ( 3 empid INTEGER NOT NULL, 4 firstname CHAR(50) NOT NULL, 5 lastname CHAR(50) NOT NULL, 6 amka CHAR(12) NOT NULL, 7 depid INTEGER NOT NULL, 8 salary NUMERIC(6,2), 9 hiredate DATE, 10 CONSTRAINT pk_employees PRIMARY KEY (empid), 35 / 85

Μοναδικές τιμές UNIQUE index, δείκτης μοναδικότητας 1 CREATE TABLE employees 2 ( 3 empid INTEGER NOT NULL, 4 firstname CHAR(50) NOT NULL, 5 lastname CHAR(50) NOT NULL, 6 amka CHAR(12) NOT NULL, 7 depid INTEGER NOT NULL, 8 salary NUMERIC(6,2), 9 hiredate DATE, 10 CONSTRAINT pk_employees PRIMARY KEY (empid), 11 INDEX i_depid (depid), 36 / 85

Μοναδικές τιμές UNIQUE index, δείκτης μοναδικότητας 1 CREATE TABLE employees 2 ( 3 empid INTEGER NOT NULL, 4 firstname CHAR(50) NOT NULL, 5 lastname CHAR(50) NOT NULL, 6 amka CHAR(12) NOT NULL, 7 depid INTEGER NOT NULL, 8 salary NUMERIC(6,2), 9 hiredate DATE, 10 CONSTRAINT pk_employees PRIMARY KEY (empid), 11 INDEX i_depid (depid), 12 UNIQUE u_amka (amka), 37 / 85

Μοναδικές τιμές UNIQUE index, δείκτης μοναδικότητας 1 CREATE TABLE employees 2 ( 3 empid INTEGER NOT NULL, 4 firstname CHAR(50) NOT NULL, 5 lastname CHAR(50) NOT NULL, 6 amka CHAR(12) NOT NULL, 7 depid INTEGER NOT NULL, 8 salary NUMERIC(6,2), 9 hiredate DATE, 10 CONSTRAINT pk_employees PRIMARY KEY (empid), 11 INDEX i_depid (depid), 12 UNIQUE u_amka (amka), 13 CONSTRAINT fk_depid FOREIGN KEY (depid) 14 REFERENCES departments(depid) 15 ); 38 / 85

Περιεχόμενα 1 Δημιουργία πινάκων με την εντολή CREATE TABLE 2 Περιορισμοί ξένου κλειδιού 39 / 85

Πυροδοτήσεις ενημέρωσης 40 / 85

Πυροδοτήσεις ενημέρωσης Διαγραφή 1 ON DELETE [CASCADE RESTRICT SET NULL SET DEFAULT] 41 / 85

Πυροδοτήσεις ενημέρωσης Διαγραφή 1 ON DELETE [CASCADE RESTRICT SET NULL SET DEFAULT] Τροποποίηση 1 ON UPDATE [CASCADE RESTRICT SET NULL SET DEFAULT] 42 / 85

Πυροδοτήσεις ενημέρωσης Διαγραφή 1 ON DELETE [CASCADE RESTRICT SET NULL SET DEFAULT] Τροποποίηση 1 ON UPDATE [CASCADE RESTRICT SET NULL SET DEFAULT] Επεξηγήσεις 43 / 85

Πυροδοτήσεις ενημέρωσης Διαγραφή 1 ON DELETE [CASCADE RESTRICT SET NULL SET DEFAULT] Τροποποίηση 1 ON UPDATE [CASCADE RESTRICT SET NULL SET DEFAULT] Επεξηγήσεις 1 CASCADE Ενεργοποιεί τη διαδοχική πράξη ενημέρωσης ή διαγραφής. 44 / 85

Πυροδοτήσεις ενημέρωσης Διαγραφή 1 ON DELETE [CASCADE RESTRICT SET NULL SET DEFAULT] Τροποποίηση 1 ON UPDATE [CASCADE RESTRICT SET NULL SET DEFAULT] Επεξηγήσεις 1 CASCADE Ενεργοποιεί τη διαδοχική πράξη ενημέρωσης ή διαγραφής. 2 RESTRICT Αποτρέπει την ενημέρωση ή διαγραφή. 45 / 85

Πυροδοτήσεις ενημέρωσης Διαγραφή 1 ON DELETE [CASCADE RESTRICT SET NULL SET DEFAULT] Τροποποίηση 1 ON UPDATE [CASCADE RESTRICT SET NULL SET DEFAULT] Επεξηγήσεις 1 CASCADE Ενεργοποιεί τη διαδοχική πράξη ενημέρωσης ή διαγραφής. 2 RESTRICT Αποτρέπει την ενημέρωση ή διαγραφή. 3 SET NULL Ενημερώνει το ξένο κλειδί σε τιμή NULL. 46 / 85

Πυροδοτήσεις ενημέρωσης Διαγραφή 1 ON DELETE [CASCADE RESTRICT SET NULL SET DEFAULT] Τροποποίηση 1 ON UPDATE [CASCADE RESTRICT SET NULL SET DEFAULT] Επεξηγήσεις 1 CASCADE Ενεργοποιεί τη διαδοχική πράξη ενημέρωσης ή διαγραφής. 2 RESTRICT Αποτρέπει την ενημέρωση ή διαγραφή. 3 SET NULL Ενημερώνει το ξένο κλειδί σε τιμή NULL. 4 SET DEFAULT Ενημερώνει το ξένο κλειδί στην προεπιλεγμένη τιμή (DEFAULT). 47 / 85

ON DELETE CASCADE Παράδειγμα διαδοχικής διαγραφής στον πίνακα workson 1 CREATE TABLE workson 2 ( 3 empid INTEGER NOT NULL, 4 proid INTEGER NOT NULL, 5 CONSTRAINT pk_workson PRIMARY KEY (empid, proid), 6 INDEX i_empid (empid), 7 INDEX i_proid (proid), 8 CONSTRAINT fk_empid FOREIGN KEY (empid) 9 REFERENCES employees(empid) 10 ON DELETE CASCADE, 11 CONSTRAINT fk_proid FOREIGN KEY (proid) 12 REFERENCES projects(proid) 13 ); 48 / 85

Πυροδότηση διαδοχικής διαγραφής SELECT * FROM workson WHERE empid = 419; empid proid -------------- 419 12 419 21 419 43 49 / 85

Πυροδότηση διαδοχικής διαγραφής SELECT * FROM workson WHERE empid = 419; 1 DELETE FROM employees 2 WHERE empid = 419; empid proid -------------- 419 12 419 21 419 43 50 / 85

Πυροδότηση διαδοχικής διαγραφής SELECT * FROM workson WHERE empid = 419; 1 DELETE FROM employees 2 WHERE empid = 419; empid proid -------------- 419 12 419 21 419 43 SELECT * FROM employees WHERE empid = 419; Empty set (0.00 sec) 51 / 85

Πυροδότηση διαδοχικής διαγραφής SELECT * FROM workson WHERE empid = 419; 1 DELETE FROM employees 2 WHERE empid = 419; empid proid -------------- 419 12 419 21 419 43 SELECT * FROM employees WHERE empid = 419; Empty set (0.00 sec) 1 SELECT * 2 FROM workson 3 WHERE empid = 419; 4 5 Empty set (0.00 sec) 52 / 85

ON UPDATE CASCADE Παράδειγμα διαδοχικής ενημέρωσης στον πίνακα workson 1 CREATE TABLE workson 2 ( 3 empid INTEGER NOT NULL, 4 proid INTEGER NOT NULL, 5 CONSTRAINT pk_workson PRIMARY KEY (empid, proid), 6 INDEX i_empid (empid), 7 INDEX i_proid (proid), 8 CONSTRAINT fk_empid FOREIGN KEY (empid) 9 REFERENCES employees(empid) 10 ON DELETE CASCADE 11 ON UPDATE CASCADE, 12 CONSTRAINT fk_proid FOREIGN KEY (proid) 13 REFERENCES projects(proid) 14 ); 53 / 85

ON UPDATE CASCADE 54 / 85

ON UPDATE CASCADE Υπάλληλος με κωδικό 419 1 SELECT * 2 FROM employees 3 WHERE empid = 419; 4 5 empid firstname lastname depid salary hiredate 6 ----------------------------------------------------------- 7 419 Πέτρος Αρβανιτάκης 2 1323.80 2000-07-17 55 / 85

ON UPDATE CASCADE Υπάλληλος με κωδικό 419 1 SELECT * 2 FROM employees 3 WHERE empid = 419; 4 5 empid firstname lastname depid salary hiredate 6 ----------------------------------------------------------- 7 419 Πέτρος Αρβανιτάκης 2 1323.80 2000-07-17 Εργα που συμμετέχει 1 SELECT * 2 FROM workson 3 WHERE empid = 419; 4 5 empid proid 6 ------------- 7 419 12 8 419 21 9 419 43 56 / 85

Τροποποίηση κωδικού (πρωτεύον κλειδί) 57 / 85

Τροποποίηση κωδικού (πρωτεύον κλειδί) Αλλαγή του από κωδικού 419 σε 406 1 UPDATE employees 2 SET empid = 406 3 WHERE empid = 419; 58 / 85

Τροποποίηση κωδικού (πρωτεύον κλειδί) Αλλαγή του από κωδικού 419 σε 406 1 UPDATE employees 2 SET empid = 406 3 WHERE empid = 419; Νέος κωδικός 1 SELECT * 2 FROM employees 3 WHERE empid = 406; 4 5 empid firstname lastname depid salary hiredate 6 ----------------------------------------------------------- 7 419 Πέτρος Αρβανιτάκης 2 1323.80 2000-07-17 59 / 85

Τροποποίηση κωδικού (ξένο κλειδί) 60 / 85

Τροποποίηση κωδικού (ξένο κλειδί) 419 1 SELECT * 2 FROM workson 3 WHERE empid = 419; 4 5 Empty set (0.00 sec) 61 / 85

Τροποποίηση κωδικού (ξένο κλειδί) 419 1 SELECT * 2 FROM workson 3 WHERE empid = 419; 4 5 Empty set (0.00 sec) 406 1 SELECT * 2 FROM workson 3 WHERE empid = 406; 4 5 empid proid 6 ------------- 7 406 12 8 406 21 9 406 43 62 / 85

Αυτοματοποίηση ενημέρωσης UPDATE workson 1 UPDATE workson 2 SET empid = 406 3 WHERE empid = 419; 63 / 85

Αλυσίδα διαγραφής -1 Το τμήμα 2 1 SELECT * 2 FROM departments 3 WHERE depid = 2; 4 5 depid depname manager 6 ------------------------------------------- 7 2 Οικονομολόγων/Λογιστών 153 64 / 85

Αλυσίδα διαγραφής -2 Υπάλληλοι του τμήματος 2 1 SELECT * 2 FROM departments 3 WHERE depid = 2; 4 5 empid firstname lastname depid salary hiredate 6 -------------------------------------------------------------- 7 153 Μαρία Αλεβιζάτου 2 1321.92 2001-05-15 8 243 Δέσποινα Παπαδοπούλου 2 1609.52 1999-03-05 9 419 Πέτρος Αρβανιτάκης 2 1323.80 2000-07-17 10 503 Μαριλένα Κρέσπα 2 1105.04 2001-03-07 65 / 85

Αλυσίδα διαγραφής -3 Απασχόληση των υπαλλήλων του τμήματος 2 1 SELECT w.* 2 FROM employees e INNER JOIN workson w ON e.empid=w.empid 3 WHERE e.depid = 2; 4 5 empid proid 6 ------------- 7 153 14 8 153 38 9 243 21 10 243 38 11 419 12 12 419 21 13 419 43 14 503 21 15 503 38 66 / 85

Διαγραφή Διαγραφή του τμήματος 2 1 DELETE FROM departments 2 WHERE depid = 2; Επιβεβαίωση 1 SELECT * 2 FROM departments 3 WHERE depid = 2; 4 5 Empty set (0.00 sec) 67 / 85

Καταστροφική αλυσίδα διαγραφής 68 / 85

Καταστροφική αλυσίδα διαγραφής Υπάλληλοι 1 SELECT * 2 FROM employees 3 WHERE depid = 2; 4 5 Empty set (0.00 sec) 69 / 85

Καταστροφική αλυσίδα διαγραφής Υπάλληλοι 1 SELECT * 2 FROM employees 3 WHERE depid = 2; 4 5 Empty set (0.00 sec) Απασχόληση σε έργα 1 SELECT w.* 2 FROM employees e INNER JOIN workson w 3 ON e.empid=w.empid 4 WHERE e.depid = 2; 5 6 Empty set (0.00 sec) 70 / 85

ON DELETE RESTRICT Παράδειγμα περιορισμού διαδοχικής διαγραφής στον πίνακα employees 1 CREATE TABLE employees 2 ( 3 empid INTEGER NOT NULL, 4 firstname CHAR(30) NOT NULL, 5 lastname CHAR(30) NOT NULL, 6 depid INTEGER NOT NULL, 7 salary NUMERIC(6,2), 8 hiredate DATE, 9 CONSTRAINT pk_employees PRIMARY KEY (empid), 71 / 85

ON DELETE RESTRICT Παράδειγμα περιορισμού διαδοχικής διαγραφής στον πίνακα employees 1 CREATE TABLE employees 2 ( 3 empid INTEGER NOT NULL, 4 firstname CHAR(30) NOT NULL, 5 lastname CHAR(30) NOT NULL, 6 depid INTEGER NOT NULL, 7 salary NUMERIC(6,2), 8 hiredate DATE, 9 CONSTRAINT pk_employees PRIMARY KEY (empid), 10 INDEX i_depid (depid), 11 CONSTRAINT fk_depid FOREIGN KEY (depid) 12 REFERENCES departments(depid) 13 ON DELETE RESTRICT 14 ON UPDATE CASCADE 15 ); 72 / 85

ON DELETE RESTRICT Αποτυχία διαγραφής εξαιτίας παρουσίας συσχετιζόμενων εγγραφών 1 DELETE 2 FROM departments 3 WHERE depid = 2; 4 5 ERROR 1451 (23000): Cannot delete or update a parent row: 6 a foreign key constraint fails 7 (employees, CONSTRAINT fk_depid FOREIGN KEY (depid) 8 REFERENCES departments (depid) ON UPDATE CASCADE) 73 / 85

ON DELETE RESTRICT Αποτυχία διαγραφής εξαιτίας παρουσίας συσχετιζόμενων εγγραφών 1 DELETE 2 FROM departments 3 WHERE depid = 2; 4 5 ERROR 1451 (23000): Cannot delete or update a parent row: 6 a foreign key constraint fails 7 (employees, CONSTRAINT fk_depid FOREIGN KEY (depid) 8 REFERENCES departments (depid) ON UPDATE CASCADE) Προσοχή! Δεν πρόκειται για λάθος στην εντολή SQL. Το Σύστημα Διαχείρισης Βάσεων Δεδομένων δεν εκτελεί τη διαγραφή λόγω ρυθμίσεων που απαγορεύουν τη διαγραφή στον γονικό πίνακα όταν υπάρχουν συσχετιζόμενες εγγραφές στον θυγατρικό πίνακα. 74 / 85

Αλληλουχία διαγραφής με τη ρύθμιση ON DELETE RESTRICT 75 / 85

Αλληλουχία διαγραφής με τη ρύθμιση ON DELETE RESTRICT Μπορεί να γίνει έτσι 1 DELETE FROM workson... 2 DELETE FROM employees... 3 DELETE FROM departments... 76 / 85

Αλληλουχία διαγραφής με τη ρύθμιση ON DELETE RESTRICT Μπορεί να γίνει έτσι 1 DELETE FROM workson... 2 DELETE FROM employees... 3 DELETE FROM departments... Αλλά όχι έτσι 1 DELETE FROM departments... 2 DELETE FROM employees... 3 DELETE FROM workson... 77 / 85

ON UPDATE RESTRICT 78 / 85

ON UPDATE RESTRICT Παράδειγμα περιορισμού ενημέρωσης στον πίνακα workson 1 CREATE TABLE workson 2 ( 3 empid INTEGER NOT NULL, 4 proid INTEGER NOT NULL, 5 CONSTRAINT pk_workson PRIMARY KEY (empid, proid), 79 / 85

ON UPDATE RESTRICT Παράδειγμα περιορισμού ενημέρωσης στον πίνακα workson 1 CREATE TABLE workson 2 ( 3 empid INTEGER NOT NULL, 4 proid INTEGER NOT NULL, 5 CONSTRAINT pk_workson PRIMARY KEY (empid, proid), 6 INDEX i_empid (empid), 7 INDEX i_proid (proid), 8 CONSTRAINT fk_empid FOREIGN KEY (empid) 9 REFERENCES employees(empid) 10 ON DELETE RESTRICT 11 ON UPDATE RESTRICT, 12 CONSTRAINT fk_proid FOREIGN KEY (proid) 13 REFERENCES projects(proid) 14 ON DELETE RESTRICT 15 ON UPDATE RESTRICT 16 ); 80 / 85

Αποτυχία ενημέρωσης 81 / 85

Αποτυχία ενημέρωσης UPDATE workson 1 UPDATE projects 2 SET proid = 50 3 WHERE proid = 43; 4 5 ERROR 1451 (23000): Cannot delete or update a parent row: 6 a foreign key constraint fails 7 (workson, CONSTRAINT fk_proid FOREIGN KEY (proid) 8 REFERENCES projects (proid)) 82 / 85

Αποτυχία ενημέρωσης UPDATE workson 1 UPDATE projects 2 SET proid = 50 3 WHERE proid = 43; 4 5 ERROR 1451 (23000): Cannot delete or update a parent row: 6 a foreign key constraint fails 7 (workson, CONSTRAINT fk_proid FOREIGN KEY (proid) 8 REFERENCES projects (proid)) Προσοχή! Δεν πρόκειται για λάθος στην εντολή SQL. Το Σύστημα Διαχείρισης Βάσεων Δεδομένων δεν εκτελεί την ε- νημέρωση λόγω ρυθμίσεων που απαγορεύουν την τροποποίηση πρωτεύοντος κλειδιού στον γονικό πίνακα όταν υπάρχουν συσχετιζόμενες εγγραφές στον θυγατρικό πίνακα. 83 / 85

Υπενθύμιση (ενημέρωση πεδίων που δεν είναι πρωτεύον κλειδί) UPDATE projects 1 UPDATE projects 2 SET budget = 150000 3 WHERE proid = 43; 4 5 Query OK, 1 row affected (0.03 sec) 6 Rows matched: 1 Changed: 1 Warnings: 0 SELECT workson 1 SELECT * 2 FROM workson 3 WHERE proid = 43; 4 5 empid proid 6 ------------- 7 189 43 8 419 43 9 593 43 10 901 43 84 / 85

Σχόλια και ερωτήσεις Σας ευχαριστώ για την προσοχή σας. Είμαι στη διάθεσή σας για σχόλια, απορίες και ερωτήσεις. 85 / 85