Caratteristiche Caratteristiche (cont.) · PDF file1 MySQL DBMS Basi di dati A.A. 2003/2004...

4
1 MySQL DBMS Basi di dati A.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

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