SlideShare ist ein Scribd-Unternehmen logo
1 von 104
Downloaden Sie, um offline zu lesen
Redes de
                 Comunicação
 Curso Profissional de Técnico de Gestão e
  Programação de Sistemas Informáticos
                              Ano lectivo 2009-2010 :: 11ºH




Escola Secundária de Adolfo Portela
Módulo VII (opção 1)
                   acesso a bases de dado remotas via web




Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
1. introdução...
a) materiais de suporte
            Livros de referência:

                “Beginning MySQL”; Robert Sheldon, Geoff Moes;
                Editora: Wrox; ISBN: 0764579509;

                “SQL - Structured Query Language - 6ª Edição
                Actualizada e Aumentada”; Luís Manuel Dias
                Damas; Editora: FCA; ISBN: 972-722-443-1;



            Webliografia de referência:

                http://www.hscripts.com/tutorials/mysql/index.php

                http://www.estig.ipbeja.pt/~eidbd/sql.htm

                http://www.w3schools.com/sql/default.asp




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
1. introdução...
b) introdução | SQL?!
            SQL (do inglês Structured Query Language, ou Linguagem de Consulta
            Estruturada), é uma linguagem de pesquisa, declarativa, para Bases de Dados
            Relacionais;

            Vamos aprender SQL para aceder e manipular dados no SGBDs MySQL, mas
            esta linguagem é comum a outros SGBDs: SQL Server, Access, Oracle, DB2
            entre outros...

            O SQL foi desenvolvido originalmente no início dos anos 70 nos laboratórios da
            IBM;



            O SGBD que vamos utilizar nas aulas será o MySQL




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
1. introdução...
b) introdução | a consola
              A consola (linha de comandos) do MySQL está localizada em mysqlbin e tem o
              nome mysql.exe. Para ser iniciado como administrador, mysql -u root

              Vai ser na consola que iremos executar todas as operações de SQL;

Nota: O comando será apenas executado quando a linha terminar com ; caso contrário,
sempre que for premida a tecla ENTER é efectuada apenas uma quebra de linha (-->)




   Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
1. introdução...
c) primeiros passos | show databases
            Para termos acesso a uma lista de bases de dados existentes no servidor

                show databases;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
1. introdução...
c) primeiros passos | create database
            Para criar uma nova base de dados

                create database NomeDaNovaBaseDados;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
1. introdução...
c) primeiros passos | use e show
            Para utilizar uma base de dados da lista

                use NomeDaBaseDados;

            Para listar as tabelas da base de dados em uso

                show tables;



            Nota: no exemplo o resultado mostrado é
            “Empty set” na medida em que ainda não foram
            criadas quaisquer tabelas na dita base de
            dados...




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
1. introdução...
c) primeiros passos | describe
            Após criarmos uma tabela podemos visualizar a sua estrutura utilizando o
            comando DESCRIBE ou simplesmente DESC seguido do nome da tabela,
            ou o comando SHOW FIELDS FROM nomeTabela ;

                DESC nomeTabela ; (show create table nomeTabela -> mais detalhe!)

                SHOW FIELDS FROM nomeTabela ;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
1. introdução...
d) tipos de dados aceites no SQL
            Tipo             Abreviação                                    Descrição
          INTEIRO                INT ou     Números inteiros. Existem outros tipos de números inteiros de acordo com o
                               INTEGER                                    sgbd utilizado.


            REAL             DOUBLE ou     Números reais. Permitem armazenar todo tipo de número não inteiro. Existem
                               REAL             outros tipos de números reais de acordo com o sgbd utilizado.


                                              Caracter. Permite a inclusão de dados alfanuméricos com tamanho pré-
        CARACTER               CHAR (x)       definido. O número de caracteres é definido entre os parênteses. Ocupa
                                                           sempre o número indicado (com espaços...)


        CARACTER                           Caracter. Permite a inclusão de dados alfanuméricos. O número de caracteres
        VARIÁVEL            VARCHAR (x)      é definido entre os parênteses, porém o número de bytes utilizados pelo
                                                             campo é apenas o especificado (número).


            DATA                  DATE         Data. Existem diversos tipos de datas de acordo com o sgbd utilizado.


       BOOLEANO               BOOLEAN            Armazena um bit de informação, utilizado para verdadeiro ou falso.




 Escola Secundária de Adolfo Portela      Marco Pinheiro | profmarco550@gmail.com
1. introdução...
d) tipos de dados aceites no MySQL
            Para valores numérios inteiros temos:




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
1. introdução...
d) tipos de dados aceites no MySQL
            Para valores numérios reais temos:




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
1. introdução...
d) tipos de dados aceites no MySQL
            Para valores do tipo caracter (string) temos:




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
1. introdução...
d) tipos de dados aceites no MySQL
            Para valores tipo data temos:




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
DDL - Linguagem de Definição de Dados
DML - Linguagem de Manipulação de Dados




Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
2. DDL - Linguagem de Definição de Dados
a) definição
            Linguagem de definição de dados (ou DDL, de Data Definition Language) é
            um conjunto de comandos dentro do SQL usada para a definição das
            estruturas de dados, fornecendo as instruções que permitem a criação,
            modificação e remoção das tabelas, assim como criação de índices (ou
            chaves).

            Estas instruções SQL permitem definir a estrutura de uma base de dados,
            incluindo colunas (campos), tabelas, índices (chaves), etc.

            Entre os principais comandos DDL estão CREATE (criar), ALTER (alterar)
            e DROP (apagar).




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
2. DDL - Linguagem de Definição de Dados
a) cad - create, alter, drop
            CREATE
            Uma declaração CREATE permite a criação de uma nova base de dados, tabela, índice, ou
            consulta armazenada. Entre os principais comandos incluidos estão CREATE DATABASE (criar
            base de dados) e CREATE TABLE (criar tabela);


            ALTER
            Uma declaração ALTER permite alterar um objeto de um base de dados.
            Entre os principais comandos estão ALTER TABLE ADD (adicionar uma coluna na tabela),
            ALTER TABLE DROP (excluir uma coluna na tabela), entre outros...


            DROP
            Uma declaração DROP permite remover (destruir) uma base de dados existente, tabela ou
            índice.
            Entre os principais comandos incluídos estão o DROP DATABASE (eliminar uma base de
            dados inteira), DROP TABLE (excluir tabela) entre outros...




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
2. DDL - Linguagem de Definição de Dados
a) cad - create, alter, drop




                                        create table




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
2. DDL - Linguagem de Definição de Dados
b1) CREATE TABLE
            CREATE TABLE é o comando para a criação de tabelas e deve ser seguido pelo nome que
            queremos dar à tabela;

            Dentro do comando, devemos definir os nomes dos campos de acordo com a conveniência
            da base de dados, e determinar o tipo de dados que poderão ser incluídos nesse campo.



 CREATE TABLE nomeTabela                       CREATE TABLE student
 (                                             (
     fieldName1 dataType(size) ,               studID INT ,
     fieldName2 dataType(size)                 name VARCHAR(30) ,
          ...                                  address VARCHAR(40)
 ) [ ENGINE = engineUtilizada ] ;              ) ENGINE = InnoDB ;



            Tipos de "engine" da base de dados no SGBD MySQL:

            ENGINE = {BDB | MEMORY | ISAM | INNODB | MERGE | MYISAM}



 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
2. DDL - Linguagem de Definição de Dados
b1) CREATE TABLE | auto-increment
            Se desejamos que o valor de um campo seja de auto-incremento (numeração automática
            sequêncial) devemos inserir AUTO_INCREMENT na frente do campo pretendido;

            Isto pode ser utilizado por exemplo, para automatizar um nº que sirva de chave primária na
            tabela

                   CREATE TABLE student
                   (
                   studID INT PRIMARY KEY AUTO_INCREMENT ,
                   name VARCHAR(30) ,
                   address VARCHAR(40)
                   ) ENGINE = InnoDB ;


            Nota: cada tabela pode ter apenas UM CAMPO com AUTO_INCREMENT e o mesmo terá de
            ser obrigatoriamente definido como chave primária ( PRIMARY KEY )!




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
2. DDL - Linguagem de Definição de Dados
b1) CREATE TABLE | default
            Valor predefinido para um campo da tabela



                   CREATE TABLE student
                   (
                   studID INT,
                   name VARCHAR(30) ,
                   address VARCHAR(40) DEFAULT ‘ Aveiro ‘
                   ) ENGINE = InnoDB ;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
2. DDL - Linguagem de Definição de Dados
b2) CREATE TABLE | constraints




                                           constraints




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
2. DDL - Linguagem de Definição de Dados
b2) create | constraints
            Há diversas regras de “constraint” que podem ser aplicadas aos campos que formam uma
            tabela.

            A sua definição pode ser feita de duas formas: inline ou com a palavra constraint (com a
            excepção do NOT NULL que pode apenas ser definida inline)

            Eis as mais importantes:


                     NOT NULL (definido apenas inline)

                     UNIQUE

                     PRIMARY KEY

                     FOREIGN KEY

                     CHECK




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
2. DDL - Linguagem de Definição de Dados
b2) create | constraints: not null (nn)
            O constrangimento NOT NULL força um campo a não aceitar valores NULL (vazios), ou seja,
            obriga a que este seja sempre preenchido (tal como explicado anteriormente).

            Eis um pequeno exemplo onde o constrangimento é definido inline:

                   CREATE TABLE student
                   (
                   studID INT NOT NULL ,
                   name VARCHAR(30) ,
                   address VARCHAR(40)
                   ) ENGINE = InnoDB ;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
2. DDL - Linguagem de Definição de Dados
b2) create | constraints: unique (un)
            O constrangimento UNIQUE identifica de forma única cada registo da tabela da base de
            dados (não permite que o valor se repita).

            Tem o mesmo efeito prático da PRIMARY KEY.                           inline:

             CREATE TABLE student                                                CREATE TABLE student
             (                                                                   (
             studID INT ,                                                        studID INT UNIQUE ,
             name VARCHAR(30) ,                                                  name VARCHAR(30) ,
             address VARCHAR(40) ,                                               address VARCHAR(40)
             CONSTRAINT un_nomeConstricao UNIQUE ( studID )                      ) ENGINE = InnoDB ;
             ) ENGINE = InnoDB ;


            Obs 1) O constrangimento PRIMARY KEY implementa automaticamente este UNIQUE;

            Obs 2) Podemos ter vários campos com o constrangimento UNIQUE.

            Nota: un_nomeConstricao é o nome do constraint. Tipicamente tem um prefixo (nn, un, pk,
            fk,ck), seguido de underscore e o nome "simbólico" para a regra de constrangimento.

            Nota2: O MySQL é case sensitive (sensível às maiúsculas) no nome do constraint!
            nn_nomeConstricao e un_nomeconstricao seriam duas regras de constrangimento diferentes!

 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
2. DDL - Linguagem de Definição de Dados
b2) create | constraints: primary key (pk)
            O constrangimento PRIMARY KEY define a chave primária da tabela.

            O valor introduzido não pode ser nem repetido nem nulo (implementa automaticamente os
            constrangimentos UNIQUE e NOT NULL).
                                                                          inline:

             CREATE TABLE student                                                CREATE TABLE student
             (                                                                   (
             studID INT AUTO_INCREMENT,                                          studID INT PRIMARY KEY ,
             name VARCHAR(30) ,                                                  name VARCHAR(30) ,
             address VARCHAR(40) ,                                               address VARCHAR(40)
             CONSTRAINT pk_nomeConstricao PRIMARY KEY ( studID )                 ) ENGINE = InnoDB ;
             ) ENGINE = InnoDB ;


            O constrangimento PRIMARY KEY implementa automaticamente o UNIQUE.

            Lembra-te: podemos ter vários campos com o constrangimento UNIQUE mas apenas UMA
            PRIMARY KEY por tabela.




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
2. DDL - Linguagem de Definição de Dados
b2) create | constraints: primary key (pk)
                         CREATE TABLE student
                         (
                         studID INT UNSIGNED AUTO_INCREMENT ,
                         name VARCHAR(30) ,
                         address VARCHAR(40) ,

                         CONSTRAINT pk_nomeConstricao PRIMARY KEY ( studID )

                         );




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
2. DDL - Linguagem de Definição de Dados
b2) create | constraints: foreign key (fk)
            A chave estrangeira (foreign key) é uma cláusula que deve ser incluída quando possuímos
            duas tabelas relacionadas numa base de dados.

            Através da chave estrangeira estabelecemos as relações entre duas ou mais tabelas.

            A chave estrangeira desta forma referencía o campo que é chave primária na tabeça
            relacionada.



            CREATE TABLE student
            (
            studID INT PRIMARY KEY ,
            name VARCHAR(30) ,
            address VARCHAR(40) ,

            FOREIGN KEY ( campoChaveEstrangeira ) REFERENCES Nome_outraTabela ( Nome_da_Chave )

            ) ENGINE = InnoDB ;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
2. DDL - Linguagem de Definição de Dados
b2) create | constraints: foreign key (fk)
            Implementando a chave estrangeira através do método de CONSTRAINT:



            CREATE TABLE student
            (
            studID INT PRIMARY KEY ,
            name VARCHAR(30) ,
            address VARCHAR(40) ,
            class INT ,

            CONSTRAINT fk_nomeConstricao FOREIGN KEY ( CampoChaveEstrangeira )
            REFERENCES Nome_outraTabela( Nome_da_Chave )

            ) ENGINE = InnoDB ;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
2. DDL - Linguagem de Definição de Dados
b2) create | constraints: check (ck)
            Validação dos valores introduzidos ( “regra de validação” )

            Deve ser incluida em campos que estejam DEPOIS da chave primária.



            Eis um exemplo para uma regra aplicada ao campo class que só aceita turmas com número
            compreendido entre 1 e 10:
                                                              inline:

            CREATE TABLE student                                                 CREATE TABLE student
            (                                                                    (
            studID INT PRIMARY KEY ,                                             studID INT PRIMARY KEY ,
            name VARCHAR(30) ,                                                   name VARCHAR(30) ,
            address VARCHAR(40) ,                                                address VARCHAR(40) ,
            class INT ,                                                          class INT ,

            CONSTRAINT ck_nomeConstricao CHECK                                   CHECK ( class BETWEEN 0 AND 10 )
            ( class BETWEEN 0 AND 10 )
                                                                                 ) ENGINE = InnoDB ;
            ) ENGINE = InnoDB ;



 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
2. DDL - Linguagem de Definição de Dados
c) cad - create, alter, drop




                                            alter table




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
2. DDL - Linguagem de Definição de Dados
c) ALTER TABLE
            Após criarmos uma tabela podemos alterar sua estrutura com o uso da cláusula ALTER
            TABLE. Lembra-te que esta alteração é sempre sobre a estrutura da tabela, e não sobre os
            dados.

            Esta alteração à tabela pode ser efectuada de duas formas:

                     ou acrescentando um novo campo (utilizando ADD)

                     ou alterando-se as propriedades de um campo já existente (utilizando-se CHANGE ou
                     MODIFY).

            O comando ALTER TABLE tem a seguinte sintaxe (a excepção é para mudar nome a uma
            tabela >> ALTER TABLE nomeActual RENAME novoNome):

             ALTER TABLE Nome_Tabela
             [ADD Nome_Campo Nova_Regra | nova_regra
             MODIFY Nome_Campo NovoTipo ou Nova_Regra
             CHANGE Nome_Campo_actual novo_Nome_Campo NovoTipo [e Nova_Regra]
             DROP Nome_Campo | RegraConstraint
             ];



 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
2. DDL - Linguagem de Definição de Dados
c1) ALTER TABLE | ADD
            Podemos utilizar a cláusula ADD para adicionar um novo campo à tabela.

            Para isso, além do nome, devemos definir também o seu tipo da mesma forma como fazemos
            ao criar o campo numa nova tabela:

             ALTER TABLE Nome_Tabela
             ADD nomeCampo TipoDados ;

             ALTER TABLE Cliente
             ADD Nome_Mae VARCHAR ( 60 ) ;


            Caso desejemos que um campo seja inserido numa ordem específica ( INÍCIO ou DEPOIS de
            um determinado campo ), utilizamos a seguinte sintaxe:

             ALTER TABLE Cliente
             ADD Nome_Mae VARCHAR ( 60 ) FIRST;

             ALTER TABLE Cliente
             ADD Nome_Mae VARCHAR ( 60 ) AFTER nomeCampo;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
2. DDL - Linguagem de Definição de Dados
c1) ALTER TABLE | ADD
            Com o ADD podemos adicionar também regras a um dado campo.

            Na nossa tabela, se quisermos que o campo nome seja chave primária, podemos fazer:

             ALTER TABLE Cliente
             ADD PRIMARY KEY ( Nome ) ;

            Se quisermos que o campo dataNascimento tenha valores entre 1980-12-31 e 2009-12-31,
            podemos fazer:

             ALTER TABLE Cliente
             ADD CHECK ( nome LIKE ‘ a% ‘ ) ;

             ou através da forma de declaração da regra de constrangimento via constraint:

             ALTER TABLE Cliente
             ADD CONSTRAINT ck_nomeConstricao CHECK ( class BETWEEN 0 AND 10 )

            Podiamos inclusivamente adicionar uma chave estrangeira (foreign key):

             ALTER TABLE Cliente
             ADD FOREIGN KEY ( campoChaveEstrangeira )
             REFERENCES Nome_outraTabela ( Nome_da_Chave )

 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
2. DDL - Linguagem de Definição de Dados
c2) ALTER TABLE | MODIFY
            Altera as especificações de um campo da tabela (tipo de dados, regras, etc) mas o
            nome mantém-se.

             Sintaxe:

             ALTER TABLE nomeDaTabela MODIFY campo novoTipoDados NovaRegra;


             Ex.

             ALTER TABLE student
             MODIFY stud_name VARCHAR ( 50 ) ;


             ou mais complexo...


             ALTER TABLE student
             MODIFY stud_name VARCHAR ( 60 )
             NOT NULL DEFAULT ‘ helder ’;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
2. DDL - Linguagem de Definição de Dados
c3) ALTER TABLE | CHANGE
            Altera o nome de um campo (coluna) e do respectivo tipo de dados (type) e as suas regras

            Nota: quando se muda o nome a uma coluna com o CHANGE, somos obrigados a
            especificar novamente o seu tipo de dados mesmo que este se mantenha (terá de ser
            repetido).

             Sintaxe:

             ALTER TABLE nomeDaTabela
             CHANGE nomeDoCampoActual
             novoNome novoTipoDados
             [ novas regras ] ;


             Ex.

             ALTER TABLE student
             CHANGE name
             numTelefone INT
             NOT NULL UNIQUE ;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
2. DDL - Linguagem de Definição de Dados
c4) ALTER TABLE | DROP
            Se desejarmos ELIMINAR algo da estrutura da nossa tabela, utilizamos a seguinte sintaxe:

             ALTER TABLE Nome_Tabela
             [DROP COLUMN nome_campo];
             [DROP FOREIGN KEY fk_simbolo];
             [DROP PRIMARY KEY];

             Exemplos:

             ALTER TABLE student DROP COLUMN stud_name ;

             ou

             ALTER TABLE student DROP FOREIGN KEY fk_simbolo ;

             ou

             ALTER TABLE student DROP PRIMARY KEY ;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
2. DDL - Linguagem de Definição de Dados
d) cad - create, alter, drop




                                          DROP TABLE




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
2. DDL - Linguagem de Definição de Dados
d) DROP TABLE
            Se desejarmos ELIMINAR uma tabela intera da base de dados:

             DROP TABLE nomeTabela;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
Informação avulsa... :)
mysqldump e show create
            Se desejarmos EXPORTAR toda a estrutura e o conteúdo de uma base de dados no
            MySQL, devemos proceder da seguinte forma (convém criar um atalho para simplificar o
            processo...)

             mysqldump -u root nomeBaseDados > nomeFicheiro.sql

            Caso tenham necessidade de ver a estrutura de uma tabela em detalhe, podem
            utilizar:

            show create table nomeTabela




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
DDL - Linguagem de Definição de Dados
DML - Linguagem de Manipulação de Dados




Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
a) definição
            Mostrar os campos (colunas) de uma tabela:

            Os principais comandos DML são:

                     INSERT ( Inserção de Dados )

                     SELECT ( Seleção de Dados )

                     UPDATE ( Actualização de Dados )

                     DELETE ( Eliminação de Dados )




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados




                         inserção de dados | INSERT




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
c) inserção de dados | INSERT
            Vamos agora perceber como podemos introduzir novos registos numa tabela da nossa base
            de dados. Caso se pretenda preencher todos os campos pela ordem definida na própria
            estrutura da tabela, utilizamos a seguinte sintaxe:

             INSERT INTO nomeTabela
             VALUES ( valor_campo1 , ‘ valor_campo2 ‘ , ... ) ;

            Caso haja necessidade de preencher apenas alguns campos, há a necessidade de
            especificar quais são os campos e os respectivos valores. Já os campos omitidos ficam
            com valor NULL.

             INSERT INTO nomeTabela (campo1 , campo2 , ... )
             VALUES ( valorNumerico1 , ' valorString1 ' , ... ) ;

             ou então assim:

             INSERT INTO nomeTabela
             SET campo1 = valorNumerico1, campo2 = ‘ valorString1 ‘ , ... = ... ;

            NOTA: strings e datas deverão ser delimitadas por aspas. Valores numéricos não
            necessitam.


 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
c) inserção de dados | INSERT | Exemp.
 INSERT INTO Books
 VALUES (12786, "Letters to a Young Poet", 1934),
 (13331, "Winesburg, Ohio", 1919),
 (14356, "Hell"s Angels", 1966),
 (15729, "Black Elk Speaks", 1932),
 (16284, "Noncomformity", 1996),
 (17695, "A Confederacy of Dunces", 1980),
 (19264, "Postcards", 1992),
 (19354, "The Shipping News", 1993);


 INSERT INTO AuthorBook
 VALUES (1006, 14356), (1008, 15729), (1009,
 12786), (1010, 17695),
 (1011, 15729), (1012, 19264), (1012, 19354), (1014,
 16284);


 INSERT INTO Authors
 VALUES (1006, "Hunter", "S.", "Thompson"),
 (1007, "Joyce", "Carol", "Oates"),
 (1008, "Black", NULL, "Elk"),
 (1009, "Rainer", "Maria", "Rilke"),
 (1010, "John", "Kennedy", "Toole"),
 (1011, "John", "G.", "Neihardt"),
 (1012, "Annie", NULL, "Proulx"),
 (1013, "Alan", NULL, "Watts"),
 (1014, "Nelson", NULL, "Algren");




 Escola Secundária de Adolfo Portela           Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados




                        consulta de dados | SELECT




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
d1) consulta de dados | SELECT
            Depois de haver registos inseridos nas tabelas, temos de ser capazes de efectuar consultas
            sobre eles. A sintaxe é a seguinte:

             SELECT campo1, campo2, ... FROM nomedaTabela ;

            Também aqui podemos utilizar o símbolo * para seleccionar TODOS os campos da tabela:

             SELECT * FROM nomedaTabela ;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
d3) consulta de dados | SELECT ORDER BY
        Se houver a necessidade de ordenar os registos do resultado de uma consulta, tal pode ser
        feito bastando para isso especificar quais os campos envolvidos, e qual a ordem a aplicar
        em cada um deles - ascendente (ASC) ou descendente (DESC):

          SELECT * FROM nomedaTabela ORDER BY nomeCampo [ ASC | DESC ] ;

          Exemplos:
          SELECT * FROM cds ORDER BY titel ASC ;                    SELECT * FROM cds ORDER BY id DESC ;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
d3) consulta de dados | SELECT AS (alias)
        Podemos ainda “mascarar” o nome verdadeiro de um campo da tabela utilizando a função
        AS utilizando a seguinte sintaxe:

          SELECT nomedoCampo1 AS novoNome, nomedoCampo2 AS novoNome2, ...
          FROM nomedaTabela ;

          Exemplo:
          SELECT titel AS titulo, interpret AS artista, jahr AS dataPublic FROM cds;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
d4) consulta de dados | critérios WHERE
        Por vezes há a necessidade de introduzir cláusulas ou critérios na consulta. Utilizamos para
        isso o WHERE:

          SELECT * FROM nomedaTabela WHERE condição

          Exemplo:
          SELECT * FROM cds WHERE jahr = 2001 ;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
d4) consulta de dados | critérios WHERE
        Aqui temos um exemplo mais complexo (tem uma condição maior) mas que obedece às
        mesmas regras de construção da anterior:

          SELECT CDName, Category, InStock+OnOrder-Reserved AS Available
          FROM CDs
          WHERE ( Category = " Blues " OR Category = " Jazz " )
          AND ( InStock+OnOrder-Reserved ) > 20 ;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
d4) consulta de dados | WHERE ... LIKE
        Quando os valores que utilizamos como critério não são exactos e sabemos apenas alguns
        detalhes deles, podemos utilizar a palavra LIKE.

                      % representa diversos caracteres que desconhecemos;

                      _ (underscore) representa um caracter que desconhecemos;

          SELECT campos FROM nomedaTabela WHERE nomeCampo [NOT LIKE | LIKE ] valor ;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
d4) consulta de dados | WHERE ... LIKE
          Exemplos:

          1) vamos procurar todos registos da tabela CDs cujo titulo comece com a letra g


          SELECT * FROM CDs WHERE titel LIKE ‘ g% ‘ ;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
d4) consulta de dados | WHERE ... LIKE
          Exemplos:

          2) vamos agora procurar todos registos da tabela CDs cujo titulo não tenha apenas 5 letras
          e cujo ano de lançamento (campo jahr) seja superior ao ano 2000

          SELECT * FROM CDs WHERE titel NOT LIKE ‘_ _ _ _ _ ‘ AND jahr > 2000 ;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
d4) consulta de dados | WHERE ... outros...
        Além do LIKE existem ainda outros operadores que podem ser usados como critério na
        utilização da cláusula WHERE:

                  BETWEEN / NOT BETWEEN

                  IS NULL / IS NOT NULL

          Ex.
          SELECT * FROM CDs WHERE jahr BETWEEN 2000 AND 2001 ;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
d4) consulta de dados | WHERE | AND OR
        Podemos ainda juntar diversos critérios com os operadores AND e OR:


          Exemplo com o operador AND (E):

          SELECT BookName , Category , InStock , OnOrder
          FROM Books
          WHERE Category= ’ Fiction ’ AND ( InStock+OnOrder ) > 40
          ORDER BY BookName;


          Exemplo com o operador OR (OU) e o símbolo diferente ( < > )

          SELECT BookName , Category , InStock , OnOrder
          FROM Books
          WHERE InStock > 30 OR OnOrder < > 60
          ORDER BY BookName;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
d2) consulta de dados | SELECT LIMIT
        Caso o resultado da consulta tenha demasiados registos, o programador poderá especificar
        um limite máximo:

          SELECT campo1, campo2, ... FROM nomedaTabela LIMIT numeroMáximo ;

        Caso não queiramos começar a consulta a partir do primeiro registo mas avançar X registos
        (ideal quando se quer dividir o resultado por páginas), utilizamos a seguinte estrutura:

          SELECT campo1, campo2, ... FROM nomedaTabela LIMIT offset , numeroMáximo ;      ou
          SELECT campo1, campo2, ... FROM nomedaTabela LIMIT numeroMáximo
          OFFSET numeroRegInicial ;

          Exemplos implementados das duas formas mas com o mesmo resultado final:
          SELECT * FROM student LIMIT 5 , 10 || SELECT * FROM student LIMIT 10 OFFSET 5

        No exemplo, a consulta vai mostrar no máximo 10 registos, e começa a contar a partir do
        5º registo da tabela em diante. Ou seja, se todos os registos tivessem um campo idStudent
        com números de 1 a 100... mostraria os alunos onde idStudent fosse entre 6 e 15.




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
e) consulta de dados | COUNT
        Por vezes há a necessidade de contar registos. Nesses casos utiliza-se a função COUNT.

          Exemplo:

          SELECT count ( * ) FROM cds;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
f) consulta de dados | GROUP BY
        Podemos agrupar dados utilizando a cláusula GROUP BY que permite unir numa única linha
        todas as linhas selecionadas que possuem os mesmos valores.

          Exemplo: aqui vão ser agrupados os registos cujo intérprete se repita

          SELECT interpret , count ( interpret ) FROM cds GROUP BY interpret;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
g) consulta de dados | DISTINCT
        Por vezes há necessidade de ignorar registos com valores duplicados.
        Nesses casos podemos utilizar a função DISTINCT.

              SELECT DISTINCT nomeCampo FROM nomeTabela;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
h) consulta de dados | FUNCTIONS
        Os SGBDs actuais suportam diversas funções de cálculo estatístico simples como:



              Ex. de utilização:

              SELECT
              SUM (Amount) AS SumOfAmount
              COUNT (Amount) AS CountOfAmount
              AVG (Amount) AS AvgOfAmount
              MIN (Amount) AS MinOfAmount
              MAX (Amount) AS MaxOfAmount
              FROM SALES;

              Resultado do exemplo apresentado:




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados




                 actualização de dados | UPDATE




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
i) actualização de dados | UPDATE
        O comando UPDATE serve então para efectuar uma actualização a um registo e pode ser
        realizado sem a cláusula WHERE.

        No entanto, é a cláusula WHERE que vai definir exactamente qual/quais é/serão os registos a
        serem ACTUALIZADOS. Caso seja omitido, TODOS OS REGISTOS SERÃO
        ACTUALIZADOS POR IGUAL!!

              Sintaxe de utilização:

              UPDATE nomeTabela SET
              nomeColuna1=valor1 [, nomeColuna2=valor2 ...]
              [WHERE condição];




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
i) actualização de dados | UPDATE
              Exemplo:

              Vamos alterar o nome do intérprete Groove Armada por Groovy em todos os registos da tabela CDs.

              UPDATE cds SET interpret = ' Groovy ' WHERE interpret = ' Groove Armada ' ;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
i) actualização de dados | UPDATE
              Outros exemplos:

              UPDATE student SET address = ' welling street ' WHERE name = ' jack ' ;
              ou
              UPDATE student SET marks=marks+2 WHERE name = ' david ' ;


              E se a actualização for em duas ou mais tabelas em simultâneo?

              UPDATE tabela1, tabela2 , ...
              SET

              tabela1.Quantity = tabela1.Quantity + 1 ,
              tabela2.InStock = tabela2.InStock - 1

              WHERE tabela1.BookID = tabela2.BookID
              AND tabela1.OrderID = 1002 ;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados




                eliminação de dados | DELETE




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
j) eliminação de dados | DELETE
         O comando DELETE serve então para apagar registos das tabelas e pode ser utilizado sem o
         WHERE. No entanto, neste caso, todas as linhas da tabela indicada serão excluídas!! Portanto,
         vamos utilizar o WHERE quando desejamos eliminar os registros que obedeçam a uma certa
         condição.

               Sintaxe de utilização:

               DELETE FROM nomeTabela
               [WHERE condição];
               [LIMIT numeroLinhas]

               Exemplo 1)
               DELETE FROM Clientes;

               Neste exemplo 1) seriam eliminados TODOS os registros da tabela Clientes na medida em
               que não foi especificado nenhum critério (WHERE).

               Exemplo 2)
               DELETE FROM student WHERE name = ' michael ' LIMIT 10 ;

               Já no exemplo 2, serão apagados no máximo 10 registos cujo name tenha o valor michael

 Escola Secundária de Adolfo Portela    Marco Pinheiro | profmarco550@gmail.com
Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados




                                       operadores lógicos




 Escola Secundária de Adolfo Portela    Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
k) operadores lógicos
         Uma vez que estamos a utilizar o SGBD MySQL nas aulas, o MySQL suporta os seguintes
         operadores lógicos:

                  AND ( && )

                  OR ( || )

                  NOT ( ! )




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
k) operadores lógicos | AND (&&)
         The logical AND (&&) operator indicates whether the both operands are true. Lets see a
         statement using AND operator.

               Sintaxe de utilização:

               SELECT studid, name FROM student WHERE marks > 80 AND marks < 100 ;

               ou

               SELECT studid, name FROM student WHERE marks > 80 && marks < 100 ;




 Escola Secundária de Adolfo Portela    Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
k) operadores lógicos | OR ( | | )
         The logical OR ( | | ) operator indicates whether the both operands are true. Lets see a statement
         using AND operator.

               Exemplo de utilização:

               SELECT name, marks, address FROM student
               WHERE name like ' a% ' OR name like ' s% ' ;

               ou

               SELECT name, marks, address FROM student
               WHERE name like ' a% ' | | name like ' s% ' ;




 Escola Secundária de Adolfo Portela    Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
k) operadores lógicos | NOT ( ! )
         The logical NOT ( ! ) operator have only one operand and it returns the inverse of the value.

               Exemplo de utilização:

               SELECT * FROM cds WHERE jahr != 1999;
               ou
               SELECT * FROM cds WHERE NOT ( jahr = 1999 );
               ou
               SELECT * FROM cds WHERE ! ( jahr = 1999 );




 Escola Secundária de Adolfo Portela    Marco Pinheiro | profmarco550@gmail.com
Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados




                                 consultas com
                              JUNÇÕES DE TABELAS




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
l) consultas c/ junção tabelas




                                           INNER JOIN




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
l) consultas c/ junção tabelas | INNER JOIN
  Caso exista uma relação entre as duas tabelas (1-1, 1-N), podemos fazer a consulta cujo resultado
  mostra APENAS registos de ambas as tabelas que estejam unidos por uma chave (chave primária e
  chave estrangeira).

   Exemplo de aplicação com as tabelas CARROS e EMPREGADOS, onde cada empregado
   (tabela EMPREGADOS) pode ter associado um carro (da tabela CARROS) via campo chave idCarro




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
l) consultas c/ junção tabelas | INNER JOIN




    SELECT EMPREGADOS.nomeEmpregado, EMPREGADOS.funcao, CARROS.fabricante, CARROS.modelo
    FROM CARROS INNER JOIN EMPREGADOS
    ON CARROS.idCarro = EMPREGADOS.idCarro ;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
l) consultas c/ junção tabelas | INNER JOIN




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
l) consultas c/ junção tabelas




                                              LEFT JOIN




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
l) consultas c/ junção tabelas | LEFT JOIN
         Neste caso, com o LEFT JOIN são obtidos TODOS os carros, porque a primeira tabela
         referenciada no JOIN (LEFT) é a tabela CARROS, e os registos que existirem relacionados com
         esses carros na tabela de EMPREGADOS.

         Para os carros que estão atribuídos a um empregado, a respectiva informação é incluída na
         tabela. Os carros que não estão atribuidos, os campos nomeEmpregado e funcao aparecem
         vazios (NULL)


    SELECT EMPREGADOS.nomeEmpregado, EMPREGADOS.funcao, CARROS.fabricante, CARROS.modelo
    FROM CARROS LEFT JOIN EMPREGADOS
    ON CARROS.idCarro = EMPREGADOS.idCarro ;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
l) consultas c/ junção tabelas | LEFT JOIN




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
l) consultas c/ junção tabelas




                                             RIGHT JOIN




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
l) consultas c/ junção tabelas | RIGHT JOIN
         Neste caso, com o RIGHT JOIN são obtidos TODOS os empregados, porque a segunda tabela
         referenciada no JOIN (RIGHT) é a tabela EMPREGADOS.

         Para os funcionários a que está atribuído um carro, a respectiva informação é incluída na
         tabela. Naqueles funcionários que têm o campo CarNo na tabela EMPLOYEES, os campos
         Make e Model aparecem por consequência vazios...



   SELECT EMPREGADOS.nomeEmpregado, EMPREGADOS.funcao, CARROS.fabricante, CARROS.modelo
   FROM CARROS RIGHT JOIN EMPREGADOS
   ON CARROS.idCarro = EMPREGADOS.idCarro ;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
l) consultas c/ junção tabelas | RIGHT JOIN




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados




                                            transacções




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
n) transacções | conceito
         Uma transacção num SGBD é uma sequência de instruções que deverá ser lida como uma
         instrução indivisível. Todo o trabalho realizado pelas várias instruções deverá ser completado
         ou então não poderá ser feito, mas nunca deverá ficar uma parte feita e outra não. (definição e
         exemplo em http://www.php-pt.com/index.php?
         option=com_content&task=view&id=65&Itemid=28)

                        Sintaxe:
                        START TRANSACTION ;
                        instrucções de SQL ;
                        [ ROLLBACK ; ]
                        COMMIT ;

                        Ex. Imaginemos uma transferência de 1000€ da bancária da conta 2 para a conta 1

                        START TRANSACTION;
                        UPDATE contas SET saldo = saldo – 1000 WHERE numero_conta = 2;
                        UPDATE contas SET saldo = saldo + 1000 WHERE numero_conta = 1;

                        Caso algo corresse mal, poderíamos anular esta transacção
                        ROLLBACK;
                        Caso tudo tivesse corrido bem:
                        COMMIT;

 Escola Secundária de Adolfo Portela      Marco Pinheiro | profmarco550@gmail.com
Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados




                                   integridade referencial




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
m) integridade referencial | conceitos
         No MySQL também é possível propagar a integridade referencial entre os registos de tabelas
         relacionadas entre si.

         Essa propagação pode acontecer em dois momentos diferentes:

                  Quando acontece uma ACTUALIZAÇÃO do valor de uma chave primária (PRIMARY KEY);

                  Quando há uma ELIMINAÇÃO de um registo com um campo cuja chave primária está
                  envolvida em relações noutras tabelas (como chave estrangeira - FOREIGN KEY).




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
m) integridade referencial | conceitos
         Quando o valor de um campo que é chave primária (primary key) for alterado ou o registo em si
         for simplesmente apagado e essa chave deixar de existir, o SGBD poderá providenciar uma
         destas cinco medidas que recairão sobre todos os registos que contenham a chave primária
         sob a qual está a recair a operação de modificação/eliminação como chave estrangeira -
         foreign key:


          1.      RESTRICT

          2.      CASCADE

          3.      SET NULL
                                                                                               Pre
          4.      NO ACTION                                                                    50
                                                                                               50
                                                                                               50
                                                                                               50




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
m) integridade referencial | RESTRICT
1.      RESTRICT

        Enquanto houver registos na base de dados cuja chave estrangeira é a chave primária da tabela
        sobre a qual está a recair a operação de actualização / eliminação, a dita operação será sempre
        abortada.

        Assim, esta medida obriga a que todas as ocorrências dessa chave sejam apagadas primeiro.


        Exemplo:

        Se tentarmos apagar o produto Cadeira
        da tabela PRODUTOS, uma vez que
        há registos na tabela ENCOM_PROD                                                             Pre
        com ID_Produto igual a 1, o SGBD não                                                         50
                                                                                                     50
        será deixará alterar o ID_Produto de 1                                                       50
                                                                                                     50
        para outro número nem permitirá que o
        produto Cadeira (com o ID_Produto 1) seja apagado da tabela
        PRODUTOS!




     Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
m) integridade referencial | CASCADE
2.      CASCADE

        Como o nome indica, aqui a propagação é efectuada em CASCATA.

        Assim, esta medida obriga a que o SGBD efectue a actualização do novo valor da chave em todos
        os registos relacionados ou efectue a eliminação de todas as ocorrências que tenham referência a
        essa chave.

        Exemplo:

        Se tentarmos apagar o produto Cadeira
        da tabela PRODUTOS, uma vez que
        há registos na tabela ENCOM_PROD                       44

        com ID_Produto igual a 1, o SGBD irá                                                         Pre
                                                                                                     50
        apagar todos os registos da tabela                                                           50
                                                                                                     50
        ENCOM_PROD que tenham como ID_                                               44
                                                                                                     50
        Produto o número 1. Caso contrário, ficariam encomendas com
        referência a um produto que já não existia... (órfão!)

        Em caso de uma actualização do valor ID_Produto da Cadeira da tabela PRODUTOS (de 1 para
        100 por exemplo), TODOS os registos da tabela ENCOM_PROD onde actualmente têm
        ID_PRoduto igual a 1, seriam actualizados pelo SGBD para 100.

     Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
m) integridade referencial | SET NULL
3.      SET NULL

        Neste caso, o SGBD deixa que os valores dos campos chave sejam modificados ou mesmo
        eliminados.

        No entanto, o valor das chaves que fazem referência a este campo terão o seu valor actualizado
        para NULL. Útil pois posteriormente podemos fazer uma consulta e averiguar que registos têm
        referências a chaves que já não existem (contêm valor NULL) e poderão depois ser tratados da
        forma que se achar conveniente - SELECT * FROM nomeTabelaRelacionada WHERE
        nomeCampoChaveEstrangeira is NULL;




                                             NULL



                                            NULL
                                                                                     Pre
                                                                   NULL              50
                                                                                     50
                                                                                     50
                                                                                     50




     Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
m) integridade referencial | NO ACTION
4.      NO ACTION

        Neste caso, o SGBD “fecha os olhos” ao erro grave de quebra de integridade que está a
        acontecer... não acontece nada aos registos que têm referência a esta chave que acabou de ser
        alterada ou apagada.

        Esta situação será de eviar na medida em que haverá registos que vão ficar orfãos! Senão
        vejamos: Se apagarmos o PRODUTO com ID_Produto 2 da tabela PRODUTOS ( mesa de sala ),
        vai continuar a haver registos referentes a esse produto perdidos e sem “pai” na tabela
        ENCOM_PROD!




                                                                                                             Pre
                                                                                                             50
                                                                                                             50
                                                                                                             50
                                           Qual é o nome do produto                                          50
                                            com ID_Produto = 2?!
                                                                             Não existe nenhum produto com
                                                                                    ID_Produto = 2...


     Escola Secundária de Adolfo Portela           Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
m) integridade referencial | SET DEFAULT
4.      SET DEFAULT

        Ainda não suportado pelo SGBD MySQL!!

        Na prática acontece quase o mesmo do que na opção SET NULL mas em vez dos valores da
        chave estrangeira ficarem vazios (NULL) ficarão com o seu valor predefinido (DEFAULT).




     Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
m) integridade referencial | revisão fk
            A chave estrangeira (foreign key) é uma cláusula que deve ser incluída quando possuímos
            duas tabelas relacionadas numa base de dados.

            Através da chave estrangeira estabelecemos as relações entre duas ou mais tabelas.

            A chave estrangeira desta forma referencía o campo que é chave primária na tabeça
            relacionada.



            CREATE TABLE student
            (
            studID INT PRIMARY KEY ,
            name VARCHAR(30) ,
            address VARCHAR(40) ,

            FOREIGN KEY ( campoChaveEstrangeira ) REFERENCES Nome_outraTabela ( Nome_da_Chave )

            ) ENGINE = InnoDB ;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
m) integridade referencial | revisão fk
            Implementando a chave estrangeira através do método de CONSTRAINT:



            CREATE TABLE student
            (
            studID INT PRIMARY KEY ,
            name VARCHAR(30) ,
            address VARCHAR(40) ,
            class INT ,

            CONSTRAINT fk_nomeConstricao FOREIGN KEY ( CampoChaveEstrangeira )
            REFERENCES Nome_outraTabela ( Nome_da_Chave )

            ) ENGINE = InnoDB ;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
m) integridade referencial | implementação
         No MySQL também é possível propagar a integridade referencial entre os registos de tabelas
         relacionadas entre si.

               A sintaxe é a seguinte:

               [ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET
               DEFAULT }]

               [ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET
                DEFAULT }]




 Escola Secundária de Adolfo Portela     Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
m) integridade referencial | implementação
            Implementando a propagação da ELIMINAÇÃO ( ON DELETE ) através do método de escrita
            em linha:

           CREATE TABLE student
           (
           studID INT PRIMARY KEY ,
           name VARCHAR(30) ,
           address VARCHAR(40) ,

           FOREIGN KEY ( campoChaveEstrangeira ) REFERENCES Nome_outraTabela ( Nome_da_Chave )
           [ ON DELETE { RESTRICT | CASCADE | SET NULL | NO ACTION | SET
           DEFAULT } ]

           [ ON UPDATE { RESTRICT | CASCADE | SET NULL | NO ACTION | SET
           DEFAULT } ]

           ) ENGINE = InnoDB ;




 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com
3. DML - Linguagem de Manipulação de Dados
m) integridade referencial | implementação
            Implementando a propagação da ELIMINAÇÃO ( ON DELETE ) através do método de
            CONSTRAINT:

           CREATE TABLE student
           (
           studID INT PRIMARY KEY ,
           name VARCHAR(30) ,
           address VARCHAR(40) ,
           class INT ,

           CONSTRAINT fk_nomeConstricao FOREIGN KEY ( CampoChaveEstrangeira )
           REFERENCES Nome_outraTabela ( Nome_da_Chave )

           [ ON DELETE { RESTRICT | CASCADE | SET NULL | NO ACTION | SET
           DEFAULT } ]

           [ ON UPDATE { RESTRICT | CASCADE | SET NULL | NO ACTION | SET
           DEFAULT } ]

           ) ENGINE = InnoDB ;



 Escola Secundária de Adolfo Portela   Marco Pinheiro | profmarco550@gmail.com

Weitere ähnliche Inhalte

Was ist angesagt?

Exercícios de mysql
Exercícios de mysqlExercícios de mysql
Exercícios de mysql
Leo Frazão
 
Banco de dados aula 4
Banco de dados aula 4Banco de dados aula 4
Banco de dados aula 4
Ed W. Jr
 
Aula 08 - Introdução ao banco de dados MySQL - Programação Web
Aula 08 - Introdução ao banco de dados MySQL - Programação WebAula 08 - Introdução ao banco de dados MySQL - Programação Web
Aula 08 - Introdução ao banco de dados MySQL - Programação Web
Dalton Martins
 

Was ist angesagt? (18)

Linguagem SQL
Linguagem SQLLinguagem SQL
Linguagem SQL
 
Aprofundamento de DDL e DML
Aprofundamento de DDL e DMLAprofundamento de DDL e DML
Aprofundamento de DDL e DML
 
Exercícios de mysql
Exercícios de mysqlExercícios de mysql
Exercícios de mysql
 
Introdução ao SQL
Introdução ao SQLIntrodução ao SQL
Introdução ao SQL
 
Comandos DDL para o MySQL
Comandos DDL para o MySQLComandos DDL para o MySQL
Comandos DDL para o MySQL
 
Aula10 sql-ddl
Aula10 sql-ddlAula10 sql-ddl
Aula10 sql-ddl
 
TOTVS LINHA RM TREINAMENTO SQL
TOTVS LINHA RM TREINAMENTO SQLTOTVS LINHA RM TREINAMENTO SQL
TOTVS LINHA RM TREINAMENTO SQL
 
Aula 10 banco de dados
Aula 10   banco de dadosAula 10   banco de dados
Aula 10 banco de dados
 
Hands on Labs - SQL Server 2008
Hands on Labs - SQL Server 2008Hands on Labs - SQL Server 2008
Hands on Labs - SQL Server 2008
 
Banco de dados aula 4
Banco de dados aula 4Banco de dados aula 4
Banco de dados aula 4
 
Aula2 - SQL
Aula2 - SQLAula2 - SQL
Aula2 - SQL
 
Aula 10 banco de dados
Aula 10   banco de dadosAula 10   banco de dados
Aula 10 banco de dados
 
Sql - Introdução ao mysql
Sql - Introdução ao mysqlSql - Introdução ao mysql
Sql - Introdução ao mysql
 
Aula 11 banco de dados
Aula 11   banco de dadosAula 11   banco de dados
Aula 11 banco de dados
 
Aula 08 - Introdução ao banco de dados MySQL - Programação Web
Aula 08 - Introdução ao banco de dados MySQL - Programação WebAula 08 - Introdução ao banco de dados MySQL - Programação Web
Aula 08 - Introdução ao banco de dados MySQL - Programação Web
 
Aula 12 banco de dados
Aula 12   banco de dadosAula 12   banco de dados
Aula 12 banco de dados
 
Banco de dadados MySQL com PHP
Banco de dadados MySQL com PHPBanco de dadados MySQL com PHP
Banco de dadados MySQL com PHP
 
Banco de dados comandos sql
Banco de dados   comandos sqlBanco de dados   comandos sql
Banco de dados comandos sql
 

Andere mochten auch

Replicacao Object Sistemas
Replicacao Object SistemasReplicacao Object Sistemas
Replicacao Object Sistemas
taniamaciel
 
Junções e subconsultas
Junções e subconsultasJunções e subconsultas
Junções e subconsultas
julianaveregue
 
Canvi climàtic: Efectes i percepció social
Canvi climàtic: Efectes i percepció socialCanvi climàtic: Efectes i percepció social
Canvi climàtic: Efectes i percepció social
Josep Lluís Ruiz
 
Tema 3 Dissolucions 1er batxillerat
Tema 3 Dissolucions 1er batxilleratTema 3 Dissolucions 1er batxillerat
Tema 3 Dissolucions 1er batxillerat
mmarti61
 
La Variació Lingüística
La Variació LingüísticaLa Variació Lingüística
La Variació Lingüística
Epsa Llengues
 
Unitat 2 la revolució industrial 2017-18
Unitat 2   la revolució industrial 2017-18Unitat 2   la revolució industrial 2017-18
Unitat 2 la revolució industrial 2017-18
jordimanero
 

Andere mochten auch (20)

ADO.NET
ADO.NETADO.NET
ADO.NET
 
Java - Introdução a banco de dados
Java - Introdução a banco de dadosJava - Introdução a banco de dados
Java - Introdução a banco de dados
 
Manual de Usuário - TCC André Luiz Jamarino Abekawa
Manual de Usuário - TCC André Luiz Jamarino AbekawaManual de Usuário - TCC André Luiz Jamarino Abekawa
Manual de Usuário - TCC André Luiz Jamarino Abekawa
 
Replicacao Object Sistemas
Replicacao Object SistemasReplicacao Object Sistemas
Replicacao Object Sistemas
 
Minicurso de Cakephp
Minicurso de CakephpMinicurso de Cakephp
Minicurso de Cakephp
 
Junções e subconsultas
Junções e subconsultasJunções e subconsultas
Junções e subconsultas
 
Apostila PhP com Wamp, 2a. parte
Apostila PhP com Wamp, 2a. parteApostila PhP com Wamp, 2a. parte
Apostila PhP com Wamp, 2a. parte
 
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
 
Agile Management
Agile ManagementAgile Management
Agile Management
 
Lliço5 Cinèticaquímica
Lliço5 CinèticaquímicaLliço5 Cinèticaquímica
Lliço5 Cinèticaquímica
 
area econòmica i patrimonial
area econòmica i patrimonialarea econòmica i patrimonial
area econòmica i patrimonial
 
Canvi climàtic: Efectes i percepció social
Canvi climàtic: Efectes i percepció socialCanvi climàtic: Efectes i percepció social
Canvi climàtic: Efectes i percepció social
 
Arquitectura de Computadores (II Bimestre)
Arquitectura de Computadores (II Bimestre)Arquitectura de Computadores (II Bimestre)
Arquitectura de Computadores (II Bimestre)
 
Tema 3 Dissolucions 1er batxillerat
Tema 3 Dissolucions 1er batxilleratTema 3 Dissolucions 1er batxillerat
Tema 3 Dissolucions 1er batxillerat
 
Les propietats dels materials i els assaigs d'estudi
Les propietats dels materials i els assaigs d'estudiLes propietats dels materials i els assaigs d'estudi
Les propietats dels materials i els assaigs d'estudi
 
Tema15
Tema15Tema15
Tema15
 
1c-EL SEXENNI DEMOCRÀTIC
1c-EL SEXENNI DEMOCRÀTIC1c-EL SEXENNI DEMOCRÀTIC
1c-EL SEXENNI DEMOCRÀTIC
 
La Variació Lingüística
La Variació LingüísticaLa Variació Lingüística
La Variació Lingüística
 
La població espanyola. (2) Els contrasts territorials
La població espanyola. (2) Els contrasts territorialsLa població espanyola. (2) Els contrasts territorials
La població espanyola. (2) Els contrasts territorials
 
Unitat 2 la revolució industrial 2017-18
Unitat 2   la revolució industrial 2017-18Unitat 2   la revolució industrial 2017-18
Unitat 2 la revolució industrial 2017-18
 

Ähnlich wie Linguagem SQL (com MySQL)

6338 111121071604-phpapp01
6338 111121071604-phpapp016338 111121071604-phpapp01
6338 111121071604-phpapp01
Gilson Figueredo
 
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
QuitriaSilva550
 
modulo-15-sql-criar-e-manipular-tabelas1-2-flipbook-pdf.docx
modulo-15-sql-criar-e-manipular-tabelas1-2-flipbook-pdf.docxmodulo-15-sql-criar-e-manipular-tabelas1-2-flipbook-pdf.docx
modulo-15-sql-criar-e-manipular-tabelas1-2-flipbook-pdf.docx
AnaAlmeida462833
 
Banco dados lj
Banco dados ljBanco dados lj
Banco dados lj
Carol Luz
 
Apostila sql
Apostila sqlApostila sql
Apostila sql
snetobr
 

Ähnlich wie Linguagem SQL (com MySQL) (20)

6338 111121071604-phpapp01
6338 111121071604-phpapp016338 111121071604-phpapp01
6338 111121071604-phpapp01
 
Minicurso PostgreSQl
Minicurso PostgreSQlMinicurso PostgreSQl
Minicurso PostgreSQl
 
Fundamentos de Banco de Dados Relacionais
Fundamentos de Banco de Dados RelacionaisFundamentos de Banco de Dados Relacionais
Fundamentos de Banco de Dados Relacionais
 
Aula 11 banco de dados
Aula 11   banco de dadosAula 11   banco de dados
Aula 11 banco de dados
 
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
 
Aulas_SQL.pdf
Aulas_SQL.pdfAulas_SQL.pdf
Aulas_SQL.pdf
 
Apostila ib
Apostila ibApostila ib
Apostila ib
 
Agbd aula4 sql_ddl
Agbd aula4 sql_ddlAgbd aula4 sql_ddl
Agbd aula4 sql_ddl
 
modulo-15-sql-criar-e-manipular-tabelas1-2-flipbook-pdf.docx
modulo-15-sql-criar-e-manipular-tabelas1-2-flipbook-pdf.docxmodulo-15-sql-criar-e-manipular-tabelas1-2-flipbook-pdf.docx
modulo-15-sql-criar-e-manipular-tabelas1-2-flipbook-pdf.docx
 
Conceitos inicias de banco de dados Mysql
Conceitos inicias de banco de dados MysqlConceitos inicias de banco de dados Mysql
Conceitos inicias de banco de dados Mysql
 
Modulo-02-Aula-02-conteudo-de-certi.pptx
Modulo-02-Aula-02-conteudo-de-certi.pptxModulo-02-Aula-02-conteudo-de-certi.pptx
Modulo-02-Aula-02-conteudo-de-certi.pptx
 
Banco dados lj
Banco dados ljBanco dados lj
Banco dados lj
 
Sql
SqlSql
Sql
 
Python 04
Python 04Python 04
Python 04
 
Resumão BB Direção Concursos.pdf banco do brasil
Resumão BB Direção Concursos.pdf banco do brasilResumão BB Direção Concursos.pdf banco do brasil
Resumão BB Direção Concursos.pdf banco do brasil
 
Fundamentos de SQL - Parte 3 de 8
Fundamentos de SQL - Parte 3 de 8Fundamentos de SQL - Parte 3 de 8
Fundamentos de SQL - Parte 3 de 8
 
Apostila sql
Apostila sqlApostila sql
Apostila sql
 
Apostila sql
Apostila sqlApostila sql
Apostila sql
 
UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6
UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6
UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6
 
MySQL - Instalação e Alguns comandos de Banco de Dados
MySQL - Instalação e Alguns comandos de Banco de DadosMySQL - Instalação e Alguns comandos de Banco de Dados
MySQL - Instalação e Alguns comandos de Banco de Dados
 

Mehr von Marco Pinheiro

PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - Introdução
Marco Pinheiro
 
PHP - Queries a um SGBD MySQL
PHP - Queries a um SGBD MySQLPHP - Queries a um SGBD MySQL
PHP - Queries a um SGBD MySQL
Marco Pinheiro
 
Linguagem PHP para principiantes
Linguagem PHP para principiantesLinguagem PHP para principiantes
Linguagem PHP para principiantes
Marco Pinheiro
 
Projecto de tese | Doutoramento em Ciências da Comunicação (UBI 2011)
Projecto de tese | Doutoramento em Ciências da Comunicação (UBI 2011)Projecto de tese | Doutoramento em Ciências da Comunicação (UBI 2011)
Projecto de tese | Doutoramento em Ciências da Comunicação (UBI 2011)
Marco Pinheiro
 
Conceitos de Imagem digital
Conceitos de Imagem digitalConceitos de Imagem digital
Conceitos de Imagem digital
Marco Pinheiro
 

Mehr von Marco Pinheiro (16)

SASS, Compass, Gulp, Greensock
SASS, Compass, Gulp, GreensockSASS, Compass, Gulp, Greensock
SASS, Compass, Gulp, Greensock
 
Dicas para criação rápida de projectos WEB
Dicas para criação rápida de projectos WEBDicas para criação rápida de projectos WEB
Dicas para criação rápida de projectos WEB
 
curso de CSS
curso de CSScurso de CSS
curso de CSS
 
PHP e Mysql - INSERT
PHP e Mysql - INSERTPHP e Mysql - INSERT
PHP e Mysql - INSERT
 
PHP e Mysql - INSERT
PHP e Mysql - INSERTPHP e Mysql - INSERT
PHP e Mysql - INSERT
 
PHP e Mysql - UPDATE
PHP e Mysql - UPDATEPHP e Mysql - UPDATE
PHP e Mysql - UPDATE
 
PHP e Mysql - DELETE
PHP e Mysql - DELETEPHP e Mysql - DELETE
PHP e Mysql - DELETE
 
PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - Introdução
 
PHP e Mysql - SELECT
PHP e Mysql - SELECTPHP e Mysql - SELECT
PHP e Mysql - SELECT
 
PHP - Queries a um SGBD MySQL
PHP - Queries a um SGBD MySQLPHP - Queries a um SGBD MySQL
PHP - Queries a um SGBD MySQL
 
Linguagem PHP para principiantes
Linguagem PHP para principiantesLinguagem PHP para principiantes
Linguagem PHP para principiantes
 
Curso de XHTML
Curso de XHTMLCurso de XHTML
Curso de XHTML
 
funcionamento da internet
funcionamento da internetfuncionamento da internet
funcionamento da internet
 
Projecto de tese | Doutoramento em Ciências da Comunicação (UBI 2011)
Projecto de tese | Doutoramento em Ciências da Comunicação (UBI 2011)Projecto de tese | Doutoramento em Ciências da Comunicação (UBI 2011)
Projecto de tese | Doutoramento em Ciências da Comunicação (UBI 2011)
 
Conceitos de Imagem digital
Conceitos de Imagem digitalConceitos de Imagem digital
Conceitos de Imagem digital
 
IPCOP - Firewalls para os comuns mortais
IPCOP - Firewalls para os comuns mortaisIPCOP - Firewalls para os comuns mortais
IPCOP - Firewalls para os comuns mortais
 

Kürzlich hochgeladen

Kürzlich hochgeladen (6)

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 

Linguagem SQL (com MySQL)

  • 1. Redes de Comunicação Curso Profissional de Técnico de Gestão e Programação de Sistemas Informáticos Ano lectivo 2009-2010 :: 11ºH Escola Secundária de Adolfo Portela
  • 2. Módulo VII (opção 1) acesso a bases de dado remotas via web Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 3. 1. introdução... a) materiais de suporte Livros de referência: “Beginning MySQL”; Robert Sheldon, Geoff Moes; Editora: Wrox; ISBN: 0764579509; “SQL - Structured Query Language - 6ª Edição Actualizada e Aumentada”; Luís Manuel Dias Damas; Editora: FCA; ISBN: 972-722-443-1; Webliografia de referência: http://www.hscripts.com/tutorials/mysql/index.php http://www.estig.ipbeja.pt/~eidbd/sql.htm http://www.w3schools.com/sql/default.asp Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 4. 1. introdução... b) introdução | SQL?! SQL (do inglês Structured Query Language, ou Linguagem de Consulta Estruturada), é uma linguagem de pesquisa, declarativa, para Bases de Dados Relacionais; Vamos aprender SQL para aceder e manipular dados no SGBDs MySQL, mas esta linguagem é comum a outros SGBDs: SQL Server, Access, Oracle, DB2 entre outros... O SQL foi desenvolvido originalmente no início dos anos 70 nos laboratórios da IBM; O SGBD que vamos utilizar nas aulas será o MySQL Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 5. 1. introdução... b) introdução | a consola A consola (linha de comandos) do MySQL está localizada em mysqlbin e tem o nome mysql.exe. Para ser iniciado como administrador, mysql -u root Vai ser na consola que iremos executar todas as operações de SQL; Nota: O comando será apenas executado quando a linha terminar com ; caso contrário, sempre que for premida a tecla ENTER é efectuada apenas uma quebra de linha (-->) Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 6. 1. introdução... c) primeiros passos | show databases Para termos acesso a uma lista de bases de dados existentes no servidor show databases; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 7. 1. introdução... c) primeiros passos | create database Para criar uma nova base de dados create database NomeDaNovaBaseDados; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 8. 1. introdução... c) primeiros passos | use e show Para utilizar uma base de dados da lista use NomeDaBaseDados; Para listar as tabelas da base de dados em uso show tables; Nota: no exemplo o resultado mostrado é “Empty set” na medida em que ainda não foram criadas quaisquer tabelas na dita base de dados... Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 9. 1. introdução... c) primeiros passos | describe Após criarmos uma tabela podemos visualizar a sua estrutura utilizando o comando DESCRIBE ou simplesmente DESC seguido do nome da tabela, ou o comando SHOW FIELDS FROM nomeTabela ; DESC nomeTabela ; (show create table nomeTabela -> mais detalhe!) SHOW FIELDS FROM nomeTabela ; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 10. 1. introdução... d) tipos de dados aceites no SQL Tipo Abreviação Descrição INTEIRO INT ou Números inteiros. Existem outros tipos de números inteiros de acordo com o INTEGER sgbd utilizado. REAL DOUBLE ou Números reais. Permitem armazenar todo tipo de número não inteiro. Existem REAL outros tipos de números reais de acordo com o sgbd utilizado. Caracter. Permite a inclusão de dados alfanuméricos com tamanho pré- CARACTER CHAR (x) definido. O número de caracteres é definido entre os parênteses. Ocupa sempre o número indicado (com espaços...) CARACTER Caracter. Permite a inclusão de dados alfanuméricos. O número de caracteres VARIÁVEL VARCHAR (x) é definido entre os parênteses, porém o número de bytes utilizados pelo campo é apenas o especificado (número). DATA DATE Data. Existem diversos tipos de datas de acordo com o sgbd utilizado. BOOLEANO BOOLEAN Armazena um bit de informação, utilizado para verdadeiro ou falso. Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 11. 1. introdução... d) tipos de dados aceites no MySQL Para valores numérios inteiros temos: Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 12. 1. introdução... d) tipos de dados aceites no MySQL Para valores numérios reais temos: Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 13. 1. introdução... d) tipos de dados aceites no MySQL Para valores do tipo caracter (string) temos: Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 14. 1. introdução... d) tipos de dados aceites no MySQL Para valores tipo data temos: Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 15. DDL - Linguagem de Definição de Dados DML - Linguagem de Manipulação de Dados Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 16. 2. DDL - Linguagem de Definição de Dados a) definição Linguagem de definição de dados (ou DDL, de Data Definition Language) é um conjunto de comandos dentro do SQL usada para a definição das estruturas de dados, fornecendo as instruções que permitem a criação, modificação e remoção das tabelas, assim como criação de índices (ou chaves). Estas instruções SQL permitem definir a estrutura de uma base de dados, incluindo colunas (campos), tabelas, índices (chaves), etc. Entre os principais comandos DDL estão CREATE (criar), ALTER (alterar) e DROP (apagar). Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 17. 2. DDL - Linguagem de Definição de Dados a) cad - create, alter, drop CREATE Uma declaração CREATE permite a criação de uma nova base de dados, tabela, índice, ou consulta armazenada. Entre os principais comandos incluidos estão CREATE DATABASE (criar base de dados) e CREATE TABLE (criar tabela); ALTER Uma declaração ALTER permite alterar um objeto de um base de dados. Entre os principais comandos estão ALTER TABLE ADD (adicionar uma coluna na tabela), ALTER TABLE DROP (excluir uma coluna na tabela), entre outros... DROP Uma declaração DROP permite remover (destruir) uma base de dados existente, tabela ou índice. Entre os principais comandos incluídos estão o DROP DATABASE (eliminar uma base de dados inteira), DROP TABLE (excluir tabela) entre outros... Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 18. 2. DDL - Linguagem de Definição de Dados a) cad - create, alter, drop create table Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 19. 2. DDL - Linguagem de Definição de Dados b1) CREATE TABLE CREATE TABLE é o comando para a criação de tabelas e deve ser seguido pelo nome que queremos dar à tabela; Dentro do comando, devemos definir os nomes dos campos de acordo com a conveniência da base de dados, e determinar o tipo de dados que poderão ser incluídos nesse campo. CREATE TABLE nomeTabela CREATE TABLE student ( ( fieldName1 dataType(size) , studID INT , fieldName2 dataType(size) name VARCHAR(30) , ... address VARCHAR(40) ) [ ENGINE = engineUtilizada ] ; ) ENGINE = InnoDB ; Tipos de "engine" da base de dados no SGBD MySQL: ENGINE = {BDB | MEMORY | ISAM | INNODB | MERGE | MYISAM} Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 20. 2. DDL - Linguagem de Definição de Dados b1) CREATE TABLE | auto-increment Se desejamos que o valor de um campo seja de auto-incremento (numeração automática sequêncial) devemos inserir AUTO_INCREMENT na frente do campo pretendido; Isto pode ser utilizado por exemplo, para automatizar um nº que sirva de chave primária na tabela CREATE TABLE student ( studID INT PRIMARY KEY AUTO_INCREMENT , name VARCHAR(30) , address VARCHAR(40) ) ENGINE = InnoDB ; Nota: cada tabela pode ter apenas UM CAMPO com AUTO_INCREMENT e o mesmo terá de ser obrigatoriamente definido como chave primária ( PRIMARY KEY )! Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 21. 2. DDL - Linguagem de Definição de Dados b1) CREATE TABLE | default Valor predefinido para um campo da tabela CREATE TABLE student ( studID INT, name VARCHAR(30) , address VARCHAR(40) DEFAULT ‘ Aveiro ‘ ) ENGINE = InnoDB ; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 22. 2. DDL - Linguagem de Definição de Dados b2) CREATE TABLE | constraints constraints Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 23. 2. DDL - Linguagem de Definição de Dados b2) create | constraints Há diversas regras de “constraint” que podem ser aplicadas aos campos que formam uma tabela. A sua definição pode ser feita de duas formas: inline ou com a palavra constraint (com a excepção do NOT NULL que pode apenas ser definida inline) Eis as mais importantes: NOT NULL (definido apenas inline) UNIQUE PRIMARY KEY FOREIGN KEY CHECK Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 24. 2. DDL - Linguagem de Definição de Dados b2) create | constraints: not null (nn) O constrangimento NOT NULL força um campo a não aceitar valores NULL (vazios), ou seja, obriga a que este seja sempre preenchido (tal como explicado anteriormente). Eis um pequeno exemplo onde o constrangimento é definido inline: CREATE TABLE student ( studID INT NOT NULL , name VARCHAR(30) , address VARCHAR(40) ) ENGINE = InnoDB ; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 25. 2. DDL - Linguagem de Definição de Dados b2) create | constraints: unique (un) O constrangimento UNIQUE identifica de forma única cada registo da tabela da base de dados (não permite que o valor se repita). Tem o mesmo efeito prático da PRIMARY KEY. inline: CREATE TABLE student CREATE TABLE student ( ( studID INT , studID INT UNIQUE , name VARCHAR(30) , name VARCHAR(30) , address VARCHAR(40) , address VARCHAR(40) CONSTRAINT un_nomeConstricao UNIQUE ( studID ) ) ENGINE = InnoDB ; ) ENGINE = InnoDB ; Obs 1) O constrangimento PRIMARY KEY implementa automaticamente este UNIQUE; Obs 2) Podemos ter vários campos com o constrangimento UNIQUE. Nota: un_nomeConstricao é o nome do constraint. Tipicamente tem um prefixo (nn, un, pk, fk,ck), seguido de underscore e o nome "simbólico" para a regra de constrangimento. Nota2: O MySQL é case sensitive (sensível às maiúsculas) no nome do constraint! nn_nomeConstricao e un_nomeconstricao seriam duas regras de constrangimento diferentes! Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 26. 2. DDL - Linguagem de Definição de Dados b2) create | constraints: primary key (pk) O constrangimento PRIMARY KEY define a chave primária da tabela. O valor introduzido não pode ser nem repetido nem nulo (implementa automaticamente os constrangimentos UNIQUE e NOT NULL). inline: CREATE TABLE student CREATE TABLE student ( ( studID INT AUTO_INCREMENT, studID INT PRIMARY KEY , name VARCHAR(30) , name VARCHAR(30) , address VARCHAR(40) , address VARCHAR(40) CONSTRAINT pk_nomeConstricao PRIMARY KEY ( studID ) ) ENGINE = InnoDB ; ) ENGINE = InnoDB ; O constrangimento PRIMARY KEY implementa automaticamente o UNIQUE. Lembra-te: podemos ter vários campos com o constrangimento UNIQUE mas apenas UMA PRIMARY KEY por tabela. Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 27. 2. DDL - Linguagem de Definição de Dados b2) create | constraints: primary key (pk) CREATE TABLE student ( studID INT UNSIGNED AUTO_INCREMENT , name VARCHAR(30) , address VARCHAR(40) , CONSTRAINT pk_nomeConstricao PRIMARY KEY ( studID ) ); Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 28. 2. DDL - Linguagem de Definição de Dados b2) create | constraints: foreign key (fk) A chave estrangeira (foreign key) é uma cláusula que deve ser incluída quando possuímos duas tabelas relacionadas numa base de dados. Através da chave estrangeira estabelecemos as relações entre duas ou mais tabelas. A chave estrangeira desta forma referencía o campo que é chave primária na tabeça relacionada. CREATE TABLE student ( studID INT PRIMARY KEY , name VARCHAR(30) , address VARCHAR(40) , FOREIGN KEY ( campoChaveEstrangeira ) REFERENCES Nome_outraTabela ( Nome_da_Chave ) ) ENGINE = InnoDB ; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 29. 2. DDL - Linguagem de Definição de Dados b2) create | constraints: foreign key (fk) Implementando a chave estrangeira através do método de CONSTRAINT: CREATE TABLE student ( studID INT PRIMARY KEY , name VARCHAR(30) , address VARCHAR(40) , class INT , CONSTRAINT fk_nomeConstricao FOREIGN KEY ( CampoChaveEstrangeira ) REFERENCES Nome_outraTabela( Nome_da_Chave ) ) ENGINE = InnoDB ; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 30. 2. DDL - Linguagem de Definição de Dados b2) create | constraints: check (ck) Validação dos valores introduzidos ( “regra de validação” ) Deve ser incluida em campos que estejam DEPOIS da chave primária. Eis um exemplo para uma regra aplicada ao campo class que só aceita turmas com número compreendido entre 1 e 10: inline: CREATE TABLE student CREATE TABLE student ( ( studID INT PRIMARY KEY , studID INT PRIMARY KEY , name VARCHAR(30) , name VARCHAR(30) , address VARCHAR(40) , address VARCHAR(40) , class INT , class INT , CONSTRAINT ck_nomeConstricao CHECK CHECK ( class BETWEEN 0 AND 10 ) ( class BETWEEN 0 AND 10 ) ) ENGINE = InnoDB ; ) ENGINE = InnoDB ; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 31. Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 32. 2. DDL - Linguagem de Definição de Dados c) cad - create, alter, drop alter table Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 33. 2. DDL - Linguagem de Definição de Dados c) ALTER TABLE Após criarmos uma tabela podemos alterar sua estrutura com o uso da cláusula ALTER TABLE. Lembra-te que esta alteração é sempre sobre a estrutura da tabela, e não sobre os dados. Esta alteração à tabela pode ser efectuada de duas formas: ou acrescentando um novo campo (utilizando ADD) ou alterando-se as propriedades de um campo já existente (utilizando-se CHANGE ou MODIFY). O comando ALTER TABLE tem a seguinte sintaxe (a excepção é para mudar nome a uma tabela >> ALTER TABLE nomeActual RENAME novoNome): ALTER TABLE Nome_Tabela [ADD Nome_Campo Nova_Regra | nova_regra MODIFY Nome_Campo NovoTipo ou Nova_Regra CHANGE Nome_Campo_actual novo_Nome_Campo NovoTipo [e Nova_Regra] DROP Nome_Campo | RegraConstraint ]; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 34. 2. DDL - Linguagem de Definição de Dados c1) ALTER TABLE | ADD Podemos utilizar a cláusula ADD para adicionar um novo campo à tabela. Para isso, além do nome, devemos definir também o seu tipo da mesma forma como fazemos ao criar o campo numa nova tabela: ALTER TABLE Nome_Tabela ADD nomeCampo TipoDados ; ALTER TABLE Cliente ADD Nome_Mae VARCHAR ( 60 ) ; Caso desejemos que um campo seja inserido numa ordem específica ( INÍCIO ou DEPOIS de um determinado campo ), utilizamos a seguinte sintaxe: ALTER TABLE Cliente ADD Nome_Mae VARCHAR ( 60 ) FIRST; ALTER TABLE Cliente ADD Nome_Mae VARCHAR ( 60 ) AFTER nomeCampo; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 35. 2. DDL - Linguagem de Definição de Dados c1) ALTER TABLE | ADD Com o ADD podemos adicionar também regras a um dado campo. Na nossa tabela, se quisermos que o campo nome seja chave primária, podemos fazer: ALTER TABLE Cliente ADD PRIMARY KEY ( Nome ) ; Se quisermos que o campo dataNascimento tenha valores entre 1980-12-31 e 2009-12-31, podemos fazer: ALTER TABLE Cliente ADD CHECK ( nome LIKE ‘ a% ‘ ) ; ou através da forma de declaração da regra de constrangimento via constraint: ALTER TABLE Cliente ADD CONSTRAINT ck_nomeConstricao CHECK ( class BETWEEN 0 AND 10 ) Podiamos inclusivamente adicionar uma chave estrangeira (foreign key): ALTER TABLE Cliente ADD FOREIGN KEY ( campoChaveEstrangeira ) REFERENCES Nome_outraTabela ( Nome_da_Chave ) Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 36. 2. DDL - Linguagem de Definição de Dados c2) ALTER TABLE | MODIFY Altera as especificações de um campo da tabela (tipo de dados, regras, etc) mas o nome mantém-se. Sintaxe: ALTER TABLE nomeDaTabela MODIFY campo novoTipoDados NovaRegra; Ex. ALTER TABLE student MODIFY stud_name VARCHAR ( 50 ) ; ou mais complexo... ALTER TABLE student MODIFY stud_name VARCHAR ( 60 ) NOT NULL DEFAULT ‘ helder ’; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 37. 2. DDL - Linguagem de Definição de Dados c3) ALTER TABLE | CHANGE Altera o nome de um campo (coluna) e do respectivo tipo de dados (type) e as suas regras Nota: quando se muda o nome a uma coluna com o CHANGE, somos obrigados a especificar novamente o seu tipo de dados mesmo que este se mantenha (terá de ser repetido). Sintaxe: ALTER TABLE nomeDaTabela CHANGE nomeDoCampoActual novoNome novoTipoDados [ novas regras ] ; Ex. ALTER TABLE student CHANGE name numTelefone INT NOT NULL UNIQUE ; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 38. 2. DDL - Linguagem de Definição de Dados c4) ALTER TABLE | DROP Se desejarmos ELIMINAR algo da estrutura da nossa tabela, utilizamos a seguinte sintaxe: ALTER TABLE Nome_Tabela [DROP COLUMN nome_campo]; [DROP FOREIGN KEY fk_simbolo]; [DROP PRIMARY KEY]; Exemplos: ALTER TABLE student DROP COLUMN stud_name ; ou ALTER TABLE student DROP FOREIGN KEY fk_simbolo ; ou ALTER TABLE student DROP PRIMARY KEY ; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 39. 2. DDL - Linguagem de Definição de Dados d) cad - create, alter, drop DROP TABLE Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 40. 2. DDL - Linguagem de Definição de Dados d) DROP TABLE Se desejarmos ELIMINAR uma tabela intera da base de dados: DROP TABLE nomeTabela; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 41. Informação avulsa... :) mysqldump e show create Se desejarmos EXPORTAR toda a estrutura e o conteúdo de uma base de dados no MySQL, devemos proceder da seguinte forma (convém criar um atalho para simplificar o processo...) mysqldump -u root nomeBaseDados > nomeFicheiro.sql Caso tenham necessidade de ver a estrutura de uma tabela em detalhe, podem utilizar: show create table nomeTabela Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 42. DDL - Linguagem de Definição de Dados DML - Linguagem de Manipulação de Dados Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 43. 3. DML - Linguagem de Manipulação de Dados a) definição Mostrar os campos (colunas) de uma tabela: Os principais comandos DML são: INSERT ( Inserção de Dados ) SELECT ( Seleção de Dados ) UPDATE ( Actualização de Dados ) DELETE ( Eliminação de Dados ) Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 44. 3. DML - Linguagem de Manipulação de Dados inserção de dados | INSERT Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 45. 3. DML - Linguagem de Manipulação de Dados c) inserção de dados | INSERT Vamos agora perceber como podemos introduzir novos registos numa tabela da nossa base de dados. Caso se pretenda preencher todos os campos pela ordem definida na própria estrutura da tabela, utilizamos a seguinte sintaxe: INSERT INTO nomeTabela VALUES ( valor_campo1 , ‘ valor_campo2 ‘ , ... ) ; Caso haja necessidade de preencher apenas alguns campos, há a necessidade de especificar quais são os campos e os respectivos valores. Já os campos omitidos ficam com valor NULL. INSERT INTO nomeTabela (campo1 , campo2 , ... ) VALUES ( valorNumerico1 , ' valorString1 ' , ... ) ; ou então assim: INSERT INTO nomeTabela SET campo1 = valorNumerico1, campo2 = ‘ valorString1 ‘ , ... = ... ; NOTA: strings e datas deverão ser delimitadas por aspas. Valores numéricos não necessitam. Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 46. 3. DML - Linguagem de Manipulação de Dados c) inserção de dados | INSERT | Exemp. INSERT INTO Books VALUES (12786, "Letters to a Young Poet", 1934), (13331, "Winesburg, Ohio", 1919), (14356, "Hell"s Angels", 1966), (15729, "Black Elk Speaks", 1932), (16284, "Noncomformity", 1996), (17695, "A Confederacy of Dunces", 1980), (19264, "Postcards", 1992), (19354, "The Shipping News", 1993); INSERT INTO AuthorBook VALUES (1006, 14356), (1008, 15729), (1009, 12786), (1010, 17695), (1011, 15729), (1012, 19264), (1012, 19354), (1014, 16284); INSERT INTO Authors VALUES (1006, "Hunter", "S.", "Thompson"), (1007, "Joyce", "Carol", "Oates"), (1008, "Black", NULL, "Elk"), (1009, "Rainer", "Maria", "Rilke"), (1010, "John", "Kennedy", "Toole"), (1011, "John", "G.", "Neihardt"), (1012, "Annie", NULL, "Proulx"), (1013, "Alan", NULL, "Watts"), (1014, "Nelson", NULL, "Algren"); Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 47. 3. DML - Linguagem de Manipulação de Dados consulta de dados | SELECT Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 48. 3. DML - Linguagem de Manipulação de Dados d1) consulta de dados | SELECT Depois de haver registos inseridos nas tabelas, temos de ser capazes de efectuar consultas sobre eles. A sintaxe é a seguinte: SELECT campo1, campo2, ... FROM nomedaTabela ; Também aqui podemos utilizar o símbolo * para seleccionar TODOS os campos da tabela: SELECT * FROM nomedaTabela ; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 49. 3. DML - Linguagem de Manipulação de Dados d3) consulta de dados | SELECT ORDER BY Se houver a necessidade de ordenar os registos do resultado de uma consulta, tal pode ser feito bastando para isso especificar quais os campos envolvidos, e qual a ordem a aplicar em cada um deles - ascendente (ASC) ou descendente (DESC): SELECT * FROM nomedaTabela ORDER BY nomeCampo [ ASC | DESC ] ; Exemplos: SELECT * FROM cds ORDER BY titel ASC ; SELECT * FROM cds ORDER BY id DESC ; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 50. 3. DML - Linguagem de Manipulação de Dados d3) consulta de dados | SELECT AS (alias) Podemos ainda “mascarar” o nome verdadeiro de um campo da tabela utilizando a função AS utilizando a seguinte sintaxe: SELECT nomedoCampo1 AS novoNome, nomedoCampo2 AS novoNome2, ... FROM nomedaTabela ; Exemplo: SELECT titel AS titulo, interpret AS artista, jahr AS dataPublic FROM cds; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 51. 3. DML - Linguagem de Manipulação de Dados d4) consulta de dados | critérios WHERE Por vezes há a necessidade de introduzir cláusulas ou critérios na consulta. Utilizamos para isso o WHERE: SELECT * FROM nomedaTabela WHERE condição Exemplo: SELECT * FROM cds WHERE jahr = 2001 ; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 52. 3. DML - Linguagem de Manipulação de Dados d4) consulta de dados | critérios WHERE Aqui temos um exemplo mais complexo (tem uma condição maior) mas que obedece às mesmas regras de construção da anterior: SELECT CDName, Category, InStock+OnOrder-Reserved AS Available FROM CDs WHERE ( Category = " Blues " OR Category = " Jazz " ) AND ( InStock+OnOrder-Reserved ) > 20 ; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 53. 3. DML - Linguagem de Manipulação de Dados d4) consulta de dados | WHERE ... LIKE Quando os valores que utilizamos como critério não são exactos e sabemos apenas alguns detalhes deles, podemos utilizar a palavra LIKE. % representa diversos caracteres que desconhecemos; _ (underscore) representa um caracter que desconhecemos; SELECT campos FROM nomedaTabela WHERE nomeCampo [NOT LIKE | LIKE ] valor ; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 54. 3. DML - Linguagem de Manipulação de Dados d4) consulta de dados | WHERE ... LIKE Exemplos: 1) vamos procurar todos registos da tabela CDs cujo titulo comece com a letra g SELECT * FROM CDs WHERE titel LIKE ‘ g% ‘ ; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 55. 3. DML - Linguagem de Manipulação de Dados d4) consulta de dados | WHERE ... LIKE Exemplos: 2) vamos agora procurar todos registos da tabela CDs cujo titulo não tenha apenas 5 letras e cujo ano de lançamento (campo jahr) seja superior ao ano 2000 SELECT * FROM CDs WHERE titel NOT LIKE ‘_ _ _ _ _ ‘ AND jahr > 2000 ; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 56. 3. DML - Linguagem de Manipulação de Dados d4) consulta de dados | WHERE ... outros... Além do LIKE existem ainda outros operadores que podem ser usados como critério na utilização da cláusula WHERE: BETWEEN / NOT BETWEEN IS NULL / IS NOT NULL Ex. SELECT * FROM CDs WHERE jahr BETWEEN 2000 AND 2001 ; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 57. 3. DML - Linguagem de Manipulação de Dados d4) consulta de dados | WHERE | AND OR Podemos ainda juntar diversos critérios com os operadores AND e OR: Exemplo com o operador AND (E): SELECT BookName , Category , InStock , OnOrder FROM Books WHERE Category= ’ Fiction ’ AND ( InStock+OnOrder ) > 40 ORDER BY BookName; Exemplo com o operador OR (OU) e o símbolo diferente ( < > ) SELECT BookName , Category , InStock , OnOrder FROM Books WHERE InStock > 30 OR OnOrder < > 60 ORDER BY BookName; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 58. 3. DML - Linguagem de Manipulação de Dados d2) consulta de dados | SELECT LIMIT Caso o resultado da consulta tenha demasiados registos, o programador poderá especificar um limite máximo: SELECT campo1, campo2, ... FROM nomedaTabela LIMIT numeroMáximo ; Caso não queiramos começar a consulta a partir do primeiro registo mas avançar X registos (ideal quando se quer dividir o resultado por páginas), utilizamos a seguinte estrutura: SELECT campo1, campo2, ... FROM nomedaTabela LIMIT offset , numeroMáximo ; ou SELECT campo1, campo2, ... FROM nomedaTabela LIMIT numeroMáximo OFFSET numeroRegInicial ; Exemplos implementados das duas formas mas com o mesmo resultado final: SELECT * FROM student LIMIT 5 , 10 || SELECT * FROM student LIMIT 10 OFFSET 5 No exemplo, a consulta vai mostrar no máximo 10 registos, e começa a contar a partir do 5º registo da tabela em diante. Ou seja, se todos os registos tivessem um campo idStudent com números de 1 a 100... mostraria os alunos onde idStudent fosse entre 6 e 15. Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 59. 3. DML - Linguagem de Manipulação de Dados e) consulta de dados | COUNT Por vezes há a necessidade de contar registos. Nesses casos utiliza-se a função COUNT. Exemplo: SELECT count ( * ) FROM cds; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 60. 3. DML - Linguagem de Manipulação de Dados f) consulta de dados | GROUP BY Podemos agrupar dados utilizando a cláusula GROUP BY que permite unir numa única linha todas as linhas selecionadas que possuem os mesmos valores. Exemplo: aqui vão ser agrupados os registos cujo intérprete se repita SELECT interpret , count ( interpret ) FROM cds GROUP BY interpret; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 61. 3. DML - Linguagem de Manipulação de Dados g) consulta de dados | DISTINCT Por vezes há necessidade de ignorar registos com valores duplicados. Nesses casos podemos utilizar a função DISTINCT. SELECT DISTINCT nomeCampo FROM nomeTabela; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 62. 3. DML - Linguagem de Manipulação de Dados h) consulta de dados | FUNCTIONS Os SGBDs actuais suportam diversas funções de cálculo estatístico simples como: Ex. de utilização: SELECT SUM (Amount) AS SumOfAmount COUNT (Amount) AS CountOfAmount AVG (Amount) AS AvgOfAmount MIN (Amount) AS MinOfAmount MAX (Amount) AS MaxOfAmount FROM SALES; Resultado do exemplo apresentado: Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 63. 3. DML - Linguagem de Manipulação de Dados actualização de dados | UPDATE Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 64. 3. DML - Linguagem de Manipulação de Dados i) actualização de dados | UPDATE O comando UPDATE serve então para efectuar uma actualização a um registo e pode ser realizado sem a cláusula WHERE. No entanto, é a cláusula WHERE que vai definir exactamente qual/quais é/serão os registos a serem ACTUALIZADOS. Caso seja omitido, TODOS OS REGISTOS SERÃO ACTUALIZADOS POR IGUAL!! Sintaxe de utilização: UPDATE nomeTabela SET nomeColuna1=valor1 [, nomeColuna2=valor2 ...] [WHERE condição]; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 65. 3. DML - Linguagem de Manipulação de Dados i) actualização de dados | UPDATE Exemplo: Vamos alterar o nome do intérprete Groove Armada por Groovy em todos os registos da tabela CDs. UPDATE cds SET interpret = ' Groovy ' WHERE interpret = ' Groove Armada ' ; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 66. 3. DML - Linguagem de Manipulação de Dados i) actualização de dados | UPDATE Outros exemplos: UPDATE student SET address = ' welling street ' WHERE name = ' jack ' ; ou UPDATE student SET marks=marks+2 WHERE name = ' david ' ; E se a actualização for em duas ou mais tabelas em simultâneo? UPDATE tabela1, tabela2 , ... SET tabela1.Quantity = tabela1.Quantity + 1 , tabela2.InStock = tabela2.InStock - 1 WHERE tabela1.BookID = tabela2.BookID AND tabela1.OrderID = 1002 ; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 67. Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 68. 3. DML - Linguagem de Manipulação de Dados eliminação de dados | DELETE Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 69. 3. DML - Linguagem de Manipulação de Dados j) eliminação de dados | DELETE O comando DELETE serve então para apagar registos das tabelas e pode ser utilizado sem o WHERE. No entanto, neste caso, todas as linhas da tabela indicada serão excluídas!! Portanto, vamos utilizar o WHERE quando desejamos eliminar os registros que obedeçam a uma certa condição. Sintaxe de utilização: DELETE FROM nomeTabela [WHERE condição]; [LIMIT numeroLinhas] Exemplo 1) DELETE FROM Clientes; Neste exemplo 1) seriam eliminados TODOS os registros da tabela Clientes na medida em que não foi especificado nenhum critério (WHERE). Exemplo 2) DELETE FROM student WHERE name = ' michael ' LIMIT 10 ; Já no exemplo 2, serão apagados no máximo 10 registos cujo name tenha o valor michael Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 70. Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 71. 3. DML - Linguagem de Manipulação de Dados operadores lógicos Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 72. 3. DML - Linguagem de Manipulação de Dados k) operadores lógicos Uma vez que estamos a utilizar o SGBD MySQL nas aulas, o MySQL suporta os seguintes operadores lógicos: AND ( && ) OR ( || ) NOT ( ! ) Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 73. 3. DML - Linguagem de Manipulação de Dados k) operadores lógicos | AND (&&) The logical AND (&&) operator indicates whether the both operands are true. Lets see a statement using AND operator. Sintaxe de utilização: SELECT studid, name FROM student WHERE marks > 80 AND marks < 100 ; ou SELECT studid, name FROM student WHERE marks > 80 && marks < 100 ; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 74. 3. DML - Linguagem de Manipulação de Dados k) operadores lógicos | OR ( | | ) The logical OR ( | | ) operator indicates whether the both operands are true. Lets see a statement using AND operator. Exemplo de utilização: SELECT name, marks, address FROM student WHERE name like ' a% ' OR name like ' s% ' ; ou SELECT name, marks, address FROM student WHERE name like ' a% ' | | name like ' s% ' ; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 75. 3. DML - Linguagem de Manipulação de Dados k) operadores lógicos | NOT ( ! ) The logical NOT ( ! ) operator have only one operand and it returns the inverse of the value. Exemplo de utilização: SELECT * FROM cds WHERE jahr != 1999; ou SELECT * FROM cds WHERE NOT ( jahr = 1999 ); ou SELECT * FROM cds WHERE ! ( jahr = 1999 ); Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 76. Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 77. 3. DML - Linguagem de Manipulação de Dados consultas com JUNÇÕES DE TABELAS Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 78. 3. DML - Linguagem de Manipulação de Dados l) consultas c/ junção tabelas INNER JOIN Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 79. 3. DML - Linguagem de Manipulação de Dados l) consultas c/ junção tabelas | INNER JOIN Caso exista uma relação entre as duas tabelas (1-1, 1-N), podemos fazer a consulta cujo resultado mostra APENAS registos de ambas as tabelas que estejam unidos por uma chave (chave primária e chave estrangeira). Exemplo de aplicação com as tabelas CARROS e EMPREGADOS, onde cada empregado (tabela EMPREGADOS) pode ter associado um carro (da tabela CARROS) via campo chave idCarro Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 80. 3. DML - Linguagem de Manipulação de Dados l) consultas c/ junção tabelas | INNER JOIN SELECT EMPREGADOS.nomeEmpregado, EMPREGADOS.funcao, CARROS.fabricante, CARROS.modelo FROM CARROS INNER JOIN EMPREGADOS ON CARROS.idCarro = EMPREGADOS.idCarro ; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 81. 3. DML - Linguagem de Manipulação de Dados l) consultas c/ junção tabelas | INNER JOIN Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 82. 3. DML - Linguagem de Manipulação de Dados l) consultas c/ junção tabelas LEFT JOIN Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 83. 3. DML - Linguagem de Manipulação de Dados l) consultas c/ junção tabelas | LEFT JOIN Neste caso, com o LEFT JOIN são obtidos TODOS os carros, porque a primeira tabela referenciada no JOIN (LEFT) é a tabela CARROS, e os registos que existirem relacionados com esses carros na tabela de EMPREGADOS. Para os carros que estão atribuídos a um empregado, a respectiva informação é incluída na tabela. Os carros que não estão atribuidos, os campos nomeEmpregado e funcao aparecem vazios (NULL) SELECT EMPREGADOS.nomeEmpregado, EMPREGADOS.funcao, CARROS.fabricante, CARROS.modelo FROM CARROS LEFT JOIN EMPREGADOS ON CARROS.idCarro = EMPREGADOS.idCarro ; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 84. 3. DML - Linguagem de Manipulação de Dados l) consultas c/ junção tabelas | LEFT JOIN Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 85. 3. DML - Linguagem de Manipulação de Dados l) consultas c/ junção tabelas RIGHT JOIN Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 86. 3. DML - Linguagem de Manipulação de Dados l) consultas c/ junção tabelas | RIGHT JOIN Neste caso, com o RIGHT JOIN são obtidos TODOS os empregados, porque a segunda tabela referenciada no JOIN (RIGHT) é a tabela EMPREGADOS. Para os funcionários a que está atribuído um carro, a respectiva informação é incluída na tabela. Naqueles funcionários que têm o campo CarNo na tabela EMPLOYEES, os campos Make e Model aparecem por consequência vazios... SELECT EMPREGADOS.nomeEmpregado, EMPREGADOS.funcao, CARROS.fabricante, CARROS.modelo FROM CARROS RIGHT JOIN EMPREGADOS ON CARROS.idCarro = EMPREGADOS.idCarro ; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 87. 3. DML - Linguagem de Manipulação de Dados l) consultas c/ junção tabelas | RIGHT JOIN Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 88. Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 89. 3. DML - Linguagem de Manipulação de Dados transacções Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 90. 3. DML - Linguagem de Manipulação de Dados n) transacções | conceito Uma transacção num SGBD é uma sequência de instruções que deverá ser lida como uma instrução indivisível. Todo o trabalho realizado pelas várias instruções deverá ser completado ou então não poderá ser feito, mas nunca deverá ficar uma parte feita e outra não. (definição e exemplo em http://www.php-pt.com/index.php? option=com_content&task=view&id=65&Itemid=28) Sintaxe: START TRANSACTION ; instrucções de SQL ; [ ROLLBACK ; ] COMMIT ; Ex. Imaginemos uma transferência de 1000€ da bancária da conta 2 para a conta 1 START TRANSACTION; UPDATE contas SET saldo = saldo – 1000 WHERE numero_conta = 2; UPDATE contas SET saldo = saldo + 1000 WHERE numero_conta = 1; Caso algo corresse mal, poderíamos anular esta transacção ROLLBACK; Caso tudo tivesse corrido bem: COMMIT; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 91. Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 92. 3. DML - Linguagem de Manipulação de Dados integridade referencial Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 93. 3. DML - Linguagem de Manipulação de Dados m) integridade referencial | conceitos No MySQL também é possível propagar a integridade referencial entre os registos de tabelas relacionadas entre si. Essa propagação pode acontecer em dois momentos diferentes: Quando acontece uma ACTUALIZAÇÃO do valor de uma chave primária (PRIMARY KEY); Quando há uma ELIMINAÇÃO de um registo com um campo cuja chave primária está envolvida em relações noutras tabelas (como chave estrangeira - FOREIGN KEY). Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 94. 3. DML - Linguagem de Manipulação de Dados m) integridade referencial | conceitos Quando o valor de um campo que é chave primária (primary key) for alterado ou o registo em si for simplesmente apagado e essa chave deixar de existir, o SGBD poderá providenciar uma destas cinco medidas que recairão sobre todos os registos que contenham a chave primária sob a qual está a recair a operação de modificação/eliminação como chave estrangeira - foreign key: 1. RESTRICT 2. CASCADE 3. SET NULL Pre 4. NO ACTION 50 50 50 50 Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 95. 3. DML - Linguagem de Manipulação de Dados m) integridade referencial | RESTRICT 1. RESTRICT Enquanto houver registos na base de dados cuja chave estrangeira é a chave primária da tabela sobre a qual está a recair a operação de actualização / eliminação, a dita operação será sempre abortada. Assim, esta medida obriga a que todas as ocorrências dessa chave sejam apagadas primeiro. Exemplo: Se tentarmos apagar o produto Cadeira da tabela PRODUTOS, uma vez que há registos na tabela ENCOM_PROD Pre com ID_Produto igual a 1, o SGBD não 50 50 será deixará alterar o ID_Produto de 1 50 50 para outro número nem permitirá que o produto Cadeira (com o ID_Produto 1) seja apagado da tabela PRODUTOS! Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 96. 3. DML - Linguagem de Manipulação de Dados m) integridade referencial | CASCADE 2. CASCADE Como o nome indica, aqui a propagação é efectuada em CASCATA. Assim, esta medida obriga a que o SGBD efectue a actualização do novo valor da chave em todos os registos relacionados ou efectue a eliminação de todas as ocorrências que tenham referência a essa chave. Exemplo: Se tentarmos apagar o produto Cadeira da tabela PRODUTOS, uma vez que há registos na tabela ENCOM_PROD 44 com ID_Produto igual a 1, o SGBD irá Pre 50 apagar todos os registos da tabela 50 50 ENCOM_PROD que tenham como ID_ 44 50 Produto o número 1. Caso contrário, ficariam encomendas com referência a um produto que já não existia... (órfão!) Em caso de uma actualização do valor ID_Produto da Cadeira da tabela PRODUTOS (de 1 para 100 por exemplo), TODOS os registos da tabela ENCOM_PROD onde actualmente têm ID_PRoduto igual a 1, seriam actualizados pelo SGBD para 100. Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 97. 3. DML - Linguagem de Manipulação de Dados m) integridade referencial | SET NULL 3. SET NULL Neste caso, o SGBD deixa que os valores dos campos chave sejam modificados ou mesmo eliminados. No entanto, o valor das chaves que fazem referência a este campo terão o seu valor actualizado para NULL. Útil pois posteriormente podemos fazer uma consulta e averiguar que registos têm referências a chaves que já não existem (contêm valor NULL) e poderão depois ser tratados da forma que se achar conveniente - SELECT * FROM nomeTabelaRelacionada WHERE nomeCampoChaveEstrangeira is NULL; NULL NULL Pre NULL 50 50 50 50 Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 98. 3. DML - Linguagem de Manipulação de Dados m) integridade referencial | NO ACTION 4. NO ACTION Neste caso, o SGBD “fecha os olhos” ao erro grave de quebra de integridade que está a acontecer... não acontece nada aos registos que têm referência a esta chave que acabou de ser alterada ou apagada. Esta situação será de eviar na medida em que haverá registos que vão ficar orfãos! Senão vejamos: Se apagarmos o PRODUTO com ID_Produto 2 da tabela PRODUTOS ( mesa de sala ), vai continuar a haver registos referentes a esse produto perdidos e sem “pai” na tabela ENCOM_PROD! Pre 50 50 50 Qual é o nome do produto 50 com ID_Produto = 2?! Não existe nenhum produto com ID_Produto = 2... Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 99. 3. DML - Linguagem de Manipulação de Dados m) integridade referencial | SET DEFAULT 4. SET DEFAULT Ainda não suportado pelo SGBD MySQL!! Na prática acontece quase o mesmo do que na opção SET NULL mas em vez dos valores da chave estrangeira ficarem vazios (NULL) ficarão com o seu valor predefinido (DEFAULT). Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 100. 3. DML - Linguagem de Manipulação de Dados m) integridade referencial | revisão fk A chave estrangeira (foreign key) é uma cláusula que deve ser incluída quando possuímos duas tabelas relacionadas numa base de dados. Através da chave estrangeira estabelecemos as relações entre duas ou mais tabelas. A chave estrangeira desta forma referencía o campo que é chave primária na tabeça relacionada. CREATE TABLE student ( studID INT PRIMARY KEY , name VARCHAR(30) , address VARCHAR(40) , FOREIGN KEY ( campoChaveEstrangeira ) REFERENCES Nome_outraTabela ( Nome_da_Chave ) ) ENGINE = InnoDB ; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 101. 3. DML - Linguagem de Manipulação de Dados m) integridade referencial | revisão fk Implementando a chave estrangeira através do método de CONSTRAINT: CREATE TABLE student ( studID INT PRIMARY KEY , name VARCHAR(30) , address VARCHAR(40) , class INT , CONSTRAINT fk_nomeConstricao FOREIGN KEY ( CampoChaveEstrangeira ) REFERENCES Nome_outraTabela ( Nome_da_Chave ) ) ENGINE = InnoDB ; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 102. 3. DML - Linguagem de Manipulação de Dados m) integridade referencial | implementação No MySQL também é possível propagar a integridade referencial entre os registos de tabelas relacionadas entre si. A sintaxe é a seguinte: [ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT }] [ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT }] Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 103. 3. DML - Linguagem de Manipulação de Dados m) integridade referencial | implementação Implementando a propagação da ELIMINAÇÃO ( ON DELETE ) através do método de escrita em linha: CREATE TABLE student ( studID INT PRIMARY KEY , name VARCHAR(30) , address VARCHAR(40) , FOREIGN KEY ( campoChaveEstrangeira ) REFERENCES Nome_outraTabela ( Nome_da_Chave ) [ ON DELETE { RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT } ] [ ON UPDATE { RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT } ] ) ENGINE = InnoDB ; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com
  • 104. 3. DML - Linguagem de Manipulação de Dados m) integridade referencial | implementação Implementando a propagação da ELIMINAÇÃO ( ON DELETE ) através do método de CONSTRAINT: CREATE TABLE student ( studID INT PRIMARY KEY , name VARCHAR(30) , address VARCHAR(40) , class INT , CONSTRAINT fk_nomeConstricao FOREIGN KEY ( CampoChaveEstrangeira ) REFERENCES Nome_outraTabela ( Nome_da_Chave ) [ ON DELETE { RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT } ] [ ON UPDATE { RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT } ] ) ENGINE = InnoDB ; Escola Secundária de Adolfo Portela Marco Pinheiro | profmarco550@gmail.com