Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Ref.:
An Introduction to Database Systems, C. J. Date, 2004 Systems, MySQL Bible, Wiley, S. Suehring, 2002 Bible, Wiley, Suehring,
MySQL and Linux Tutorial, www.yolinux.com Tutorial, Using the MySQL Client Library to Write Your Own Programs, Paul Dubois, 2003 Programs, (Cap. amostra em www.informit.com )
Vantagens de utilizao
Velocidade
O formato tabelar proporciona rapidez nos acessos para leitura e escrita assncrona de utilizadores e aplicaes.
Actualizao
A informao pode ser fcilmente integrada na construo de relatrios informativos, reportando-se a valores sempre actuais. i f ti t d l t i
Preciso
Preenchidas com dados correctos, as bases de dados fornecem dados correctos e sem inconsistncias.
Proteco
Maior segurana da informao contra acessos no permitidos e falhas de no intencionais.
Consistentes
No permitem violaes de acesso e de regras
Isoladas
Garantem que os dados no so alterados durante a operao
Durveis
Assim que executadas o seu efeito permanente
Relacionais
Permitem manipular dados dispersos por tabelas relacionadas entre si
Definio de dados
Novo tipo de dados
CREATE TYPE NTipo;
Nova tabela
CREATE TABLE NovaTabela ( CampoX NTipo, CampoY Char, CampoZ Integer) NovaTabela CampoX
CampoY
CampoZ
Apagar tabela
DROP TABLE [IF EXISTS] NovaTabela
P d Podem ser usados com modificadores que f d difi d formatam a t apresentao dos valores pedidos
Ex. Num campo do tipo INT(4) ZEROFILL o nmero 13 l existente seria devolvido como 0013.
Decimais
FLOAT, DECIMAL, DOUBLE
Datas
DATE, DATETIME, TIME, YEAR
Strings
CHAR, VARCHAR, BLOB, TEXT
Insero de valores
INSERT INTO TabelaB ( Num , Nome , Curso ) VALUES
Joao , Electro ) ; ( 12323 ,
Remoo de valores
Actualizao de valores
UPDATE TabelaB SET Curso = Sist Energia Nome = Joao Luis WHERE Num = 12323 ;
Exemplos
SELECT Nome, Num, Matrcula FROM RegistoViaturas WHERE Viatura = Moto ; Nome Joao Antonio Lurdes Num 10012 10046 10098 Matrcula 12-12-hr 23-23-xc 54-33-sa
RegistoViaturas
Num 10012 10014 10032 10045 10046 10098 10102 Nome Joao Maria Luis Jose Antonio Lurdes Carla Viatura Moto Carro Carro Carro Moto Moto Carro Marca BMW BMW Ford Opel Suzuki Kawa Jaguar Ano 2003 2005 2002 2004 2006 2004 2006 Matrcula 12-12-hr 34-23-sf 12-34-df 23-56-lp 23-23-xc 54-33-sa 02-23-xx
INSERT INTO RegistoViaturas ( Num, Nome, Viatura, Marca, Ano, Matrcula ) VALUES ( 10022, Carlos, Carro, Rover, 2002, 12-43-fe ) ; Num ... ... 10102 10022 Nome ... ... Carla Carlos Viatura ... ... Carro Carro Marca ... ... Jaguar Rover Ano ... ... 2006 2002 Matrcula ... ... 02-23-xx 12-43-fe 12-43-
Arquitecturas
Centralizada
Aplicaes Aplicaes Aplicaes Clientes
SGBD
Servidor
Distribuda
MySQL (http://www.mysql.com)
Caractersticas Rapidez suficiente para ser operada sobre Internet Tabelas com capacidade da ordem dos terabytes Requer poucos recursos fsicos do sistema compatvel com diversas plataformas de Sistemas Operativos
AIX 4.0, Unix, Amiga, MacOS, Linux, Windows,SunOS, Solaris ...
Cdigo open-source, todos podem contribuir ! Estabilidade do cdigo Diversidade de APIs para integrao
C, C++, PHP, Python, Perl, Tcl, JDBC/java, ...
gratuita, distribuda sob licena GNU GPL Dispe de consolas de comandos (CLI) e grficas (GUI) a mais usada Documentao
MySQL Reference Manual (vers. 3.23, 4.0, 5.0,. 6.0)
http://dev.mysql.com/doc/refman/6.0/en/index.html
Permitem interagir com o SGBD ou servidor da base de dados Gesto e segurana do SGBD Verificar a configurao e estado de base de dados Criar e remover bases de dados Definies de segurana da conta do administrador Ex.: $ mysqladmin h localhost u root p create basedadosX
Conceder ao user1 todos os privilgios de manipulao das tabelas da base de dados myDB1,
mysql > grant all privileges on myDB1.* to user1; Query OK, 0 rows affected (0.11 sec)
Mostrar utilizadores das bases de dados do SGBD (tabela user da base de dados mysql)
mysql > select Host, User, Password from user +-----------+------+------------------+ | Host | User | Password | +-----------+------+------------------+ | localhost | root | 09e36e19549e0525 | | bird | root | | | bird | | | | localhost | | | | % | user1| 9874334872387eea | +-----------+------+------------------+ 5 rows in set (0.01 sec)
Exemplos de utilizao
Ligao ao SGBD mysql
[user1@xxx] mysql -h localhost -u user1 -p Enter password: Query OK, 1 row affected, 3 warnings (0.17 sec)
mysql_select_db() mysql_select_db()
Activa uma base de dados MySQL
mysql_connect() mysql_connect()
Abre uma ligao MySQL
mysql_query() mysql_query()
Faz uma query numa base de dados MySQL mysql_query(query,connection) mysql_query(query,connection)
in acetatos DEAPC 2009/10, Paula Viana
MySQL C API
Conjunto de funes e tipos de dados que permitem a programas C interagir com o SGBD
Bibliotecas e includes a usar
libmysqlclient.a mysql.h l h -L/usr/lib/mysql -lmysqlclient lm -I/usr/include/mysql I/ /i l d / l
Compilao de um programa
Escrevendo a linha seguinte sempre que necessrio ...
$ gcc o prog prog.c -L/usr/lib/mysql -lmysqlclient lm \ -I/usr/include/mysql
= gcc = -I/usr/include/mysql = -L/usr/lib/mysql -lmysqlclient -lm prog prog.c prog.h $(CC) $(CC) -c $(INCLUDES) prog.c $(INCLUDES) prog.o
prog:
$(CC) $(CC) -o prog prog.o $(LIBS) $(LIBS) $ make gcc -c -I/usr/include/mysql prog.c gcc o prog prog.c -L/usr/lib/mysql -lmysqlclient lm
MySQL C API
Alguns tipos de dados
MYSQL MYSQL_RES MYSQL_ROW MYSQL_FIELD Tipo do identificador da ligao base de dados Tipo da estrutura com os resultados das queries Tipo d estrutura que contm uma li h d resultados Ti da t t t linha de lt d Tipo da estrutura que contm informao sobre os campos
Algumas funes
MYSQL* mysql_init(MYSQL* my) mysql_init(MYSQL* my) MYSQL* mysql_real_connect(...) int mysql_query(MYSQL* my,char* cmd) mysql_query(MYSQL* cmd) MYSQL_RES* mysql_store_result(MYSQL* my) int mysql_num_fields(MYSQL_RES* res) MYSQL_ROW mysql_fetch_row(MYSQL_RES *r) void mysql_free_result(MYSQL_RES *r) void mysql_close(MYSQL* my) mysql_close(MYSQL* Cria/retorna o endereo do novo identificador de ligao base de dados (parmetro NULL) Estabelece a ligao a uma base de dados Envia para o servidor a linha de comando SQL passada no parmetro Guarda o resultado da ultima query na variavel de resultado Retorna o n de colunas do resultado res Retorna a prxima linha do resultado r ou NULL Liberta a memria alocada pelo resultado Termina a ligao base de dados e liberta os recursos usados
MySQL C API
#includeprog_sql.h MYSQL *conn; MYSQL_RES *qresult; MYSQL_ROW campos; int main(int argc, char **argv) { int i, Ncolunas;
prog_sql.h
prog_sql.c
if(!(conn = mysql_init( NULL ))) return(-1); if(!(mysql_real_connect(conn, NULL, argv[1], argv[2], "myDB1", 0, NULL, 0)) ) printf("connect error\n"); else { if(! mysql_query(conn,SELECT * FROM RegistoViatura WHERE Viatura='Moto'") ) { qresult = mysql_store_result( conn ); if (qresult != NULL) { Ncolunas = mysql_num_fields( qresult ); while( (campos = mysql_fetch_row( qresult )) != NULL ) { for(i=0 ; i < Ncolunas ; i++) printf("| %s ", campos[i]); printf("|\n"); $ make } gcc c I/usr/include/mysql prog_sql.c mysql_free_result(qresult); gcc o prog_sql prog_sql.o L/usr/lib/mysql lmysq... } } } $ ./prog_sql user1 user1pwd | 10012 | Joao | Moto | BMW | 2003 | 12-12-hr | mysql_close(conn); | 10046 | Antonio | Moto | Suzuki | 2006 | 23-23-xc | return(0); }
| 10098 | Lurdes $ | Moto | Kawa | 2004 | 54-33-sa |
10