MySQL Σεμινάριο #1 Μέξνο ηνπ πιηθνύ πξνέξρεηαη από δηαθάλεηεο ηνπ Δ. Καηζίθαξνπ (http://infolab.cs.unipi.gr/people/katsikaros/) ηνλ νπνίν επραξηζηνύκε ζεξκά Νίθνο Γηαηξάθνο Δξγαζηήξην Πιεξνθνξηαθώλ Σπζηεκάησλ, Τκήκα Πιεξνθνξηθήο, Παλεπηζηήκην Πεηξαηά (http://infolab.cs.unipi.gr)
Περιεχόμενα Δηζαγσγή ζην ΣΓΒΓ MySQL Γλσξηκία κε ην πεξηβάιινλ Γεκηνπξγία ΒΓ Γεκηνπξγία Πηλάθσλ Δηζαγσγή Τξνπνπνίεζε ΒΓ Γεκηνπξγία Αληηγξάθσλ Αζθαιείαο 2
Περιεχόμενα Δηζαγσγή ζην ΣΓΒΓ MySQL Γλσξηκία κε ην πεξηβάιινλ Γεκηνπξγία ΒΓ Γεκηνπξγία Πηλάθσλ Δηζαγσγή Τξνπνπνίεζε ΒΓ Γεκηνπξγία Αληηγξάθσλ Αζθαιείαο 3
MySQL RDBMS Site: http://www.mysql.com/ Open Source. Άδεηα GPL + Commercial Licence Φξεζηκνπνηείηαη επξέσο. Δλδεηθηηθά Google hits (29-Feb-2008): mysql: 220M sql server: 74M oracle: 151M Έθδνζεηο: MySQL Enterprise MySQL Community Server Έθδνζεηο Current Release: MySQL 5.0 Release Candidate: MySQL 5.1 MySQL 6.0 -- Alpha
MySQL - Documentation Documentation, άξζξα. πιεξνθνξίεο θηι. http://dev.mysql.com/doc/ MySQL Reference Manual : γηα ηελ έθδνζε 5.0: http://dev.mysql.com/doc/refman/5.0/en/index.html Forums, Mailing Lists Σην site ηεο MySQL Σην Internet Tutorials Σην manual ηεο MySQL Σην Internet
MySQL - Programs Server GUI Tools mysqld MySQL Administrator mysqld_safe MySQL Query Browser Client Connectors/APIs mysql ODBC, JDBC mysqladmin C, C++, PHP, Perl, Python mysqldump mysql-proxy Web clients phpmyadmin Δγθαηάζηαζε http://infolab.cs.unipi.gr/people/katsikaros/projects.html mysql_install_nov07.pdf mysql_user_nov07.pdf
MySQL Logging in Γηα λα θάλνπκε log in ζηνλ server ρξεηαδόκαζηε: Σηνηρεία ηνπ server γηα λα κπνξέζεη λα ηνλ βξεί ν client hostname ή IP port Σηνηρεία ρξήζηε γηα ηελ απζεληηθνπνίεζε ζηνλ server user name / dbuser γηα ην lab210 password / dbpassword γηα ην lab210 Τηκέο: localhost γηα ην pc καο / kittie γηα ην lab210 3306 (ε πξνεπηιεγκέλε ζύξα) root (ππεξρξήζηεο, έρεη όια ηα δηθαηώκαηα)
MySQL Logging in Σηνλ Query Browser
Περιεχόμενα Δηζαγσγή ζην ΣΓΒΓ MySQL Γλσξηκία κε ην πεξηβάιινλ Γεκηνπξγία ΒΓ Γεκηνπξγία Πηλάθσλ Δηζαγσγή Τξνπνπνίεζε ΒΓ Γεκηνπξγία Αληηγξάθσλ Αζθαιείαο 9
Γνωριμία με το περιβάλλον Αο ππνζέζνπκε πσο ζέινπκε λα δνύκε ηηο δηαζέζηκεο βάζεηο δεδνκέλσλ πνπ ππάξρνπλ ζην ζύζηεκα. Θα ρξεζηκνπνηήζνπκε ηελ εληνιή SHOW DATABASES Κάζε εληνιή πνπ εηζάγεηαη πξέπεη λα ηειεηώλεη κε semicolon (ειιεληθό εξσηεκαηηθό) ; Γηάθξηζε κεηαμύ πεδώλ / θεθαιαίσλ; SHOW DATABASES; show DaTaBaSeS;
Εισαγωγή Σχολίων Από ην ζύκβνιν κέρξη ην ηέινο ηεο γξακκήο: # -- Αλάκεζα ζηα ζύκβνια: /* */ ηνπνζεηνύληαη εληνιέο πνπ απνηεινύλ επεθηάζεηο ηεο MySQL Γνθηκέο SHOW DATABASES # blah; SHOW DATABASES -- blah; SHOW DATABASES /* blah */; /* SHOW DATABASES */ ; 11
Δεσμευμένες Λέξεις Υπάξρνπλ ιέμεηο εθθξάζεηο πνπ ρξεζηκνπνηνύληαη από ην ζύζηεκα θαη ρξεηάδνληαη πξνζνρή όηαλ ρξεζηκνπνηνύληαη σο πξνζδηνξηζηέο πηλάθσλ ή ζηειώλ CREATE DROP DATABASE TABLE SELECT Ωζηόζν κπνξνύλ λα ρξεζηκνπνηεζνύλ εθόζνλ εκθαληζηνύλ εληόο backtick ` create database `database`; Πξνζνρή ζηε δηάθξηζε κεηαμύ ` θαη 12
Κυριολεκτικά Τα θπξηνιεθηηθά (literal values) πεξηιακβάλνπλ Αιθαξηζκεηηθά (Strings) Αξηζκνί (Numbers) Γεθαεμαδηθέο ηηκέο (Hexadecimal values) Λνγηθέο ηηκέο (Boolean) Απνπζία Γεδνκέλσλ (NULL ή \N[case senitive]) 13
Κυριολεκτικά Αλφαριθμητικά Έλα string είλαη κηα ζεηξά από bytes ή ραξαθηήξσλ θιεηζκέλα ζε κνλό εηζαγσγηθό ' ή δηπιό εηζαγσγηθό ". Π.ρ "example", example example Γνθηκή SELECT 'example'; SELECT "example"; Μέζα ζε έλα string θάπνηνη ραξαθηήξεο έρνπλ εηδηθό λόεκα. \' A single quote ( ' ) character. \" A double quote ( " ) character. \n A newline (linefeed) character. \t A tab character. \\ A backslash ( \ ) character 14
Κυριολεκτικά Αριθμοί, Λογικές Τιμές Αθέξαηνη, δεθαδηθνί: SELECT 15, 0, -32, +50 ; SELECT 15.52, -5.7, +32.8, -32.68e+10; Γεθαεμαδηθέο ηηκέο Boolean SELECT x'4d'; SELECT x'4d7953514c'; SELECT 0x4D7953514C; SELECT HEX('MySQL'); SELECT TRUE, true, FALSE, false; 15
MySQL Storage Engines show engines; Γηαθνξέο Storage Engines: Ταρύηεηα ιόγσ ηεο ύπαξμεο ή κε θάπνησλ ραξαθηεξηζηηθώλ πρ transactions Άιιεο Storage Engines έρνπλ ηελ δπλαηόηεηα κόλν λα γξάςνπλ θαη όρη λα ζβήζνπλ δεδνκέλα.
Περιεχόμενα Δηζαγσγή ζην ΣΓΒΓ MySQL Γλσξηκία κε ην πεξηβάιινλ Γεκηνπξγία ΒΓ Γεκηνπξγία Πηλάθσλ Δηζαγσγή Τξνπνπνίεζε ΒΓ Γεκηνπξγία Αληηγξάθσλ Αζθαιείαο 17
Δημιουργία ΒΔ Σελάξην Δθαξκνγήο Star(StarID, StarName, StarAddress) Movies(MovieID, MovieTitle, MovieWebsite, MovieLength, FilmType) Stars_In(StarID, MovieID) 18
Δημιουργία ΒΔ Βήκα 1: Γεκηνπξγνύκε ηε βάζε δεδνκέλσλ επί ηεο νπνίαο ζα εξγαζηνύκε create database your_sn; Δπηθύξσζε show databases; Βήκα 2: Γειώλνπκε ηε ρξήζε ηεο ΒΓ πνπ κόιηο δεκηνπξγήζακε use your_sn; 19
Περιεχόμενα Δηζαγσγή ζην ΣΓΒΓ MySQL Γλσξηκία κε ην πεξηβάιινλ Γεκηνπξγία ΒΓ Γεκηνπξγία Πηλάθσλ Δηζαγσγή Τξνπνπνίεζε ΒΓ Γεκηνπξγία Αληηγξάθσλ Αζθαιείαο 20
Εντολή Δημιουργίας CREATE TABLE tbl_name (create_definition,...) create_definition col_name column_definition [CONSTRAINT [symbol]] PRIMARY KEY [CONSTRAINT [symbol]] FOREIGN KEY ref_definition ref_definition: REFERENCES tbl_name (col_name,...) [ON DELETE CASCADE] [ON UPDATE CASCADE] 21
Δημιουργία Πινάκων Καηά ηε δεκηνπξγία ηνπ πίλαθα ζα πξέπεη λα νξίζνπκε: ην όλνκα ηεο ζηήιεο πνπ έρνπκε θαζνξίζεη πξνεγνπκέλσο ηνλ ηύπν δεδνκέλσλ ηεο ζηήιεο ηηο ζηήιεο πνπ ζπλζέηνπλ ην πξσηεύνλ θιεηδί ηνπ πίλαθα ηα ππάξρνληα μέλα θιεηδηά 22
Γλώσσα Ορισμού Δεδομένων H SQL σο Γιώζζα Οξηζκνύ Γεδνκέλσλ ζηελ MySQL Βαζηθνί ηύπνη δεδνκέλσλ SMALLINT [(length)] Μηθξόο αθέξαηνο, θαηαιακβάλεη 2 bytes INTEGER[(length)] Αθέξαηνο, θαηαιακβάλεη 4 bytes REAL[(Μ,d)] Μ ςεθία από τα οποία d δεθαδηθά NUMERIC[(Μ[,d])] Όκνηα κε πξηλ αιιά κε απμεκέλε αθξίβεηα π.ρ ρξήζε ζε ζηήιεο κε ρξεκαηηθά πνζά DATE Ηκεξνκελίεο, πνπ πεξηέρνπλ ηεηξαςήθην έηνο, κήλα θαη εκέξα TIME Ώξα εκέξαο κε παξαιιαγέο αθξίβεηαο πνπ αθνξνύλ ελζσκάησζε εκέξαο, αθξίβεηαο δεθαδηθνύ δεπηεξνιέπησλ θηι TIMESTAMP Date + Time CHAR[(length)] [CHARACTER SET charset_name] Σπκβνινζεηξά πξνθαζνξηζκέλνπ, ζηαζεξνύ κήθνπο (length) VARCHAR(length) [CHARACTER SET charset_name] Σπκβνινζεηξά κε κεηαβιεηό κήθνο έσο (length) 23
Εντολές Δημιουργίας Πινάκων Βήκα 3: Γεκηνπξγνύκε ηνπο πίλαθεο πνπ πεξηιακβάλεη ε ΒΓ CREATE TABLE STARS ( StarID INTEGER, StarName VARCHAR(50), StarAddress VARCHAR(100), PRIMARY KEY (StarID) ); CREATE TABLE MOVIES ( MovieID INTEGER, MovieTitle VARCHAR(80), MovieWebsite VARCHAR(100), MovieLength REAL, FilmType VARCHAR(50), PRIMARY KEY (MovieID) ); CREATE TABLE STARS_IN ( MovieID INTEGER, StarID INTEGER, PRIMARY KEY (MovieID,StarID), FOREIGN KEY (StarID) REFERENCES STARS(StarID), FOREIGN KEY (MovieID) REFERENCES MOVIES(MovieID) ); 24
Περιεχόμενα Δηζαγσγή ζην ΣΓΒΓ MySQL Γλσξηκία κε ην πεξηβάιινλ Γεκηνπξγία ΒΓ Γεκηνπξγία Πηλάθσλ Δηζαγσγή Τξνπνπνίεζε ΒΓ Γεκηνπξγία Αληηγξάθσλ Αζθαιείαο 25
Τροποποίηση ΒΔ Εισαγωγή Δεδομένων INSERT [INTO] tbl_name [(col_name,...)] VALUES ({expr DEFAULT},...),(...),... Παξάδεηγκα INSERT INTO STARS (StarID, StarName, StarAddress) VALUES (10, Al Pacino", "135 AV. Street C."); Βήκα 4: Δηζάγνπκε Γεδνκέλα 26
Τροποποίηση ΒΔ Εισαγωγή Δεδομένων INSERT INTO STARS (StarID, StarName, StarAddress) VALUES (10, Al Pacino", "135 AV. Street C."); INSERT INTO STARS (StarID, StarName, StarAddress) VALUES (25, Marlon Brando", "100 AZ. Street U."); INSERT INTO STARS (StarID, StarName, StarAddress) VALUES (15, Sylvester Stallone", "102 AQ. Street F."); INSERT INTO STARS (StarID, StarName, StarAddress) VALUES (2, Jim Carey", "102 AK. Street Q."); INSERT INTO MOVIES (MovieID,MovieTitle,MovieWebsite,MovieLen gth,filmtype) VALUES (101,"The Godfather", "www.thegodfather.com",125.3, "ACTION MOVIE"); INSERT INTO MOVIES (MovieID,MovieTitle,MovieWebsite,MovieLen gth,filmtype) VALUES (104,"ROCKY","www.rocky.com",132.5, "ACTION MOVIE"), (109, The Mask", "www.themask.gr",122.5,"action MOVIE ); INSERT INTO Stars_In (StarID, MovieID) VALUES (10,101), (25,101), (15,104), (2,109); 27
Τροποποίηση ΒΔ Ενημέρωση, Διαγραφή UPDATE table_references SET col_name1={expr1...} [, col_name2={expr2...}]... [WHERE where_condition] DELETE tbl_name, tbl_name... FROM table_references [WHERE where_condition] Παξαδείγκαηα UPDATE MOVIES SET MovieLength=MovieLength*2 WHERE MovieLength<60; DELETE FROM STARS WHERE MovieLength<60; 28
Διαγραφή Πίνακα Διαγραφή ΒΔ DROP TABLE tbl_name Παξάδεηγκα DROP TABLE Stars_In, Stars, Movies; DROP DATABASE db_name DROP DATABASE your_sn; 29
Περιεχόμενα Δηζαγσγή ζην ΣΓΒΓ MySQL Γλσξηκία κε ην πεξηβάιινλ Γεκηνπξγία ΒΓ Γεκηνπξγία Πηλάθσλ Δηζαγσγή Τξνπνπνίεζε ΒΓ Γεκηνπξγία Αληηγξάθσλ Αζθαιείαο 30
Δημιουργία Αντιγράφων Ασφαλείας (Back up) Αλνίγνπκε ηνλ MySQL Administrator Έπεηηα : Βήκα 1: Από ηελ πιεπξηθή ζηήιε επηιέγνπκε «Αληίγξαθα Αζθαιείαο» Βήκα 2: Δπηιέγνπκε ην πιήθηξν «Νέν Έξγν» Βήκα 3: Δπηιέγνπκε ηε ΒΓ γηα ηελ νπνία ζέινπκε λα θξαηήζνπκε back up Βήκα 4: Φξεζηκνπνηώληαο ηα πιήθηξα «>» θαη «<» κεηαθέξνπκε ηε ΒΓ ζηε ζρεηηθή ιίζηα Βήκα 5: Γίλνπκε όλνκα ζην αληίγξαθν αζθαιείαο Βήκα 6: Δπηιέγνπκε ην πιήθηξν «Έθηέιεζε Αληηγξ. Τώξα» 31
Δημιουργία Αντιγράφων Ασφαλείας (Back up) 32
Πηγές περαιτέρω μελέτης http://dev.mysql.com/doc/refman/5.0/en/programs-overview.html http://dev.mysql.com/doc/refman/5.0/en/storage-engines.html http://dev.mysql.com/doc/refman/5.0/en/mysql-command-options.html http://dev.mysql.com/doc/refman/5.0/en/connecting-disconnecting.html http://dev.mysql.com/doc/refman/5.0/en/entering-queries.html http://dev.mysql.com/doc/refman/5.0/en/show-databases.html http://dev.mysql.com/doc/refman/5.0/en/create-database.html http://dev.mysql.com/doc/refman/5.0/en/drop-database.html http://dev.mysql.com/doc/refman/5.0/en/create-table.html http://dev.mysql.com/doc/refman/4.1/en/data-types.html http://dev.mysql.com/doc/refman/5.1/en/insert.html http://dev.mysql.com/doc/refman/5.0/en/update.html http://dev.mysql.com/doc/refman/5.0/en/delete.html http://dev.mysql.com/doc/refman/5.1/en/drop-table.html 33