Sei sulla pagina 1di 10

Introduo s bases de dados

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 )

Introduo s bases de dados


Conceito
Coleco estvel de dados que usada por utilizadores e sistemas de aplicaes Conjuntos de tabelas contendo os dados relacionados entre si
A t b l so estruturas com uma ou mais colunas e li h d d d As tabelas t t i l linhas de dados Sistemas de ordenao, insero e remoo, filtragem, entre outros, para facilitar a manipulao dos dados

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.

Sistemas de Gesto de Bases de Dados


Controlam as operaes efectuadas sobre os dados das tabelas
Transaces

Assegura que as transaces so Atmicas


Quando iniciadas so sempre executadas por completo

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

Exemplos de sistemas de gesto


MySQL, Oracle, Microsoft SQL Server, PostgreSQL, Informix, ...

SQL Structured Query Language


O que
Linguagem de programao desenvolvida para operar com bases de dados Contm operadores para definir dados e para manipul-los

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

SQL Tipos de dados


Inteiros
BIGINT, INT, MEDIUMINT, SMALLINT, TINYINT
Sintaxe : TIPO (n. de dgitos) [modificador]

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

SQL Manipulao de dados


Seleco de valores
SELECT Campo1 FROM TabelaA WHERE Campo1 < Campo1 ( 20 ) ;

Insero de valores
INSERT INTO TabelaB ( Num , Nome , Curso ) VALUES
Joao , Electro ) ; ( 12323 ,

Remoo de valores

DELETE FROM TabelaC WHERE Cidade = Cidade ( Viana );

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

Base de de Base Base de dados dados dados

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

MySQL (caso linux)


Conjunto de ferramentas para manipular informao em bases de dados
Aplicaes ou Clientes
2 ex.: $ mysqladmin [opes] comandos ... ex :
$ mysqlshow [opes] [nomeBD [nome_tab [ nome_col]]] [nomeBD nome_col]]]

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

SGBD ou Servidor mysqld


A interface da linha de comandos (CLI) Linha de comandos do tipo shell que aceita comandos queries para interaco com a base de dados mysql (opes) [base_de_dados] [base_de_dados] Ex.: $ mysql u root p
mysql> mysql> use basedadosX; basedadosX; mysql> mysql> create table Alunos (Num int, Nome char(50), BI int); int, char(50), int); mysql> mysql> insert into Alunos (34521, Jose Luis, 12797977 ); Jose Luis,

Exemplos de operaes de gesto


Arranque do servidor
/etc/init.d/mysqld start etc/init.d/

Alterao da password do administrador do SGBD


mysqladmin -u root password novapass u

Criao de uma base de dados no SGBD


mysqladmin -u root -h localhost -p create myDB Enter password:

Listar as bases de dados do SGBD


mysqlshow -u root -h localhost -p Enter password: +--------------------+ | Databases | +--------------------+ | information_schema | | myDB | | mysql | +--------------------+

Exemplos de operaes na CLI


Acesso consola do servidor mysql a CLI mysql,
mysql -h localhost -u root -p Enter password: mysql >

Ci d b Criao da base d d d myDB1 de dados DB1


mysql > create database myDB1;

Listar as bases de dados do SGBD


mysql > show databases; +--------------------+ | Databases | +--------------------+ | information_schema | | myDB | | myDB1 | | mysql | +--------------------+

Seleccionar a base de dados de controlo do sistema: mysql


mysql > use mysql; Database changed

Exemplos de operaes na CLI


Acrescentar um utilizador user1, com passwd user1pwd e privilgios de seleco (o '%' permite-lhe aceder de qualquer host)
mysql > insert into user (Host,User,Password,Select_priv) -> values ('%','user1',password('user1pwd'),'Y'); Query OK, 1 row affected, 3 warnings (0.17 sec)

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)

Forar a actualizao da tabela de privilgios


mysql > flush privileges; Query OK, 0 rows affected (0.00 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)

Seleco da base de dados myDB1 que vai usar


mysql > use myDB1;

Criao da tabela RegistoViatura (dos acetatos)


mysql > create table RegistoViatura ( -> Num int, -> Nome varchar(30), -> Viatura varchar(10), -> Marca varchar(10), -> Ano year, -> Matricula char(10) ); Query OK, 0 rows affected (0.07 sec)

Verificar a criao da tabela


mysql> show Tables; +-----------------+ | Tables_in_myDB1 | +-----------------+ | RegistoViatura | +-----------------+ 1 row in set (0.00 sec)

Exemplo de GUI - phpMyAdmin

MySQL PHP API


Conjunto de funes e tipos de dados que permitem a programas PHP interagir com o SGBD Funes
mysql_list_dbs() mysql_list_dbs()
Lista as bases de dados registadas num servidor MySQL

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 PHP Exemplos


<?php $con = mysql_connect("localhost","mysql_user","mysql_pwd"); if (!$con) { die('Could not connect: ' . mysql_error()); } $sql = "SELECT * FROM Person"; mysql_query($sql,$con); <?php // some code mysql_close($con); ?> $con = mysql_connect(sql.isep.pt", "peter", "abc123"); if (!$con) { die('Could not connect: ' . mysql_error()); } $db_selected = mysql_select_db("test_db", $con); if (!$db_selected) { die ("Can\'t use test_db : " . mysql_error()); } mysql_close($con); ?>

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

Chamando uma Makefile


Programa make assume como parmetro o ficheiro Makefile
Nota: no usar espaos na indentao da Makefile !

CC INCLUDES LIBS all: prog.o:


tab

= 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

#include<stdio.h> #include<stdlib.h> #include<mysql.h>

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

Potrebbero piacerti anche