48
Introdução ao MySQL Conselho Regional de Estatística da 3 a Região Anderson Carlos D. Sanches www.software.pro.br

Introdução ao MySQL

Embed Size (px)

Citation preview

Page 1: Introdução ao MySQL

Introdução ao MySQL

Conselho Regional de Estatística da 3a Região

Anderson Carlos D. Sanches

www.software.pro.br

Page 2: Introdução ao MySQL

Agenda

● 1. Definições de SGBD e terminologia;● 2. Modelagem de dados e cardinalidade;● 3. Formas normais;● 4. DCL e DML;● 5. Prática: criação de um banco de dados;● 6. Consultas em um banco de dados exemplo.

Page 3: Introdução ao MySQL

Vocabulário

Banco de DadosSGBDTabela

RegistroTuplaÍndiceChave

Chave candidataChave primária (PK)

Chave estrangeira (FK)

Page 4: Introdução ao MySQL

Vocabulário

Banco de Dados● Conjunto de registros dispostos em estrutura

regular que possibilita a reorganização dos mesmos e produção de informação

● Um banco de dados normalmente agrupa registros utilizáveis para um mesmo fim

Page 5: Introdução ao MySQL

Vocabulário

Sistema Gerenciador de Banco de Dados● Relacional● Orientado a Objetos

Exemplos:● MySQL, Postgres, Oracle, DB2, SQL Server

etc

Page 6: Introdução ao MySQL

Vocabulário

SQL● Structured Query Language

– Select

– Insert

– Update

– Delete

– Create table

Page 7: Introdução ao MySQL

Vocabulário

● Entidade● Atributo● Tabela● Coluna● Registro● Tupla● null

Page 8: Introdução ao MySQL

Vocabulário

● Chave● Chave candidata● Chave primária (PK)● Chave estrangeira (FK)● Índice

Page 9: Introdução ao MySQL

Vocabulário

● Visão● Função ou Stored Procedure● Gatilho● Permissões

Page 10: Introdução ao MySQL

Transação● Conjunto de operações executado de forma

atômica● Atomicidade● Consistência● Isolamento● Durabilidade● BEGIN TRANSACTION● COMMIT● ROLLBACK

Page 11: Introdução ao MySQL

Modelagem

Modelo Conceitual

Modelo Lógico

Modelo Físico

Page 12: Introdução ao MySQL

Relacionamentos

Uma pessoa possui um telefone

pessoa possui telefone

Page 13: Introdução ao MySQL

Cardinalidade

● Um para um– 1 – 1

● Um para N– 1 – N

● N para N– N - N

Page 14: Introdução ao MySQL

Normalização

Aumentar:✔ Facilidade de manipulação dos dados

Diminuir:✗ Redundância✗ Chance dos dados se tornarem inconsistentes

Consideramos normalizada uma tabela se ela aderir a 3a Forma Normal

Page 15: Introdução ao MySQL

Forma Normal “Zero”

● Os nomes das tabelas devem representar suas entidades

● Geralmente no plural

Page 16: Introdução ao MySQL

Primeira Forma Normal

● Todos os valores das colunas devem ser atômicos

Page 17: Introdução ao MySQL

Como obter a 1FN

● Devemos eliminar grupos repetidos pondo-os cada um em uma tabela separada, conectando-os com uma chave primária ou estrangeira

Page 18: Introdução ao MySQL

Exemplo fora da 1a FN

Clientecodigo nome telefone endereco1 Anderson 1234-5678 / 9876- R. Um, 10 – Mooca

5432 – São Paulo/SP2 Renata 2222-7788 R. Dois, 20 – Tatuapé –

São Paulo/SP3 Lili 7777-9999 / R. Três, 8 apto. 161 –

3333-1234 Leblon – Rio de Janeiro/RJ

Page 19: Introdução ao MySQL

Exemplo Primeira Forma Normal

Clienteid nome

1 Anderson2 Renata3 Lili

Telefoneid id_cliente numero

1 1 1234-56782 1 9876-54323 2 2222-77884 3 7777-99995 3 3333-1234

Page 20: Introdução ao MySQL

Exemplo Primeira Forma Normal

Enderecoid id_cliente endereco numero complementobairro cidade uf1 1 R. Um 10 Mooca São Paulo SP2 2 R. Dois 20 Tatuapé São Paulo SP3 3 R. Três 8Apto. 161 Leblon Rio de JaneiroRJ

Page 21: Introdução ao MySQL

Segunda Forma Normal

● Estar na primeira forma normal● Todos os atributos não chave devem ser

totalmente dependentes da chave primária (dependente de toda a chave e não apenas de parte dela)

Page 22: Introdução ao MySQL

Como obter a 2FN

● Identificar os atributos que não são funcionalmente dependentes de toda a chave primária

● Remover da entidade todos os atributos identificados e criar uma nova entidade com eles

Page 23: Introdução ao MySQL

Exemplo fora da 2a FN

Pedidonumero cod_produto produto quant vl_unit subtotal

1001 1 Enxugador de gelo 1 100 1001002 1 Enxugador de gelo 3 100 3001003 2 Desentortador de banana 2 150 300

Page 24: Introdução ao MySQL

Segunda Forma Normal

Pedidonumero cod_produto quant vl_unit subtotal

1001 1 1 100 1001002 1 3 100 3001003 2 2 150 300

Produtocodigo_produto nome preco

1 Enxugador de gelo 1002 Desentortador de banana 150

Page 25: Introdução ao MySQL

Terceira Forma Normal

● Estar na segunda forma normal● Nenhuma coluna não-chave depender de

outra coluna não-chave

Page 26: Introdução ao MySQL

Como obter a 3FN

● Identificar todos os atributos que são funcionalmente dependentes de outros atributos não chave

● Removê-los

Page 27: Introdução ao MySQL

Exemplo fora da 3a FN

Pedidonumero codigo_produto quant valor_unitario subtotal

1001 1 1 100 1001002 1 3 100 3001003 2 2 150 300

Page 28: Introdução ao MySQL

Terceira Forma Normal

Pedidonumero codigo_produto quant valor_unitario

1001 1 1 1001002 1 3 1001003 2 2 150

Page 29: Introdução ao MySQL

Outras Formas Normais

● Forma Normal de Boyce-Codd● Quarta Forma Normal● Quinta Forma Normal● Forma Normal Chave-Domínio

Page 30: Introdução ao MySQL

Instalando o MySQL

● No Linux:● apt-get install mysql-server

Page 31: Introdução ao MySQL

Instalando o MySQL

● No Windows:● 1. Baixe o arquivo noinstall para Windows. No

momento em que escrevo esse tutorial o mais recente é: mysql-noinstall-5.1.35-win32.zip

● 2. Descompacte esse arquivo para uma pasta c:\mysql

● 3. Abra um prompt de comando e vá até o diretório bin, digite: cd \mysql\bin

Page 32: Introdução ao MySQL

Instalando o MySQL

● 4. Inicie o MySQL. Ainda no prompt de comando digite: mysqld --console

● 5. Pronto, o MySQL já está funcionando. Você já pode se conectar a ele com a ferramenta gráfica MySQL Query Browser. Nome de usuário root e na senha deixar vazio.

Page 33: Introdução ao MySQL

DDL

Data Definition Language

CREATE | DROP DATABASECREATE | DROP | ALTER TABLECREATE | DROP | ALTER VIEW

CREATE | DROP INDEX

Page 34: Introdução ao MySQL

Tipos das Colunas

Tipo Tamanho decimais Unsigned zerofil unicode values

TINYINT x x x

SMALLINT x x x

MEDIUMINT x x x

INT x x x

INTEGER x x x

BIGINT x x x

REAL x x x x

DOUBLE x x x x

FLOAT x x x x

DECIMAL x x x x

NUMERIC x x x x

CHAR x x

VARCHAR x x

Page 35: Introdução ao MySQL

Tipos das Colunas

Tipo Tamanho decimais Unsigned zerofil unicode valuesDATETIMETIMESTAMPDATETIMETINYBLOBBLOBMEDIUMBLOBLONGBLOBTINYTEXTTEXTMEDIUMTEXTLONGTEXTENUM xSet x

Page 36: Introdução ao MySQL

Create table

CREATE TABLE nome_tabela ( Nome_campo tipo [UNSIGNED] [NOT NULL]

[DEFAULT valor],nome_campo...

PRIMARY KEY (campo1, ...), KEY idx_fk_campo (`nome_campo`),

CONSTRAINT fk_chave_estrangeira FOREIGN KEY (campo) REFERENCES tabela (campo)

[ON DELETE RESTRICT] [ON UPDATE CASCADE]

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

Page 37: Introdução ao MySQL

Create view

CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;

Page 38: Introdução ao MySQL

Create index

CREATE [UNIQUE] INDEX part_of_name ON customer (name(10)[DESC], last_name);

Page 39: Introdução ao MySQL

DML

Data Manipulation LanguageSELECTINSERTUPDATEDELETE

Page 40: Introdução ao MySQL

Select

SELECT [DISTINCT] select_expr [, select_expr ...]

[FROM table_references [WHERE where_condition]

[GROUP BY {col_name | expr | position} [ASC | DESC], ... [WITH ROLLUP]]

[HAVING where_condition] [ORDER BY {col_name | expr | position}

[ASC | DESC], ...] [LIMIT {[offset,] row_count | row_count

OFFSET offset}]

Page 41: Introdução ao MySQL

Obtendo dados combinados

Cliente Telefonecpf nome telefone_id cpf numero

1 Anderson 1 2 876543212 Renata 2 1 800000003 Lili 3 1 12345678

Page 42: Introdução ao MySQL

Left [outer] Join

SELECT c.cpf,nome, numero FROM Cliente c left join Telefone t on c.cpf=t.cpf

cpf nome numero

1 Anderson 80000000

1 Anderson 12345678

2 Renata 87654321

3 Lili NULL

Page 43: Introdução ao MySQL

Right [outer] Join

SELECT c.cpf,nome, numero FROM Cliente c Right join Telefone t on c.cpf=t.cpf

cpf nome numero

2 Renata 87654321

1 Anderson 80000000

1 Anderson 12345678

Page 44: Introdução ao MySQL

Natural Join

SELECT c.cpf,nome, numero FROM Cliente c Natural join Telefone t

cpf nome numero

2 Renata 87654321

1 Anderson 80000000

1 Anderson 12345678

Page 45: Introdução ao MySQL

Insert

INSERT [INTO] tbl_name [(col_name,...)] {VALUES | VALUE} ({expr | DEFAULT},...)

INSERT [INTO] tbl_name SET col_name={expr | DEFAULT}, ...

INSERT INTO tbl_name (col1,col2)

VALUES(15,col1*2);

Page 46: Introdução ao MySQL

Update

UPDATE table SET col_name1={expr1|DEFAULT} [,

col_name2={expr2|DEFAULT}] ... [WHERE where_condition]

UPDATE persondata SET age=age+1;

Page 47: Introdução ao MySQL

Delete

DELETE FROM table WHERE condição [ORDER BY campo] [LIMIT n];

Page 48: Introdução ao MySQL

Obrigado!

Anderson Carlos D. [email protected]