Sei sulla pagina 1di 10

Disciplina: Tpicos Especiais em TI PHP

Este material foi produzido com base nos livros e documentos citados abaixo, que
possuem direitos autorais sobre o contedo. Favor adquiri-los para dar continuidade ao
curso.
Livro: Desenvolvendo Websites com PHP
Apostila da Diviso de Servios Comunidade Centro de Computao Unicamp

Banco de Dados: MySQL

Este mdulo da disciplina ir abordar a utilizao de um banco de dados em nossos


scripts PHP. Existem diversos banco de dados no mercado, abordaremos o uso do
MySQL.

Como criar o banco de dados


Para criar um banco de dados no MySQL utilizamos o utilitrio mysql. Assim, se voc
no tiver permisso para a criao de um banco de dados, deve-se solicitar ao
administrador para que ele crie seu banco de dados inicial.
Para a criao basta digitar:

mysql
> create database bdteste;
> use bdteste;

Para acessar a sua base de dados voc digitar o comando:

mysql u username p

O primeiro parmetro deve ser o caminho onde o mysql est localizado. A opo u
indica que ser digitado o nome de usurio e a opo p indica que ser digitado a senha
(password) para conexo.

Tipos de dados aceitos pelo MySQL

Tipo Descrio
Tinyint[(M)] Inteiro pequeno. Varia de 128 at +127
Bit, bool, boolean Sinnimo de tinyint.
Smallint [(M)] Inteiro variando de 32768 at +32767.
Mediumint [(M)] Inteiro variando de 8388608 at
+8388607
Int [(M)] Inteiro normal, variando de 2147483648
at +2147483647
Bigint [(M)] Inteiro grande, variando de
9223372036854775808 at
+9223372036854775807
Float(preciso) Ponto flutuante com preciso definida
Float [(M,D)] Ponto flutuante de preciso simples
Double [(M,D)] Ponto flutuante normal
Real [(M,D)] um sinnimo para double

1
Decimal [(M,D)] Esse tipo pode ser usado como uma string.
Cada nmero corresponde a um caractere.
Date Armazena uma data no formato yyy-mm-
dd. Pode variar de 1000-01-01 at 9999-
12-31
Datetime Armazena data e hora. O intervalo
suportado de 1000-01-01 00:00:00 at
9999-12-31 23:59:59
Timestamp [(M)] Armazena a data em formato=padro
UNIX
Time Armazena um tempo.
Year [(2|4)] Armazena um ano com 2 ou 4 dgitos
Char (M) String de tamanho fixo
Varchar (M) String de tamanho varivel. Possui no
mximo 255 caracteres
Tinytext Texto contendo at 255 caracteres
text Texto com at 65535 caracteres

Observaes:
- M representa o tamanho mximo para exibio
- D representa o nmero de dgitos aps o ponto decimal
- Os colchetes indicam as partes opcionais

Como criar tabela em um banco de dados


Aps a criao do banco de dados podemos acess-lo e comear a criar as tabelas que
armazenaro os dados. Isso feito por meio do comando CREATE TABLE, que possui
a seguinte sintaxe:

CREATE TABLE <nome_tabela> ( <nome_campo> tipo_de_dado [NULL | NOT


NULL] [DEFAULT valor_padro], ... );

Significado:
nome_tabela: representa o nome da tabela que ser criada. No pode haver nomes de
tabelas repetidos.
nome_campo: representa o nome pelo qual o campo ser referenciado.
tipo_de_dado: deve ser substitudo por um dos tipos aceitos pelo banco de dados.
NULL|NOT NULL: define se o campo pode aceitar valores nulos ou no.
DEFAULT: define um valor padro para inseres na tabela. Esse valor ser utilizado
se nenhum valor para este campo for informado.

Exemplo: Criao de tabelas para um loja virtual. As seguintes tabelas sero criadas
produtos, categorias e subcategorias.

CREATE TABLE produtos(


codigo_produto smallint NOT NULL,
nome_produto varchar(80) NOT NULL,
descricao_produto text,
preco float NOT NULL,
peso float,
cod_categoria smallint NOT NULL,

2
cod_subcategoria smallint NOT NULL,
adicionais text
);

CREATE TABLE categorias(


codigo_categoria smallint NOT NULL,
nome_categoria varchar(60) NOT NULL,
);

CREATE TABLE subcategorias(


codigo_subcategoria smallint NOT NULL,
nome_categoria varchar(60) NOT NULL,
codigo_categoria smallint NOT NULL,
);

Os campos seguidos da clusula NOT NULL no aceitaro valores nulos no momento


da insero no banco de dados.

Visualizando com o mysql


Para mostrar o nome das tabelas criadas digitamos no gerenciador do MySQL:

show tables;

E para visualizar a estrutura de determinada tabela:

describe <nome_tabela>; ou desc <nome_tabela>;

Voc ver uma tela com os nomes dos campos, o tipo, se aceitam valores NULL, os
valores-padro e outras caractersticas da tabela consultada.

Inserindo informaes em um banco de dados


Cada linha de uma tabela de banco de dados chamada de registro. Para inserir
registros na tabela, utilizamos o comando SQL INSERT.

Sintaxe:

INSERT INTO <nome_tabela> VALUES (valor1, valor2, ..., valorn);

INSERT INTO <nome_tabela> (nome_campo1, nome_campo 2, ..., nome_campox)


VALUES (valor1, valor2, ..., valorx);

No primeiro caso, os valores digitados no lugar de valor1, valor2, ..., valorn sero
includos na mesma ordem em que foram definidos os campos no momento da criao
da tabela. Os valores numricos no devem ser delimitados por aspas. J os dados do
tipo char, varchar, date e outros devem ser delimitados por aspas simples.

No segundo caso, os valores valor1, valor2, ..., valorx sero inseridos nos campos
campo1, campo2, ..., campox da tabela. Os campos no listados recebero o valor

3
NULL ou um valor padro (caso exista). Se os campos no listados foram criados com
NOT NULL ento ocorrer um erro na execuo do comando.

Exemplo:

INSERT INTO produtos VALUES(


1, Camisa do gremio, Camisa com listras azuis, 89.95, 1.5, 5, 2, Disponivel com as
numeraes 3,5 e 9);

INSERT INTO produtos


(codigo_produto, nome_produto, preco, cod_categoria, cod_subcategoria)
VALUES (2, Camisa do flamengo, 49.95, 5, 2);

A mensagem exibida aps a execuo deve ser:


Query OK, 1 row affected (0.05 sec)

Alterando um banco de dados


Podemos alterar a estrutura de uma tabela ou os valores dos registros da tabela. Essas
alteraes podem ser realizadas pelos comandos UPDATE e ALTER TABLE.

Comando UPDATE:
Realiza alteraes nos valores dos registros da tabela. Sintaxe:

UPDATE <nome_tabela>
SET campo1=valor1 [, campo2=valor2, , campon=valorn]
[WHERE <condicoes>];

Caso a clusula WHERE no seja utilizada, a alterao ser efetuada em todos os


registros da tabela.

Exemplos:

Alterao do cdigo de uma categoria:


UPDATE categorias SET codigo_categoria=6 WHERE codigo_categoria=5;

Alterao do cdigo de todos os produtos que pertenciam a essa categoria:


UPDATE produtos SET cod_categoria=6 WHERE cod_categoria=5;

O gerenciador do banco de dados sempre informar o nmero de registros afetados aps


a execuo do comando UPDATE.

Comando ALTER TABLE:


Realiza alteraes na estrutura da tabela (inclui campos, altera nome de um campo ou
de uma tabela). Sintaxe:

ALTER TABLE <nome_tabela> ADD <nome_campo> tipo_de_dado;

ALTER TABLE <nome_tabela> CHANGE <nome_campo> <novo_nome_campo>


tipo_de_dado not null;

4
ALTER TABLE <nome_tabela> RENAME TO <novo_nome_tabela>;

Exemplo:

ALTER TABLE produtos ADD fabricante varchar(50);


ALTER TABLE produtos CHANGE codigo_produto cod_prod (varchar(50)) not null;

O campo fabricante ser includo como o ltimo campo da tabela produtos.

OBS: No possvel excluir campos de uma tabela. Se precisarmos excluir um campo


devemos apagar a tabela e cri-la novamente.

Excluindo informao de um banco de dados


Podemos realizar dois tipos de excluses: excluir uma tabela ou excluir registros de uma
tabela. Isto pode ser feito atravs dos comandos DELETE e DROP TABLE.

Comando DELETE:
Esse comando exclui um ou mais registros de uma tabela.Sintaxe:

DELETE FROM <nome_tabela> [WHERE <condies>];

Caso a clusula WHERE no seja utilizada todos os registros da tabela sero excludos.

Exemplos:

Excluso da categoria Artigos Esportivos da tabela categorias:


DELETE FROM categorias WHERE nome_categoria=Artigos Exportivos;

Excluso de todos os produtos da categoria udio e vdeo (3):


DELETE FROM produtos WHERE cod_categoria=3;

Excluso de todos os produtos existentes na tabela:


DELETE FROM produtos;

O gerenciador do banco de dados sempre informar o nmero de registros afetados aps


a execuo do comando DELETE.

Comando DROP TABLE:


Serve para excluir uma tabela de um banco de dados. Sintaxe:

DROP TABLE <nome_tabela1> [ , <nome_tabela2, ... ];

Exemplo:

DROP TABLE produtos, categorias, subcategorias;

Fazendo consultas em um banco de dados


O comando SELECT responsvel pelos diversos tipos de consultas que podem ser
feitas.

5
Comando SELECT:
Com este comando podemos selecionar todas as linhas de uma ou mais tabelas, ou
apenas uma parte delas. Sintaxe:

SELECT <lista_campos> FROM <lista_tabelas> [WHERE <condies>];

Se <lista_campos> for substituda por um asterisco (*), sero retornados todos os


campos existentes na(s) tabela(s) em uso. Se a clusula WHERE for omitida, sero
mostrados todos os registros das tabelas determinadas em <lista_tabelas>.

Exemplos:

Listar todas as categorias existentes na tabela categorias:


SELECT * FROM categorias;

Listar o cdigo, o nome e o preo de todos os produtos (da tabela produtos):


SELECT codigo_produto, nome_produto, preco FROM produtos;

- Utilizando a clusula WHERE para determinar quais registros devem ser


retornados:

Obtendo o nome e a descrio dos produtos que custam mais de R$50,00:


SELECT nome_produto FROM produtos WHERE preco>50;

Listar todas as subcategorias pertencentes a uma categoria da loja:


SELECT nome_subcategoria FROM subcategorias WHERE codigo_categoria=5;

O comando WHERE deve ser seguido por uma ou mais condies. Essas condies
podem conter os operadores de comparao >, <, >=, <=, =, e <>. Se houver mais de
uma condio a ser analisada, utilizamos os operadores lgicos AND e OR entre elas.
Quando for necessrio podemos utilizar o parnteses para determinar a ordem de
avaliao das expresses.

Exemplo:
O comando abaixo ir retornar o nome de todos os produtos que pertencem categoria
Artigos Esportivos e subcategoria Camisetas de Futebol ou retorna o nome dos
produtos que possuem o cdigo da subcategoria igual a 3, independentemente da
categoria.

SELECT nome_produto FROM produtos WHERE cod_categoria=5 AND


cod_subcategoria=2 OR cod_subcategoria=3;

Utilizando o parnteses para informar a ordem de avaliao das expresses:

SELECT nome_produto FROM produtos WHERE cod_categoria=5 AND


(cod_subcategoria=2 OR cod_subcategoria=3);

Comando LIKE:
A linguagem SQL oferece o operador LIKE que utilizado para fazer consultas mais
complicadas. Com ele, pode-se descobrir por exemplo todos os produtos que comeam

6
com a letra E, ou todos que terminar com a letra A, ou todos que contenham a letra
O. Podemos tambm buscar por palavras dentro de um campo dos registros de uma
tabela.

Exemplo:
Pesquisa em uma tabela de veculos todos os carros que possuem o adicinal ar-
condicionado:

SELECT * FROM veiculos WHERE adicionais LIKE %ar-condicionado%;

Selecionar todas as categorias cujo nome terminam com a letra o:

SELECT * FROM categorias WHERE nome_categoria LIKE %o;

O comando LIKE utilizado com o smbolo %, que representa uma sequencia de


caracteres, ou com o smbolo _, que representa um caracter qualquer.

Formas de uso:

Operador Descrio
LIKE _E% A letra E est na segunda posio.
LIKE %O Termina com a letra O.
LIKE A%E%O Comea com a letra A, termina com a letra
O e possui a letra E no meio.
NOT LIKE %@% Retorna aqueles que NO contm o
caractere @. Podemos utilizar, por
exemplo, para verificar se existem e-mails
digitados incorretamente em um banco de
dados, j que o caractere @ deve existir
em todos os e-mails.

OBS: importante lembrar que existe a distino entre as letras maisculas e


minsculas. Por isso interessante que as informaes sejam armazenadas no banco de
dados sempre em letras maisculas ou minsculas para facilitar a pesquisa.
Comando DISTINCT:
Esta opo utilizada sempre que queremos excluir valores repetidos do resultado de
um consulta.

Exemplo: Visualizar o nome de todas as cidades existentes no banco de dados.

SELECT DISTINCT (cidade) FROM usuarios;

Comando COUNT:
Pode ser usado para contar o nmero de registros existentes na tabela.

Exemplo:

SELECT COUNT(*) FROM produtos;


SELECT COUNT(*) FROM produtos WHERE cod_categoria=1;

7
Comando SUM: (usada apenas para dados do tipo numrico)
Soma os valores de determinado campo de uma tabela.

Exemplo:

SELECT SUM (preco) FROM produtos;

Comando MAX/MIN:
Retorna o registro que possui determinado campo de maior/menor valor.

Exemplo:

SELECT MAX (preco) FROM produtos;

Comando AVG: (usada apenas para dados do tipo numrico)


Calcula a mdia dos valores de determinado campo.

Exemplo:

SELECT AVG (preco) FROM produtos;

Comando GROUP BY:


Permite agrupar os resultados de uma consulta.

Exemplo:

Para saber quantos produtos existem em cada uma das categorias, em vez de digitar um
comando com COUNT para cada uma, podemos fazer da seguinte forma:

SELECT cod_categoria,COUNT(*) FROM produtos GROUP BY cod_categoria;

Tambm pode ser utilizado com a opo HAVING que seleciona alguns registros
retornados pelo GROUP BY.

Exemplo:

SELECT cod_categoria,COUNT(*) FROM produtos GROUP BY cod_categoria


HAVING COUNT(*)=1;

Consultas utilizando mais de uma tabela:

Ecemplo: Mostrar o nome da categoria com o nmero de ocorrncias de produtos de


cada cdigo de categoria:

SELECT cod_categoria,COUNT(*) FROM produtos,categorias WHERE


codigo_categoria-cod_categoria GROUP BY nome_categoria;

Ordenando resultados de uma consulta


Para ordenar registros retornados por uma consulta a um banco de dados, utilizamos a
opo ORDER BY.

8
Exemplo:

Ordenar em ordem alfabtica o nome de todos os produtos da loja.

SELECT codigo_produto,nome_produto FROM produtos ORDER BY nome_produto;

SELECT codigo_categoria,nome_subcategoria FROM subcategorias ORDER BY


codigo_categoria,nome_subcategoria;

Opo DESC:
Ordenao decrescente dos resultados.

Ex.: SELECT codigo_produto,nome_produto FROM produtos ORDER BY


nome_produto DESC;

Determinando o nmero de linhas retornadas


Utilizando a opo LIMIT podemos determinar o nmero mximo de registros que uma
consulta pode retornar.

Exemplo:

SELECT * FROM produtos WHERE nome_produto LIKE CD% LIMIT 10;

Desta forma ser exibida a lista de CDs de 10 em 10 por pgina. Para mostrar o
resultado sempre na mesma ordem ao usurio necessrio usar a opo ORDER BY.

SELECT * FROM produtos WHERE nome_produto LIKE CD% ORDER BY


nome_produto LIMIT 10;

Opo OFFSET:
Utilizado em conjunto com o LIMIT para determinar a partir de qual registro a consulta
deve retornar.

SELECT * FROM produtos WHERE nome_produto LIKE CD% ORDER BY


nome_produto LIMIT 10 OFFSET 10;

Utilizando INSERT e SELECT para inserir registros


Podemos utilizar a combinao dos comandos INSERT e SELECT para inserir os
registros de uma tabela em outra.

Exemplo:
INSERT INTO tabela_precos SELECT nome_produto, preco FROM produtos WHERE
codigo_produto>=6 AND codigo_produto<=55;

Criando e utilizando sequncias


Sequncia um recurso que utilizamos para fazer uma numerao automtica de
determinado campo de uma tabela. Utilizando-se MySQL pode-se criar um campo com
a propriedade de auto-incremento da seguinte forma:

9
CREATE TABLE produto(
codigo int NOT NULL AUTO_INCREMENT,
nome varchar(70) NOT NULL,
primary key(codigo)
);

O campo com numerao automtica deve ser declarado como chave primria da tabela
para evitar a gravao de chaves repetidas. E para inserir registros na tabela:

INSERT INTO produto (nome) VALUES (Taco de Baseball);

10

Potrebbero piacerti anche