Você está na página 1de 55

Eliseu Santos

Banco de Dados

Tcnico Integrado em Informtica
MySQL e Esquemas


PARTE I
TIPOS DE DADOS

Principais tipos
Not null indica que o atributo dever ser
obrigatoriamente informado pelo usurio na hora de inserir
dados na tabela. (Todos os campos, por default, aceitam
valores nulos)

Auto_increment indica que o atributo ser preenchido
automaticamente com valores auto-incrementados (no
possvel definir um valor para esse atributo na hora de
inserir dados)

Varchar (tamanho) tipo de String com tamanho de
armazenamento varivel, de acordo com os valores
inseridos pelo usurio (o tamanho indicado na criao da
tabela a quantidade mxima de caracteres que podero
ser armazenados no campo)

Principais tipos
Char (tamanho) tipo de String com tamanho de
armazenamento fixo, de acordo com a quantidade de
caracteres definidos na criao da tabela

Date tipo data no formato ano-mes-dia (Obs: no SQL-
Server, o tipo datetime)

Numeric(n,d) tipo numrico que aceita valores reais (n
indica o total de nmeros e d indica a quantidade de
decimais)

Primary Key restrio de integridade que define a chave
primria da tabela (se a chave for composta, os nomes
devem ser separados por vrgulas)
Principais tipos Numricos
INT (M) UNSIGNED ZEROFILL = INTEGER
Signed: -2.147.483.648 a 2.147.483.647
Unsigned: 0 a 4.294.967.295.

FLOAT (M,D) UNSIGNED ZEROFILL
Single-precision: 7 casas decimais
-3.402.823.466E+38
3.402.823.466E+38

DOUBLE (M,D) UNSIGNED ZEROFILL
Double-precision: 15 casas decimais
-1.7976931348623157E+308
1.7976931348623157E+308

DECIMAL (M ,D) UNSIGNED ZEROFILL
Double armazenado em caracteres.
Geralmente usado para valores monetrios.
Principais tipos Textuais
BLOB (M)
String usado para armazenamento de dados binrios.
65535 caracteres.
Case-sensitive: texto != Texto

CHAR (M)
255 caracteres
Preenche espaos vazios com caracter espao.
Ex: CHAR(10) Inserir John John

VARCHAR (M)
255 caracteres
No preenche espaos vazios. (+ novo)

TEXT (M)
String usado para armazenamento de dados textuais.
Non Case-Sensitive: texto == Texto
Principais tipos de Data/Hora
DATE
AAAA-MM-DD Exemplo: 2009-08-01
1000-01-01 at 9999-12-31

DATETIME
AAAA-MM-DD HH:MM:SS
Exemplo: 2009-08-01 08:25:56
1000-01-01 00:00:00 at 9999-12-31 23:59:59

TIME
HH:MM:SS Exemplo: 08:25:56
-838:59:59 at 838:59:59

YEAR (2|4)
AAAA ou AA
1901 at 2155
Caractersticas dos tipos
Algumas convenes no uso dos tipos
ZEROFILL
Preenche o campo com zeros.
Exemplo
INT(6) ZEROFILL
Inserir 8 000008

UNSIGNED
S aceita valores positivos
unsigned = sem sinal
ZEROFILL assume automaticamente UNSIGNED.
Unique restrio de integridade que indica que um
campo no poder receber valores repetidos na tabela
(ou seja, dois registros no podem ter o mesmo valor
para esse campo)

Check restrio de integridade que indica condies
para o preenchimento de um campo

In (conjunto de valores) indica que o valor de um
determinado atributo deve estar presente no conjunto
de valores definido, para que os dados possam ser
inseridos na tabela
Restries


MYSQL CONSOLE
Para testar os cdigos SQL
Instalar MySQL
Abrir console do Windows: cmd.exe

Entrar no console do mysql:
mysql --user=usuario --password=senha
mysql -u usuario -p senha (abreviado)
mysql -u usurario (senha pedida depois)

Utilizar os SQL para
Criar e visualizar a estrutura de bases de dados
Criar e visualizar a estrutura de bases de tabelas
Inserir, remover e alterar dados nas tabelas.
Realizar consultas nas tabelas (relatrios).
Comandos console mysql
show databases;
mostra bases de dados existentes
use <nome da base>;
seleciona a base de dados a ser usada
show tables;
mostra as tabelas contidas na base de dados selecionada
describe <nome da tabela>;
mostra a estrutura da tabela dada
source <caminho do arquivo de scripts>;
executa os scripts contidos no arquivo (pode ser txt)


MySQL Query Browser
MS Query Browser
Instalado no pacote Gui Tools
Executa: 1 comando SQL (Resultset)
N comandos SQL (Script)
CREATE/DROP DATABASE
#criar base de dados
CREATE DATABASE locadora;
CREATE DATABASE IF NOT EXISTS locadora;

#selecionar base de dados (chamado aps CREATE DATABASE)
USE locadora;

#visualizar os databases criados
SHOW DATABASES;

#remove base de dados
DROP DATABASE locadora;
DROP DATABASE IF EXISTS locadora;

No MySQL, cada Base de Dados uma pasta:
C:\Arquivos de Programas\MySQL\MySQL
Server\data\locadora\
CREATE TABLE
CREATE TABLE vendedor (
vendedor_cod int(10), #inteiro de 10 dgitos
nome varchar(45), #string de 45
caracteres
idade int(10),
cidade varchar(45),
email varchar(45),
PRIMARY KEY (vendedor_cod) #chave primria (PK)
);

CREATE/DROP TABLE
#renomeando tabela
RENAME TABLE vendedor TO vendedor2011;

#criando tabela com cautela
CREATE TABLE IF NOT EXISTS vendedor;

#Excluidoc tabela com cautela
DROP TABLE IF EXISTS vendedor;

OBS: As tabelas sempre devem ser destrudas na
ordem inversa que foram criadas por causa das
dependncias de chaves estrangeiras.

PRIMARY KEY (PK)
CREATE TABLE telefone (
ddd varchar(2),
numero varchar(8),
tipo char(1),
PRIMARY KEY (ddd, numero) # PK com N campos
CHECK (tipo in (R,C)), # R = Residencial
); # C = Comercial

CREATE TABLE celular (
id int PRIMARY KEY, # PK com 1 campo
ddd varchar(2),
numero varchar(8),
tipo char(1),
CHECK (tipo in (P,N)), # P = Pr-pago
); # N- normal
CREATE TABLE cliente(
cliente_cod int not null auto_increment, # contador automatico
nome varchar(80) not null, # tamanho 80 e no pode ser vazio
cpf char(12) not null, # tamanho 12 e no pode ser vazio
data_nasc date, # formato yyyy-mm-dd
sexo char(1),
salario numeric (9,2),
PRIMARY KEY (CodC), # Chave primaria
UNIQUE (cpf), # No aceita cpf repetido
CHECK (sexo in (M,F)), # s aceita M ou F
CHECK (salario > 0) # s aceita salario > 0
);
CONSTRAINTS (Restries)
TIPOS DE TABELAS
Principais tipos de tabelas do MySQL
MyISAM
Ignora restries de chaves estrangeiras
Melhor desempenho
Sem transao (operao atmica)

InnoDB
Verifica restries de chaves estrangeiras
Pior desempenho
Com transao
Relacionamentos
Participao total
FK precisa ser NOT NULL

Se participao parcial
FK pode ser NULL

Os tipos importam no relacinamento
FK deve ter mesmo tipo e restries (exceto auto_increment)
do campo correspondente na tabela que cedeu o
imprstimo.

A ordem de criao importa:
S possvel referenciar tabelas anteriores.
A ordem de destruio importa:
Primeiro destrumos as tabelas com dependncia.
Dica: use a ordem inversa da criao das tabelas.
Erros do MySQL
As mensagens de erro no so claras como nas
linguagem de programao.

Erros comuns:
Erro de sintaxe SINTAX ERROR...
Algo errado na SQL.
Erro de criao de tabela CANT CREATE...
Diferena de tipo entre PK e FK na outra
tabela.
Campo no existe FIELD DOESNT EXIST...
Campo no definido na SQL da tabela.

Query Browser:
Clique 2 vezes sobre o erro para ir tabela errada.
CREATE TABLE conta (
conta_cod int auto_increment,
descricao varchar(40),
PRIMARY KEY (conta_cod)
)Type=InnoDB;

CREATE TABLE filial (
filial_cod Int auto_increment,
endereco varchar(50),
bairro varchar(40),
cidade varchar(30),
cep char(8),
uf char(2),
PRIMARY KEY (filial_cod)
)Type=InnoDB;
FOREIGN KEY (PK)
FOREIGN KEY (FK)
CREATE TABLE transacao ( # tabela 1:1:1
cliente_cod int, # PK FK
conta_cod int, # PK FK
filial_cod int, # FK
data DATE,
tipo VARCHAR(2),
valor DECIMAL(12,2),

primary key (cliente_cod, conta_cod, data),

# FKs de tabelas diferente declarao separada
FOREIGN KEY (cliente_cod)
REFERENCES cliente (cliente_cod),
FOREIGN KEY (conta_cod)
REFERENCES conta (conta_cod),
FOREIGN KEY (filial_cod)
REFERENCES filial (filial_cod)
)Type=InnoDB;
FOREIGN KEY (FK)
CREATE TABLE cliente_tem_telefone ( # tabela N:N
cliente_cod int,
tel_ddd varchar(3),
tel_num varchar(8),

# o campo cliente_cod NO PODE SER CHAVE PRIMARIA porque
gerada de tabela estrangeira;

FOREIGN KEY (cliente_cod)
REFERENCES clientes (cliente_cod);

# FKs da mesma tabela declarao nica
FOREIGN KEY (tel_ddd, tel_num)
REFERENCES telefone (ddd, num)
)
Type=InnoDB;

ou...

Engine=InnoDB;

PK e FK - Integridade
PRIMARY KEY(coluna1, coluna2);

FOREIGN KEY (coluna1, coluna2)
REFERENCES <tabela>(coluna1,coluna2);
ON UPDATE ao
ON DELETE ao,

Ao - Regras
REFERENCES: Campo da tabela pai que vai ser passado por referncia,
`Tabela`.`coluna`

ON UPDATE: Relate as aes que a coluna filho sofrer quando a coluna pai for
atualizada.

ON DELETE: Relate as aes que a coluna filho sofrer quando a coluna pai for
deletada.

CASCADE: Se houver um DELETE da tabela pai, as tabelas filhas tambm sero
deletadas, evitando inconsistncia de dados. Se houver um UPDATE na chave
primria da tabela pai, as chaves estrangeiras das tabelas filhas tambm sero
atualizadas.

SET NULL: Caso a tabela pai seja deletada ou sua chave primria seja alterada,
as tabelas filhas tero as suas chaves estrangeiras setadas, ou seja, configuradas
para NULL (exceto quando forem criadas com o parmetro NOT NULL).

NO ACTION: no permite a ALTERAAO da FK

RESTRICT: No permite a EXCLUSO da FK.
CREATE TABLE aluno (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
nome CHAR(30) NOT NULL
) TYPE=InnoDB;

CREATE TABLE cursos (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
nome CHAR(30) NOT NULL
) TYPE=InnoDB;

CREATE TABLE notas (
aluno_id INT NOT NULL,
cursos_id INT NOT NULL,
date DATE NOT NULL,
nota DOUBLE NOT NULL,
PRIMARY KEY(aluno_id, cursos_id, date),
INDEX i2 (cursos_id),
FOREIGN KEY (aluno_id) REFERENCES aluno(id) ON DELETE CASCADE,
FOREIGN KEY (cursos_id) REFERENCES cursos(id) ON DELETE RESTRICT
) TYPE=InnoDB;
Exemplo de uso - Regras
CASCADE para aluno, isto , se for removido um registro da tabela de
aluno, todas as suas notas sero removidas automaticamente.

No caso da tabela de cursos, no ser possvel remover um curso que
possua notas cadastradas para ele.

Alm da restrio ON DELETE, o InnoDB permite tambm o ON UPDATE,
que aplica as restries no caso de atualizaes dos campos relacionados
entre as tabelas.
Foram criada 3 tabelas: aluno, que armazena os alunos de um curso; a
tabela cursos que contm as disciplinas ministradas e a tabela notas

No modelo possvel que um curso possua vrias avaliaes em datas
distintas. Neste caso, foram criadas as tabelas como tipo InnoDB
(TYPE=InnoDB), para que as regras de integridade sejam respeitadas.
As regras definidas foram:
Explicao do Exemplo:


PARTE II
ALTER TABLE
#Adicionar coluna
ALTER TABLE clientes
ADD fone varchar(12);

#Alterando colunas:
ALTER TABLE clientes CHANGE fone telefone char(30) not null;

#Eliminando colunas:
ALTER TABLE clientes DROP telefone;

#Limpar a tabela:
TRUNCATE TABLE clientes;

#Renomear tabela
ALTER TABLE nomeTabelaVelho RENAME nomeTabelaNovo;


ALTER TABLE cliente_tem_telefone
ADD FOREIGN KEY(cliente_cod) REFERENCES clientes(cliente_cod)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
ALTER TABLE
Exerccio
Crie e destrua todas as tabelas
Crie um database chamado hospital

Ambulatorio(numero, andar, capacidade)

Medico(cod, crm, nome, idade, data_nasc, especialidade, amb_numero)

Paciente(cod, nome, idade, cidade)

Consulta(med_cod pac_cod, data, hora, diagnostico)

Funcionario(cod, nome, idade, cidade, salrio, amb_numero)

OBS: a ordem de criao e destruio importante.


DML (Data Manipulation Language)
Inserindo dados (povoamento)
INSERT INTO
Campos definidos como AUTO_INCREMENT no podem
assumir valores informados pelo usurio, e no precisam
ser includos na lista de atributos da tabela.

Os valores desse campo vo sendo incrementados
automaticamente e no so reaproveitados (Ex: mesmo
que o CLIENTE de cdigo 5 seja excludo do banco, nenhum
outro CLIENTE receber esse cdigo )

No SQL Server, o valor inicial de campos AUTO_INCREMENT
1 e o incremento tem valor 1.
INSERT INTO
Valores do tipo char, varchar, date e time (ou datetime no
SQL-Server) devem ser representados entre apstrofos
(aspas simples ).

No SQL-Server, o formato padro para datas YYYY-MM-
DD (ano-mes-dia) e para horas HH:MM:SS (hora-minuto-
segundo)

As casas decimais dos nmeros devem ser separadas por
pontos, em vez de vrgulas

Valores do tipo varchar podem conter acentos e espaos
em branco
INSERT INTO - Exerccios
CREATE TABLE pacientes (
paciente_cod int NOT NULL auto_increment,
nome varchar(45) NOT NULL default ,
idade int(3),
cidade varchar(45) NOT NULL ,
doenca varchar(45) NOT NULL ,
sexo char(1),
PRIMARY KEY (paciente_cod,nome)
CHECK (sexo in (M,F))
);

INSERT INTO pacientes
VALUES (Joo Santana,18,Porto Alegre,Gripe,M);

INSERT INTO pacientes (nome,idade,cidade,doenca,sexo)
VALUES (Joo Santana,18,Porto Alegre,Gripe,M);
INSERT INTO - Exerccios
Inserindo vrias linhas de uma s vez.

INSERT INTO paciente VALUES
('1', 'Mac', '25', NULL , 'gripe', 'm'),
('2', 'Ana', '24', 'Peromba', 'osmose', f'),
('3', 'Jane', '25', 'Pitomba', 'gripe', f'),
('4', 'Marlos', '20', 'Amebpolis', 'fedor', 'm'),
('5', 'Clark', '27', 'Pequenpolis', 'criptonose', 'm'),
('6', 'Barlos', '34', NULL, 'resfriado', 'm'),
('7', 'Ada', '24', 'Racoon City', 'T-Virus', f'),
('8', 'Clara', '20', 'Campo da Lagoa',cotovelose',f');
INSERT INTO clientes (nome,cpf,data_nasc,sexo,salario)
VALUES (Ana Moura, 8245738, 1979-10-02, F , 650.39);

Adicione os campos abaixo na tabela. Lembra que no precisa inserir o cdigo
Cliente_cod Nome Cpf Data_nasc Sexo salrio
1 Karine da Silva chanel 8787887877 1985-12-05 F 1985.55
2 Joo Paulo 8788454788 1977-12-15 M 1500.45
3 Priscila Almeida 5689958585 1999-02-25 F 1150.40
4 Ana Maria 2356989566 1975-10-15 F 1580.30
5 Carlos de Jesus 2356989998 1985-07-08 M 1250.35
6 Janaina Lemos 2356989892 1985-06-01 F 1300.35
7 Jaqueline Alves 2356821252 1985-04-09 F 1980.25
INSERT INTO - Exerccio
INSERT INTO conta(descricao)
VALUES (Pagamento de Agua)

Adicione os campos abaixo na tabela. Lembra que no precisa inserir o cdigo
Conta_cod Descrio
1 Pagamento de Funcionrios
2 Recebimento de Clientes
3 Pagamento de comisso
4 Pagamento de FGTS
5 Pagamento de IR
6 Pagamento de Luz
INSERT INTO - Exerccio
INSERT INTO - Exerccio
INSERT INTO clientes (endereco,bairro,cidade,cep,uf)
VALUES (Rua Santanas, 285, Centro, Porto Alegre, 90895-050 , RS);

Adicione os campos abaixo na tabela. Lembra que no precisa inserir o cdigo
Cliente_cod Endereo Bairro Cidade Cep uf
1 Rua Pedro Simon, 28 Sarandi Porto Alegre 90002-050 RS
2 Av. Santos Dumont. 171 Vista Alegre Cachoeirinha 94875-020 RS
3 Av. Assis Brasil, 456 So Joo Porto Alegre 90050-052 RS
4 Rua Xavantes, 5654 Princesa Isabel Cachoeirinha 94940-800 RS
5 AV. Flores da Cunha, 56 Centro Cachoeirinha 94857-580 RS
6 Av. Santa Clara, 156 Santa Rosa Viamo 98986-565 RS
7 Rua Joaquim da Silva, 23 Santa Rosa Gravata 96895-256 RS
INSERT INTO - Exerccio
INSERT INTO telefone (ddd,num,tipo)
VALUES (51,3487-2586,R);
Adicione os campos abaixo na tabela. Lembra que no precisa inserir o cdigo
ddd num tipo
51 3247-2544 R
21 3256-8965 C
48 3256-8956 R
11 2365-1478 C
21 3216-5698 C
51 3471-8989 R
51 2351-8798 C
INSERT INTO - Exerccio
INSERT INTO celular (ddd,num,tipo)
VALUES (51,9287-2586,P);
Adicione os campos abaixo na tabela. Lembra que no precisa inserir o cdigo
id ddd num tipo
1 51 9247-2544 P
2 21 9356-8965 N
3 48 8156-8956 P
4 11 8365-1478 N
5 21 9916-5698 P
6 51 9871-8989 P
7 51 9351-8798 N
INSERT INTO - Exerccio
INSERT INTO cliente_tem_telefone (cliente_cod,tel_ddd,tel_num)
VALUES (1,51, 3247-2544);
Obs: O Cliente_cod da tabela Clientes;
O ddd e num da tabela telefone
Cliente_cod Tel_num Tel_num
1 51 3247-2544
2 21 3256-8965
3 48 3256-8956
4 11 2365-1478
5 21 3216-5698
6 51 3471-8989
7 51 2351-8798
SELECT - Exerccios
SELECT * FROM pacientes;

SELECT paciente_cod, nome, idade FROM pacientes;

SELECT * FROM Clientes;

SELECT cliente_cod, nome, data_nasc, salario FROM clientes;

SELECT * FROM conta;

SELECT * FROM filial;

SELECT filial_cod, endereco, bairro, cidade FROM filial;

SELECT * FROM telefone;

SELECT ddd, num FROM telefone;

SELECT * FROM celular;

SELECT celular_cod, ddd, num FROM celular;


PARTE II
MySQL
Instalao
Instalando MySQL

Execuo
Auto-Executando como Windows Service
Executando pelo console

Utilizao
Usando MySQL shell
Usando Query Browser
Instalao
Download
Site: www.mysql.com
MySQL Server 5
Contm MySQL Console

MySQL GUI Tools (opcional)
Browser grfico pra criar tabelas
Documentao (BR e EN)

Instalao
Modo de instalao

Instalar como Windows Service
Carrega automtico quando Windows abre

Deixar para chamar manualmente
Chamar por console ou Windows Explorer
Execuo (console)
C:\Arquivots de Programas\
MySQL\MySQL Server 5.0\bin\mysqld-nt.exe
Utilizao
Usando MySQL Shell
Abrir outro console
mysql db_name ou
mysql --user=user_name --password=your_password db_name


Utilizao
Usando Query Browser
Utilizao
Usando o Query Browser para
Criar Base
Criar Tabelas
Atributos
Chaves primrias (Primary Keys - PK)
Restries (constraints)
Chaves estrangeiras (Foreign Keys - FK)
Povoar banco
Realizar consultas
MySQL Query Browser