• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Laboratorio Di  Basi Di  Dati 02  Il  D B M S  My S Q L
 

Laboratorio Di Basi Di Dati 02 Il D B M S My S Q L

on

  • 1,834 views

 

Statistics

Views

Total Views
1,834
Views on SlideShare
1,830
Embed Views
4

Actions

Likes
2
Downloads
29
Comments
0

1 Embed 4

http://www.slideshare.net 4

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Laboratorio Di  Basi Di  Dati 02  Il  D B M S  My S Q L Laboratorio Di Basi Di Dati 02 Il D B M S My S Q L Presentation Transcript

    • Corso di Basi di Dati e Laboratorio MySQL Alfio Ferrara - Stefano Montanelli A.A. 2005/2006 Basi di Dati e Laboratorio 1 Introduzione • MySQL – http://www.mysql.com – DBMS relazionale Open Source (licenza GPL) – Applicazione Client – Server – La distribuzione consiste in un server e una applicazione client da riga di comando (mysql) – Possibilità di usare una GUI per l’amministrazione del server (phpMyAdmin) A.A. 2005/2006 Basi di Dati e Laboratorio 2 Caratteristiche principali • MySQL: – Scritto in C e C++ – Portabilità • Windows [9.x, Me, NT, 2K, XP], Linux, FreeBSD [2.x, 3.x, 4.x], Mac OS X, SunOS 4.0, Solaris 2.5… – APIs • C, C++, Eiffel, java, Perl, PHP, Python… – Supporto al multi-threading • Possibilità di usare CPU multiple se disponibili A.A. 2005/2006 Basi di Dati e Laboratorio 3 1
    • Caratteristiche principali • MySQL: – Connettività • TCP/IP socket, UNIX socket, Named Pipes • ODBC driver, JDBC driver – Supporto alle transazioni mediante la modalità InnoDB – Scalabilità e limiti • Gestisce basi di dati con grandi quantitativi di dati. – Suporta fino a 60.000 tabelle e 5.000.000.000 di record – Supporta fino a 64 indici in una singola tabella A.A. 2005/2006 Basi di Dati e Laboratorio 4 MySQL e SQL • Aderenza a SQL99 – Istruzioni CREATE TABLE, ALTER TABLE – Operatori SELECT, WHERE, GROUP BY, ORDER BY – Funzioni COUNT(), COUNT(DISTINCT...), AVG(), STD(), SUM(), MAX(), MIN() – LEFT/RIGHT OUTER JOIN – Alias su tabelle e colonne – Istruzioni di INSERT, DELETE, UPDATE – Sotto-selezioni (dalla versione 4.1) – Viste (dalla versione 5.0) – Trigger e stored procedures (dalla versione 5.0) – UNION (dalla versione 5.0) A.A. 2005/2006 Basi di Dati e Laboratorio 5 MySQL e SQL • Estensioni allo standard SQL99 – Istruzione REPLACE • Sintetizza le istruzioni DELETE + INSERT – Supporto dei tipi di dato MEDIUMINT, SET, ENUM, TEXT – Supporto ai vincoli di attributo AUTO_INCREMENT, BINARY, NULL, UNSIGNED, ZEROFILL – Supporto a funzioni regolari e funzioni proprietarie nell’istruzione SELECT • TRIM, LAST_INSERT_ID, CONCAT, CAST, MOD – Supporto agli operatori || e && per sostituire gli operatori logici OR e AND A.A. 2005/2006 Basi di Dati e Laboratorio 6 2
    • MySQL e SQL • Differenze con lo standard SQL99 – Implementazione del tipo di dati VARCHAR – Assenza del costrutto INTERSECT – Assenza del costrutto EXCEPT – Utilizzo del comando REVOKE • I privilegi su una tabella non sono automaticamente revocati con la sua eliminazioni ma è necessario utilizzare un’istruzione REVOKE esplicita – Implementazione dei vincoli di integrità • Richiede l’utilizzo di modalità InnoDB (motore transazionale conforme alle proprietà ACID) A.A. 2005/2006 Basi di Dati e Laboratorio 7 Architettura di MySQL • MySQL è basato su un’architettura multi-livello composta da un insieme di sotto-sistemi primari e di componenti di supporto • I diversi componenti interagiscono per garantire – Lettura di query – Analisi di query – Esecuzione di query – Memorizzazione/restituzione dei risultati delle query • Sistemi primari • Componenti di supporto – Query Engine – Process manager – Storage Manager – Function libraries – Buffer Manager – Transaction Manager – Recovery Manager A.A. 2005/2006 Basi di Dati e Laboratorio 8 Architettura di MySQL Recovery manager Query engine Buffer manager Transaction manager Storage manager Sotto-sistemi primari Process manager Function libraries Componenti di supporto A.A. 2005/2006 Basi di Dati e Laboratorio 9 3
    • Architettura di MySQL • Query engine. È composto da tre componenti – Syntax Parser • È responsabile della decomposizione dei comandi SQL in ingresso in una forma comprensibile ai moduli deputati all’esecuzione • Verifica la correttezza sintattica dei comandi SQL • Verifica i permessi di accesso agli oggetti richiesti – Query Optimizer • Verifica le possibili ottimizzazioni: Individua gli indici da utilizzare per reperire i dati richiesti nel modo più efficiente possibile • Predispone il piano di esecuzione della query da sottoporre a execution component – Execution Component • È responsabile dell’esecuzione del comando SQL ricevuto A.A. 2005/2006 Basi di Dati e Laboratorio 10 Architettura di MySQL • Storage manager – Ha il compito di interfacciare il sistema operativo per soddisfare le richieste di scrittura di dati su disco in modo efficiente • Buffer manager – Ha il compito di gestire le problematiche relative alla memoria nelle interazioni fra query engine e storage manager – Utilizza politiche di query caching efficiente che garantiscono ottimi tempi di risposta A.A. 2005/2006 Basi di Dati e Laboratorio 11 Architettura di MySQL • Transaction manager – Ha il compito di gestire le questioni legate alla concorrenza durante l’accesso ai dati – Utilizza il componente Lock manager che gestisce il blocco dei vari oggetti per garantire l’accesso simultaneo a utenti multipli in modo consistente • Recovery manager – Ha il compito di mantenere una copia dei dati a tutela di possibili perdite in caso di eventi imprevisti – Mantiene il log degli eventi significativi all’interno del DBMS A.A. 2005/2006 Basi di Dati e Laboratorio 12 4
    • Architettura di MySQL • Process manager – Gestisce le connessioni con i client mediante i moduli interni di network connection management – Sincronizza i task e i processi in competizione mediante i moduli interni di • multi-threading • thread locking • performing thread-safe operations • Function libraries – Contiene procedure di interesse generale utilizzate da tutti gli altri sotto-sistemi • Manipolazione di stringhe • Operazioni di ordinamento • Gestione della memoria di sistema (dipendente da SO) • I/O su file (dipendente da SO) A.A. 2005/2006 Basi di Dati e Laboratorio 13 Installazione • Possibilità offerte per l’installazione: – Compilazione dei sorgenti • Prevalentemente per Linux/MacOSX • In Windows tramite VC++ 6.0 – Utilizzo di una distribuzione binaria • Disponibile sia per Linux/MacOSX sia per Windows • Installare la versione stabile più recente – Ad oggi la versione 5.0.15 A.A. 2005/2006 Basi di Dati e Laboratorio 14 Installazione – Linux • groupadd mysql • useradd -g mysql mysql • gunzip < mysql-VERSION.tar.gz | tar -xvf – • cd mysql-VERSION • ./configure --prefix=/usr/local/mysql • make • make install • scripts/mysql_install_db • chown -R root /usr/local/mysql • chown -R mysql /usr/local/mysql/var • chgrp -R mysql /usr/local/mysql • cp support-files/my-medium.cnf /etc/my.cnf • /usr/local/mysql/bin/mysqld_safe --user=mysql & A.A. 2005/2006 Basi di Dati e Laboratorio 15 5
    • Installazione – Windows • Se si utilizza una versione 2K/XP è necessario avere i permessi di amministratore • Scompattare il file della distribuzione in una cartella temporanea • Eseguire il file setup.exe e seguire la procedura di installazione – Se si utilizza una versione 2K/XP, selezionare il server mysqld-nt – Installare con supporto alle connessioni remote (porta predefinita di ascolto: 3306) A.A. 2005/2006 Basi di Dati e Laboratorio 16 MySQL • Inizialmente su MySQL sono presenti due database di sistema – Il database MySQL che contiene tutte le impostazioni del DBMS – Il database information_schema che contiene il dizionario dei dati • Prima connessione al DBMS – MySQL accetta di default connessione da parte di qualsiasi utente – L’utente root è creato automaticamente e ha privilegi di amministrazione sul DBMS – mysql –u root –p • L’opzione –p viene specificata se root ha una password A.A. 2005/2006 Basi di Dati e Laboratorio 17 Connessione al server • Aprire una shell di comando • Connessione: invocare il client MySQL dalla cartella contenente i file binari del DBMS – shell> mysql -h nomehost -u nomeuser -p • Disconnesione: utilizzare il comando quit – mysql> quit A.A. 2005/2006 Basi di Dati e Laboratorio 18 6
    • Gestione database • MySQL è case insensitive • Tutti i comandi necessitano di semicolon (;) finale • Visualizzazione dei database presenti sul server (vincolato dai privilegi dell’utente) – mysql> show databases; • Creazione database – mysql> create database nomedatabase; • Connessione ad un database – mysql> connect nomedb – mysql> use nomedb A.A. 2005/2006 Basi di Dati e Laboratorio 19 Livelli dei privilegi • Privilegi globali (*.*) – Si applicano a tutti i database presenti sul server. Sono memorizzati nella tabella mysql.user • Privilegi database (dbname.*) – Si applicano a tutte le tabelle presenti in dbname. Sono memorizzati nelle tabelle mysql.host, mysql.db A.A. 2005/2006 Basi di Dati e Laboratorio 20 Livelli dei privilegi • Privilegi tabella (dbname.tblname) – Si applicano a tutte le colonne presenti in tblname. Sono memorizzati nella tabella mysql.tables_priv • Privilegi colonna (colname) – Si applicano al campo colname specificato. Sono memorizzati nella tabella mysql.columns_priv A.A. 2005/2006 Basi di Dati e Laboratorio 21 7
    • Lista dei privilegi • ALL [PRIVILEGES] • LOCK TABLES – Escluso WITH GRANT • PROCESS OPTION • RELOAD (server) • ALTER • SELECT • CREATE • SHOW DATABASES • DELETE • SHUTDOWN (server) • DROP • SUPER (kill) • EXECUTE • UPDATE • INDEX • GRANT OPTION • INSERT • … A.A. 2005/2006 Basi di Dati e Laboratorio 22 Gestione privilegi GRANT priv_type [(column_list)] […] ON {tblname | * | *.* | dbname.*} TO username [IDENTIFIED BY [PASSWORD] 'password'] […] [WITH GRANT OPTION] REVOKE priv_type [(column_list)] […] ON {tblname | * | *.* | dbname.*} FROM username […] Esempio: mysql> grant all on provadb.* to provausr@localhost identified by ‘provapsw' A.A. 2005/2006 Basi di Dati e Laboratorio 23 Gestione privilegi • Considerazioni – E’ consentito l’uso di wildcards • % è un carattere speciale che sostituisce qualunque stringa – Gli utenti sono caratterizzati dall’host da cui si connettono al server • nomeuser@nomehost – E’ possibile modificare la password di un utente • mysql> SET PASSWORD FOR nomeuser@nomehost = PASSWORD('newpassword'); A.A. 2005/2006 Basi di Dati e Laboratorio 24 8
    • Gestione e creazione tabelle • Visualizzazione delle tabelle contenute in un database – mysql> show tables; • Creazione di tabelle – CREATE TABLE tblname [(vincoli di creazione,…)]; • Visualizzazione della struttura di una tabella – DESCRIBE tblname; – SHOW CREATE TABLE tblname; A.A. 2005/2006 Basi di Dati e Laboratorio 25 Vincoli di creazione tabelle • Vincoli di creazione – colname dominio [NOT NULL | NULL] [DEFAULT valoredefault] [AUTO_INCREMENT] [PRIMARY KEY] [vincoli di integrità] or PRIMARY KEY (colname,…) or INDEX [indexname] (colname,…) or UNIQUE [INDEX] [indexname] (colname,…) or FOREIGN KEY [indexname] (colname,…) [vincoli di integrità] A.A. 2005/2006 Basi di Dati e Laboratorio 26 Tipi supportati • SMALLINT[(length)] • DECIMAL(length, [UNSIGNED] [ZEROFILL] decimals) [UNSIGNED] • INT[(length)] [ZEROFILL] [UNSIGNED] [ZEROFILL] • CHAR(length) [BINARY] • INTEGER[(length)] [UNSIGNED] [ZEROFILL] • VARCHAR(length) • REAL[(length,decimals)] [BINARY] [UNSIGNED] [ZEROFILL] • DATETIME • DOUBLE[(length, • BLOB decimals)] [UNSIGNED] • TEXT [ZEROFILL] • ENUM(value1,value2,…) • FLOAT[(length,decimals)] • SET(value1,value2,...) [UNSIGNED] [ZEROFILL] A.A. 2005/2006 Basi di Dati e Laboratorio 27 9
    • Vincoli di integrità • Vincoli di integrità – REFERENCES tblname [(colname,…)] [ON DELETE opzioni] [ON UPDATE opzioni] • Opzioni sui vincoli – RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT I vincoli di integrità in MySQL sono supportati solo in modalità INNODB A.A. 2005/2006 Basi di Dati e Laboratorio 28 Esempi di CREATE TABLE • Esempi – create table utente(login varchar(10), psw varchar(10), nome varchar(20), cognome varchar(20), email varchar(60), admin enum('n','y'), PRIMARY KEY (login)); – create table genere(id int(4) auto_increment PRIMARY KEY, genere varchar(60), sottogenere varchar(60)); – create table brano(id int(4) auto_increment PRIMARY KEY, titolo varchar(60), data date, rating enum('1','2','3','4','5'), genere int(4)); – create table album(album int(4) not null references brano(id), brano int(4) not null references brano(id), primary key(album,brano)); A.A. 2005/2006 Basi di Dati e Laboratorio 29 ALTER, INSERT • Modifica alla struttura di tabelle – ALTER [IGNORE] TABLE tblname specifiche [specifiche,…] • Inserimento di istanze in tabella – INSERT [IGNORE] [INTO] tblname [(colname,…)] VALUES ((expression | DEFAULT),…),(…) [ON DUPLICATE KEY UPDATE colname = expression,…] A.A. 2005/2006 Basi di Dati e Laboratorio 30 10
    • Specifiche di ALTER • Specifiche di ALTER ADD [COLUMN] vincoli_creazione [FIRST | AFTER] colname] or ADD INDEX [indexname] (colname,…) or ADD PRIMARY KEY (colname,…) or ADD UNIQUE [indexname] (colname,…) or ADD FOREIGN KEY [indexname] (colname,…) [vincoli di integrità] or ALTER [COLUMN] colname {SET DEFAULT value | DROP DEFAULT} or CHANGE [COLUMN] old_colname vincoli di creazione [FIRST|AFTER colname] or MODIFY [COLUMN] vincoli di creazione [FIRST | AFTER colname] or DROP [COLUMN] colname or DROP PRIMARY KEY or DROP INDEX indexname A.A. 2005/2006 Basi di Dati e Laboratorio 31 DELETE, UPDATE • Cancellazione di istanze – DELETE FROM tblname [WHERE condizione] [ORDER BY …] [LIMIT rows] • Aggiornamento di istanze – UPDATE [IGNORE] tblname SET colname1=expr1 [colname2=expr2, …] [WHERE condizione] [ORDER BY …] [LIMIT rows] A.A. 2005/2006 Basi di Dati e Laboratorio 32 INDEX e DROP • Creazione di indici – CREATE [UNIQUE] INDEX indexname ON tblname (colname[(length)],…) • Drop database – DROP DATABASE dbname • Drop table – DROP TABLE tblname [tblname,…] [RESTRICT | CASCADE] • Drop index – DROP INDEX indexname ON tblname A.A. 2005/2006 Basi di Dati e Laboratorio 33 11
    • ESEMPI • INSERT INTO utente VALUES ('utentenew', 'utentenew', 'nome utente', 'cognome utente', 'utente@dominio.it', 'n'); • INSERT genere (genere) VALUES ('jazz'), ('blues'); • ALTER TABLE file ADD numerodownload int(4) AFTER proprietario; • ALTER TABLE brano ADD FOREIGN KEY (genere) REFERENCES genere(id); • UPDATE genere SET genere = 'rock', sottogenere = 'metal' WHERE (genere = 'jazz'); • DELETE FROM genere WHERE genere = 'blues'; • CREATE INDEX idx_cognome ON utente(cognome); • DROP INDEX idx_cognome ON utente; A.A. 2005/2006 Basi di Dati e Laboratorio 34 Backup • È possibile eseguire delle copie di backup dei database presenti su un server MySQL – mysqldump [options] [dbname] > outputfile.sql – Opzioni utili • --all-databases esegue il backup di tutti i database presenti sul server MySQL • -u nomeuser l’utente con cui eseguire l’accesso al server MySQL (implica l’uso dell’opzione –p se nomeuser ha impostato una password d’accesso) A.A. 2005/2006 Basi di Dati e Laboratorio 35 Ripristino • È possibile ripristinare un database a partire da un file precedentemente salvato – mysql [options] [dbname] < inpufile.sql – dbname non è necessario in caso di database multipli nel file di input – Opzioni utili • -u nomeuser l’utente con cui eseguire l’accesso al server MySQL (implica l’uso dell’opzione –p se nomeuser ha impostato una password d’accesso) A.A. 2005/2006 Basi di Dati e Laboratorio 36 12