Introdução ao MySQL
-
Upload
anderson-sanches -
Category
Technology
-
view
7.458 -
download
3
Transcript of 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
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.
Vocabulário
Banco de DadosSGBDTabela
RegistroTuplaÍndiceChave
Chave candidataChave primária (PK)
Chave estrangeira (FK)
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
Vocabulário
Sistema Gerenciador de Banco de Dados● Relacional● Orientado a Objetos
Exemplos:● MySQL, Postgres, Oracle, DB2, SQL Server
etc
Vocabulário
SQL● Structured Query Language
– Select
– Insert
– Update
– Delete
– Create table
Vocabulário
● Entidade● Atributo● Tabela● Coluna● Registro● Tupla● null
Vocabulário
● Chave● Chave candidata● Chave primária (PK)● Chave estrangeira (FK)● Índice
Vocabulário
● Visão● Função ou Stored Procedure● Gatilho● Permissões
Transação● Conjunto de operações executado de forma
atômica● Atomicidade● Consistência● Isolamento● Durabilidade● BEGIN TRANSACTION● COMMIT● ROLLBACK
Modelagem
Modelo Conceitual
Modelo Lógico
Modelo Físico
Relacionamentos
Uma pessoa possui um telefone
pessoa possui telefone
Cardinalidade
● Um para um– 1 – 1
● Um para N– 1 – N
● N para N– N - N
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
Forma Normal “Zero”
● Os nomes das tabelas devem representar suas entidades
● Geralmente no plural
Primeira Forma Normal
● Todos os valores das colunas devem ser atômicos
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
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
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
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
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)
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
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
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
Terceira Forma Normal
● Estar na segunda forma normal● Nenhuma coluna não-chave depender de
outra coluna não-chave
Como obter a 3FN
● Identificar todos os atributos que são funcionalmente dependentes de outros atributos não chave
● Removê-los
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
Terceira Forma Normal
Pedidonumero codigo_produto quant valor_unitario
1001 1 1 1001002 1 3 1001003 2 2 150
Outras Formas Normais
● Forma Normal de Boyce-Codd● Quarta Forma Normal● Quinta Forma Normal● Forma Normal Chave-Domínio
Instalando o MySQL
● No Linux:● apt-get install mysql-server
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
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.
DDL
Data Definition Language
CREATE | DROP DATABASECREATE | DROP | ALTER TABLECREATE | DROP | ALTER VIEW
CREATE | DROP INDEX
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
Tipos das Colunas
Tipo Tamanho decimais Unsigned zerofil unicode valuesDATETIMETIMESTAMPDATETIMETINYBLOBBLOBMEDIUMBLOBLONGBLOBTINYTEXTTEXTMEDIUMTEXTLONGTEXTENUM xSet x
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;
Create view
CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;
Create index
CREATE [UNIQUE] INDEX part_of_name ON customer (name(10)[DESC], last_name);
DML
Data Manipulation LanguageSELECTINSERTUPDATEDELETE
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}]
Obtendo dados combinados
Cliente Telefonecpf nome telefone_id cpf numero
1 Anderson 1 2 876543212 Renata 2 1 800000003 Lili 3 1 12345678
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
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
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
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);
Update
UPDATE table SET col_name1={expr1|DEFAULT} [,
col_name2={expr2|DEFAULT}] ... [WHERE where_condition]
UPDATE persondata SET age=age+1;
Delete
DELETE FROM table WHERE condição [ORDER BY campo] [LIMIT n];