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 Dados
       SGBD
       Tabela
      Registro
       Tupla
       Índice
       Chave
  Chave candidata
 Chave 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
a
             Exemplo fora da 1 FN

Cliente
codigo nome     telefone            endereco
1      Anderson 1234-5678 / 9876-   R. Um, 10 – Mooca
                5432                – São Paulo/SP
2      Renata   2222-7788           R. Dois, 20 – Tatuapé –
                                    São Paulo/SP
3     Lili       7777-9999 /        R. Três, 8 apto. 161 –
                 3333-1234           Leblon – Rio de Janeiro/RJ
Exemplo Primeira Forma Normal

Cliente
id       nome
     1   Anderson
     2   Renata
     3   Lili

Telefone
id       id_cliente   numero
     1        1       1234-5678
     2        1       9876-5432
     3        2       2222-7788
     4        3       7777-9999
     5        3       3333-1234
Exemplo Primeira Forma Normal

Endereco
id id_cliente endereco numero complemento bairro cidade        uf
 1     1      R. Um        10             Mooca São Paulo      SP
 2     2      R. Dois      20             Tatuapé São Paulo    SP
 3     3      R. Três       8 Apto. 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
a
           Exemplo fora da 2 FN

Pedido
numero cod_produto produto               quant vl_unit   subtotal
 1001       1      Enxugador de gelo       1         100      100
 1002       1      Enxugador de gelo       3         100      300
 1003       2      Desentortador de banana 2         150      300
Segunda Forma Normal

Pedido
numero         cod_produto            quant vl_unit subtotal
    1001                 1              1       100      100
    1002                 1              3       100      300
    1003                 2              2       150      300

Produto
codigo_produto nome                    preco
       1       Enxugador de gelo          100
       2       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
a
          Exemplo fora da 3 FN

Pedido
numero codigo_produto quant valor_unitario subtotal
 1001         1         1              100      100
 1002         1         3              100      300
 1003         2         2              150      300
Terceira Forma Normal

Pedido
numero codigo_produto quant valor_unitario
 1001         1         1              100
 1002         1         3              100
 1003         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 mysqlbin
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 DATABASE
CREATE | DROP | ALTER TABLE
CREATE | 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 values
DATE
TIME
TIMESTAMP
DATETIME
TINYBLOB
BLOB
MEDIUMBLOB
LONGBLOB
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT
ENUM                                                       x
Set                                                        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 Language
         SELECT
         INSERT
        UPDATE
         DELETE
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           Telefone
cpf    nome       telefone_id cpf     numero
   1   Anderson         1         2    87654321
   2   Renata           2         1    80000000
   3   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];
Obrigado!




Anderson Carlos D. Sanches
   www.software.pro.br
   andycds@gmail.com

Introdução ao MySQL

  • 1.
    Introdução ao MySQL ConselhoRegional de Estatística da 3a Região Anderson Carlos D. Sanches www.software.pro.br
  • 2.
    Agenda ● 1. Definiçõesde 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.
  • 3.
    Vocabulário Bancode Dados SGBD Tabela Registro Tupla Índice Chave Chave candidata Chave primária (PK) Chave estrangeira (FK)
  • 4.
    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
  • 5.
    Vocabulário Sistema Gerenciador deBanco de Dados ● Relacional ● Orientado a Objetos Exemplos: ● MySQL, Postgres, Oracle, DB2, SQL Server etc
  • 6.
    Vocabulário SQL ● Structured Query Language – Select – Insert – Update – Delete – Create table
  • 7.
    Vocabulário ● Entidade ● Atributo ● Tabela ● Coluna ● Registro ● Tupla ● null
  • 8.
    Vocabulário ● Chave ● Chave candidata ● Chave primária (PK) ● Chave estrangeira (FK) ● Índice
  • 9.
    Vocabulário ● Visão ● Função ou Stored Procedure ● Gatilho ● Permissões
  • 10.
    Transação ● Conjunto de operações executado de forma atômica ● Atomicidade ● Consistência ● Isolamento ● Durabilidade ● BEGIN TRANSACTION ● COMMIT ● ROLLBACK
  • 11.
    Modelagem Modelo Conceitual ModeloLógico Modelo Físico
  • 12.
    Relacionamentos Uma pessoa possui um telefone pessoa possui telefone
  • 13.
    Cardinalidade ● Um para um – 1–1 ● Um para N – 1–N ● N para N – N-N
  • 14.
    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
  • 15.
    Forma Normal “Zero” ● Os nomes das tabelas devem representar suas entidades ● Geralmente no plural
  • 16.
    Primeira Forma Normal ● Todos os valores das colunas devem ser atômicos
  • 17.
    Como obter a1FN ● Devemos eliminar grupos repetidos pondo-os cada um em uma tabela separada, conectando-os com uma chave primária ou estrangeira
  • 18.
    a Exemplo fora da 1 FN Cliente codigo nome telefone endereco 1 Anderson 1234-5678 / 9876- R. Um, 10 – Mooca 5432 – São Paulo/SP 2 Renata 2222-7788 R. Dois, 20 – Tatuapé – São Paulo/SP 3 Lili 7777-9999 / R. Três, 8 apto. 161 – 3333-1234 Leblon – Rio de Janeiro/RJ
  • 19.
    Exemplo Primeira FormaNormal Cliente id nome 1 Anderson 2 Renata 3 Lili Telefone id id_cliente numero 1 1 1234-5678 2 1 9876-5432 3 2 2222-7788 4 3 7777-9999 5 3 3333-1234
  • 20.
    Exemplo Primeira FormaNormal Endereco id id_cliente endereco numero complemento bairro cidade uf 1 1 R. Um 10 Mooca São Paulo SP 2 2 R. Dois 20 Tatuapé São Paulo SP 3 3 R. Três 8 Apto. 161 Leblon Rio de JaneiroRJ
  • 21.
    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)
  • 22.
    Como obter a2FN ● 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
  • 23.
    a Exemplo fora da 2 FN Pedido numero cod_produto produto quant vl_unit subtotal 1001 1 Enxugador de gelo 1 100 100 1002 1 Enxugador de gelo 3 100 300 1003 2 Desentortador de banana 2 150 300
  • 24.
    Segunda Forma Normal Pedido numero cod_produto quant vl_unit subtotal 1001 1 1 100 100 1002 1 3 100 300 1003 2 2 150 300 Produto codigo_produto nome preco 1 Enxugador de gelo 100 2 Desentortador de banana 150
  • 25.
    Terceira Forma Normal ● Estar na segunda forma normal ● Nenhuma coluna não-chave depender de outra coluna não-chave
  • 26.
    Como obter a3FN ● Identificar todos os atributos que são funcionalmente dependentes de outros atributos não chave ● Removê-los
  • 27.
    a Exemplo fora da 3 FN Pedido numero codigo_produto quant valor_unitario subtotal 1001 1 1 100 100 1002 1 3 100 300 1003 2 2 150 300
  • 28.
    Terceira Forma Normal Pedido numerocodigo_produto quant valor_unitario 1001 1 1 100 1002 1 3 100 1003 2 2 150
  • 29.
    Outras Formas Normais ● Forma Normal de Boyce-Codd ● Quarta Forma Normal ● Quinta Forma Normal ● Forma Normal Chave-Domínio
  • 30.
    Instalando o MySQL ● No Linux: ● apt-get install mysql-server
  • 31.
    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 mysqlbin
  • 32.
    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.
  • 33.
    DDL Data Definition Language CREATE | DROP DATABASE CREATE | DROP | ALTER TABLE CREATE | DROP | ALTER VIEW CREATE | DROP INDEX
  • 34.
    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
  • 35.
    Tipos das Colunas Tipo Tamanho decimais Unsigned zerofil unicode values DATE TIME TIMESTAMP DATETIME TINYBLOB BLOB MEDIUMBLOB LONGBLOB TINYTEXT TEXT MEDIUMTEXT LONGTEXT ENUM x Set x
  • 36.
    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;
  • 37.
    Create view CREATE VIEWv AS SELECT qty, price, qty*price AS value FROM t;
  • 38.
    Create index CREATE [UNIQUE]INDEX part_of_name ON customer (name(10)[DESC], last_name);
  • 39.
    DML Data Manipulation Language SELECT INSERT UPDATE DELETE
  • 40.
    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}]
  • 41.
    Obtendo dados combinados Cliente Telefone cpf nome telefone_id cpf numero 1 Anderson 1 2 87654321 2 Renata 2 1 80000000 3 Lili 3 1 12345678
  • 42.
    Left [outer] Join SELECTc.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
  • 43.
    Right [outer] Join SELECTc.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
  • 44.
    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
  • 45.
    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);
  • 46.
    Update UPDATE table SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... [WHERE where_condition] UPDATE persondata SET age=age+1;
  • 47.
    Delete DELETE FROM tableWHERE condição [ORDER BY campo] [LIMIT n];
  • 48.
    Obrigado! Anderson Carlos D.Sanches www.software.pro.br andycds@gmail.com