Caratteristiche Caratteristiche (cont.) · PDF file1 MySQL DBMS Basi di dati A.A. 2003/2004...
Transcript of Caratteristiche Caratteristiche (cont.) · PDF file1 MySQL DBMS Basi di dati A.A. 2003/2004...
1
MySQL DBMS
Basi di datiA.A. 2003/2004
Marco Cammisa
Cos’è MySQL
• MySQL è un DBMS open source, sotto la licenza GPL (GNU General Public License)– Liberamente scaricabile da: http://www.mysql.com– DBMS relazionale– Query language: subset di SQL-99
• Versioni:– corrente, 4.0.16 (stabile, tra poco 4.0.17)– alpha, 4.1
Caratteristiche
• Scritto in C e C++
• Supporta diverse piattaforme: Windows *, Linux 2.*, FreeBSD, AIX, Solaris, SunOS,…
• Multi-threaded
• API: C, C++, Java, Perl, PHP, Python, Tcl,…
• Basato su transazioni
Caratteristiche (cont.)
• B-tree e tabelle temporanee
• Costrutto client/server
• Dimensione massima tabella: dipende dal OS/hardware (Linux intel 32: 2GB)
• Tipi di dato: reali, decimali (1-8), stringhe (0-255), binari (255-4GB) , tempo,...
Caratteristiche future
• 4.1:– subquery: in, any, some– nuove query (insert..on duplicate..) e raggruppamenti
(group_concat)– C-Api:prepare e binding
• 5.0:– store procedures e trigger– r-tree– velocità incrementata,…
• 5.1– foreign key per tutte i tipi di tabella (ora InnoDB),...
Metodi di accesso
2
Pro e contro• Librerie native:
– Pro: veloci, poche dipendenze, portabilità– Contro: non esiste uno standard
• ODBC:– Pro: standardizzato, non-relational data– Contro: più lento, necessità driver/provider
• GDA:– Pro: tutti quelli di ODBC, scalabilità– Contro: in fase di sviluppo
Librerie native
• Fornite dal produttore del DBMS• Le librerie vengono linkate nel programma->alte
prestazioni (veloce comunicazione)
SHELL=/bin/shMYSQL=/MysqlLinuxMYSQL_INC = -I$(MYSQL)/include/mysqlMYSQL_LIB = -L$(MYSQL)/lib/mysqlINCLUDE= -I./include $(MYSQL_INC) CFLAGS = -Wall $(INCLUDE)all:
g++ $(CFLAGS) $(MYSQL_LIB) prova.cpp -o prova -lmysqlclient
MySQL C Api
• Basato sulla libreria mysqlclient
• Dimensioni del buffer di comunicazione:
– iniziale: 16KB
– massima: 16MB (utile per i BLOB)
• Possibilità di usare thread
• Embedding server e client
Embedding client: init
• MYSQL *mysql_init(MYSQL *mysql)– Dove mysql è l’oggetto principale per la
gestione della comunicazione client/server per il DBMS, se il parametro è NULL allora alloca una nuova struttura ed inizializzala
– Esempio:• Data = mysql_init(NULL)
– Nota: se (Data==NULL) allora non c’è memoria disponibile
Embedding client: connect• Connessione al DBMS server:
– MYSQL *mysql_real_connect(MYSQL *mysql, const char*host, const char *user, const char *passwd, const char *db,unsigned int port, const char *unix_socket, unsigned longclient_flag)
– MYSQL *mysql: struttura principale mysql– host: nome della macchina– user: nome dell’utente che puo’ accedere al DBMS– passwd: password– db: nome del DB a cui accedere– port: porta dell’host (default 3306)– unix_socket: socket per la comunicazione
Embedding client: connect (cont)• client_flag:
– CLIENT_COMPRESS: comunicazione compressa– CLIENT_INTERACTIVE :utilizzo di
interactive_timeout seconds (invece di wait_timeoutseconds)
– CLIENT_MULTI_QUERIES: uso di più query divise da “;” (v>=4.1)
– CLIENT_MULTI_RESULTS: per più risultati (da sopra)
– CLIENT_SSL: usare SSL (secure socket layer) come protocollo di comunicazione (encrypted protocol)
3
Embedding client: disconnect
• void mysql_close(MYSQL *mysql)– Dove mysql e’ la struttura definita nel
programma e utilizzata dalla precedente connessione al DB
• Esempio: E1.cpp
Definizione dell’uso del DB
• int mysql_select_db(MYSQL *mysql, const char *db)– mysql: struttura– db: nome del db da utilizzare– Output:
• 0 nessun errore• !=0 errori
Definizione dell’uso del DB (cont)
• Output con errori:– CR_SERVER_GONE_ERROR: non esiste il DBMS– CR_SERVER_LOST: connessione con il db persa
dopo/durante l’esecuzione– CR_UNKNOWN_ERROR: errore non definito
Query
• int mysql_query(MYSQL *mysql, const char *query)– mysql: oggetto principale– query: testo della query da eseguire– Output:
• 0 nessun errore• !=0 errore nell’esecuzione
Creazione del DB
• Facendo uso della query SQL– mysql_query(MYSQL *mysql, “create
database …”)
• Esempio: E2.cpp
Creazione tabelle ed inserimento dati
• Creazione tabella:– mysql_query(MYSQL *mysql, “create table …”)
• Inserimento dati:– mysql_query(MYSQL *mysql, “insert into …”)
• Esempio: E3.cpp
4
Cursori: risultati query
• MYSQL_RES *mysql_store_result(MYSQL *mysql)– mysql: struttura– Output: MYSQL_RES, array di MYSQL_ROW.
Riga per riga tutti i risultati di una query
• MYSQL_ROWmysql_fetch_row(MYSQL_RES *result)– Result: l’array con tutti i risultati
Distruzione dei risultati
• Dopo l’esecuzione di una query con risultati (dopo mysql_store_result), per limitare l’uso eccessivo della memoria, bisogna liberare lo spazio allocato.– void mysql_free_result(MYSQL_RES *result)
• Result: array dei risultati
• Esempio: E4.cpp
Numero di risultati e campi
• Determinazione numero di risultati di una query:– my_ulonglong mysql_num_rows(MYSQL_RES *result)
• Numero di campi del risultato:– unsigned int mysql_num_fields(MYSQL_RES *result)
• Esempio: E5.cpp