You are on page 1of 104

Escola Secundria de Adolfo Portela

Redes de
Comunicao
Curso Prossional de Tcnico de Gesto e
Programao de Sistemas Informticos
Ano lectivo 2009-2010 :: 11H
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
Mdulo VII (opo 1)
acesso a bases de dado remotas via web
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
Livros de referncia:
Beginning MySQL; Robert Sheldon, Geoff Moes;
Editora: Wrox; ISBN: 0764579509;
SQL - Structured Query Language - 6 Edio
Actualizada e Aumentada; Lus Manuel Dias
Damas; Editora: FCA; ISBN: 972-722-443-1;
Webliograa de referncia:
http://www.hscripts.com/tutorials/mysql/index.php
http://www.estig.ipbeja.pt/~eidbd/sql.htm
http://www.w3schools.com/sql/default.asp
1. introduo...
a) materiais de suporte
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
SQL (do ingls 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 incio dos anos 70 nos laboratrios da
IBM;
O SGBD que vamos utilizar nas aulas ser o MySQL
1. introduo...
b) introduo | SQL?!
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
A consola (linha de comandos) do MySQL est localizada em mysql\bin e tem o
nome mysql.exe. Para ser iniciado como administrador, mysql -u root
Vai ser na consola que iremos executar todas as operaes de SQL;
Nota: O comando ser apenas executado quando a linha terminar com ; caso contrrio,
sempre que for premida a tecla ENTER efectuada apenas uma quebra de linha (-->)
1. introduo...
b) introduo | a consola
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
Para termos acesso a uma lista de bases de dados existentes no servidor
show databases;
1. introduo...
c) primeiros passos | show databases
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
Para criar uma nova base de dados
create database NomeDaNovaBaseDados;
1. introduo...
c) primeiros passos | create database
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
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 no foram
criadas quaisquer tabelas na dita base de
dados...
1. introduo...
c) primeiros passos | use e show
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
Aps 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 ;
1. introduo...
c) primeiros passos | describe
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
1. introduo...
d) tipos de dados aceites no SQL
Tipo Abreviao
Descrio
INTEIRO
INT ou
INTEGER
Nmeros inteiros. Existem outros tipos de nmeros inteiros de acordo com o
sgbd utilizado.
REAL
DOUBLE ou
REAL
Nmeros reais. Permitem armazenar todo tipo de nmero no inteiro. Existem
outros tipos de nmeros reais de acordo com o sgbd utilizado.
CARACTER
CHAR (x)
Caracter. Permite a incluso de dados alfanumricos com tamanho pr-
definido. O nmero de caracteres definido entre os parnteses. Ocupa
sempre o nmero indicado (com espaos...)
CARACTER
VARIVEL
VARCHAR (x)
Caracter. Permite a incluso de dados alfanumricos. O nmero de caracteres
definido entre os parnteses, porm o nmero de bytes utilizados pelo
campo apenas o especificado (nmero).
DATA
DATE
Data. Existem diversos tipos de datas de acordo com o sgbd utilizado.
BOOLEANO
BOOLEAN
Armazena um bit de informao, utilizado para verdadeiro ou falso.
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
1. introduo...
d) tipos de dados aceites no MySQL
Para valores numrios inteiros temos:
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
1. introduo...
d) tipos de dados aceites no MySQL
Para valores numrios reais temos:
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
1. introduo...
d) tipos de dados aceites no MySQL
Para valores do tipo caracter (string) temos:
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
1. introduo...
d) tipos de dados aceites no MySQL
Para valores tipo data temos:
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
DDL - Linguagem de Definio de Dados
DML - Linguagem de Manipulao de Dados
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
2. DDL - Linguagem de Definio de Dados
a) denio
Linguagem de denio de dados (ou DDL, de Data Definition Language)
um conjunto de comandos dentro do SQL usada para a denio das
estruturas de dados, fornecendo as instrues que permitem a criao,
modicao e remoo das tabelas, assim como criao de ndices (ou
chaves).
Estas instrues SQL permitem denir a estrutura de uma base de dados,
incluindo colunas (campos), tabelas, ndices (chaves), etc.
Entre os principais comandos DDL esto CREATE (criar), ALTER (alterar)
e DROP (apagar).
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
2. DDL - Linguagem de Definio de Dados
a) cad - create, alter, drop
CREATE
Uma declarao CREATE permite a criao de uma nova base de dados, tabela, ndice, ou
consulta armazenada. Entre os principais comandos incluidos esto CREATE DATABASE (criar
base de dados) e CREATE TABLE (criar tabela);
ALTER
Uma declarao ALTER permite alterar um objeto de um base de dados.
Entre os principais comandos esto ALTER TABLE ADD (adicionar uma coluna na tabela),
ALTER TABLE DROP (excluir uma coluna na tabela), entre outros...
DROP
Uma declarao DROP permite remover (destruir) uma base de dados existente, tabela ou
ndice.
Entre os principais comandos includos esto o DROP DATABASE (eliminar uma base de
dados inteira), DROP TABLE (excluir tabela) entre outros...
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
create table
2. DDL - Linguagem de Definio de Dados
a) cad - create, alter, drop
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
2. DDL - Linguagem de Definio de Dados
b1) CREATE TABLE
CREATE TABLE o comando para a criao de tabelas e deve ser seguido pelo nome que
queremos dar tabela;
Dentro do comando, devemos denir os nomes dos campos de acordo com a convenincia
da base de dados, e determinar o tipo de dados que podero ser includos nesse campo.
CREATE TABLE nomeTabela
(
fieldName1 dataType(size) ,
fieldName2 dataType(size)
...
) [ ENGINE = engineUtilizada ] ;
Tipos de "engine" da base de dados no SGBD MySQL:
ENGINE = {BDB | MEMORY | ISAM | INNODB | MERGE | MYISAM}
CREATE TABLE student
(
studID INT ,
name VARCHAR(30) ,
address VARCHAR(40)
) ENGINE = InnoDB ;
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
2. DDL - Linguagem de Definio de Dados
b1) CREATE TABLE | auto-increment
Se desejamos que o valor de um campo seja de auto-incremento (numerao automtica
sequncial) devemos inserir AUTO_INCREMENT na frente do campo pretendido;
Isto pode ser utilizado por exemplo, para automatizar um n que sirva de chave primria 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 denido como chave primria ( PRIMARY KEY )!
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
2. DDL - Linguagem de Definio 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 ;
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
constraints
2. DDL - Linguagem de Definio de Dados
b2) CREATE TABLE | constraints
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
2. DDL - Linguagem de Definio de Dados
b2) create | constraints
H diversas regras de constraint que podem ser aplicadas aos campos que formam uma
tabela.
A sua denio pode ser feita de duas formas: inline ou com a palavra constraint (com a
excepo do NOT NULL que pode apenas ser denida inline)
Eis as mais importantes:
NOT NULL (denido apenas inline)
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
2. DDL - Linguagem de Definio de Dados
b2) create | constraints: not null (nn)
O constrangimento NOT NULL fora um campo a no aceitar valores NULL (vazios), ou seja,
obriga a que este seja sempre preenchido (tal como explicado anteriormente).
Eis um pequeno exemplo onde o constrangimento denido inline:
CREATE TABLE student
(
studID INT NOT NULL ,
name VARCHAR(30) ,
address VARCHAR(40)
) ENGINE = InnoDB ;
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
2. DDL - Linguagem de Definio de Dados
b2) create | constraints: unique (un)
O constrangimento UNIQUE identica de forma nica cada registo da tabela da base de
dados (no permite que o valor se repita).
Tem o mesmo efeito prtico da PRIMARY KEY.
CREATE TABLE student
(
studID INT ,
name VARCHAR(30) ,
address VARCHAR(40) ,
CONSTRAINT un_nomeConstricao UNIQUE ( studID )
) ENGINE = InnoDB ;
Obs 1) O constrangimento PRIMARY KEY implementa automaticamente este UNIQUE;
Obs 2) Podemos ter vrios campos com o constrangimento UNIQUE.
Nota: un_nomeConstricao o nome do constraint. Tipicamente tem um prexo (nn, un, pk,
fk,ck), seguido de underscore e o nome "simblico" para a regra de constrangimento.
Nota2: O MySQL case sensitive (sensvel s maisculas) no nome do constraint!
nn_nomeConstricao e un_nomeconstricao seriam duas regras de constrangimento diferentes!
inline:
CREATE TABLE student
(
studID INT UNIQUE ,
name VARCHAR(30) ,
address VARCHAR(40)
) ENGINE = InnoDB ;
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
2. DDL - Linguagem de Definio de Dados
b2) create | constraints: primary key (pk)
O constrangimento PRIMARY KEY dene a chave primria da tabela.
O valor introduzido no pode ser nem repetido nem nulo (implementa automaticamente os
constrangimentos UNIQUE e NOT NULL).
CREATE TABLE student
(
studID INT AUTO_INCREMENT,
name VARCHAR(30) ,
address VARCHAR(40) ,
CONSTRAINT pk_nomeConstricao PRIMARY KEY ( studID )
) ENGINE = InnoDB ;
O constrangimento PRIMARY KEY implementa automaticamente o UNIQUE.
Lembra-te: podemos ter vrios campos com o constrangimento UNIQUE mas apenas UMA
PRIMARY KEY por tabela.
inline:
CREATE TABLE student
(
studID INT PRIMARY KEY ,
name VARCHAR(30) ,
address VARCHAR(40)
) ENGINE = InnoDB ;
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
2. DDL - Linguagem de Definio 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 )
);
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
2. DDL - Linguagem de Definio de Dados
b2) create | constraints: foreign key (fk)
A chave estrangeira (foreign key) uma clusula que deve ser includa quando possumos
duas tabelas relacionadas numa base de dados.
Atravs da chave estrangeira estabelecemos as relaes entre duas ou mais tabelas.
A chave estrangeira desta forma referenca o campo que chave primria na tabea
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 ;
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
2. DDL - Linguagem de Definio de Dados
b2) create | constraints: foreign key (fk)
Implementando a chave estrangeira atravs do mtodo 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 ;
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
2. DDL - Linguagem de Definio de Dados
b2) create | constraints: check (ck)
Validao dos valores introduzidos ( regra de validao )
Deve ser incluida em campos que estejam DEPOIS da chave primria.
Eis um exemplo para uma regra aplicada ao campo class que s aceita turmas com nmero
compreendido entre 1 e 10:
CREATE TABLE student
(
studID INT PRIMARY KEY ,
name VARCHAR(30) ,
address VARCHAR(40) ,
class INT ,
CONSTRAINT ck_nomeConstricao CHECK
( class BETWEEN 0 AND 10 )
) ENGINE = InnoDB ;
inline:
CREATE TABLE student
(
studID INT PRIMARY KEY ,
name VARCHAR(30) ,
address VARCHAR(40) ,
class INT ,
CHECK ( class BETWEEN 0 AND 10 )
) ENGINE = InnoDB ;
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
alter table
2. DDL - Linguagem de Definio de Dados
c) cad - create, alter, drop
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
2. DDL - Linguagem de Definio de Dados
c) ALTER TABLE
Aps criarmos uma tabela podemos alterar sua estrutura com o uso da clusula ALTER
TABLE. Lembra-te que esta alterao sempre sobre a estrutura da tabela, e no sobre os
dados.
Esta alterao 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 excepo 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
];
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
2. DDL - Linguagem de Definio de Dados
c1) ALTER TABLE | ADD
Podemos utilizar a clusula ADD para adicionar um novo campo tabela.
Para isso, alm do nome, devemos denir tambm 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 especca ( INCIO 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;
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
2. DDL - Linguagem de Definio de Dados
c1) ALTER TABLE | ADD
Com o ADD podemos adicionar tambm regras a um dado campo.
Na nossa tabela, se quisermos que o campo nome seja chave primria, 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 atravs da forma de declarao 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 )
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
2. DDL - Linguagem de Definio de Dados
c2) ALTER TABLE | MODIFY
Altera as especicaes de um campo da tabela (tipo de dados, regras, etc) mas o
nome mantm-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 ;
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
2. DDL - Linguagem de Definio 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
especicar 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 ;
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
2. DDL - Linguagem de Definio 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 ;
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
DROP TABLE
2. DDL - Linguagem de Definio de Dados
d) cad - create, alter, drop
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
2. DDL - Linguagem de Definio de Dados
d) DROP TABLE
Se desejarmos ELIMINAR uma tabela intera da base de dados:
DROP TABLE nomeTabela;
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
Informao avulsa... :)
mysqldump e show create
Se desejarmos EXPORTAR toda a estrutura e o contedo de uma base de dados no
MySQL, devemos proceder da seguinte forma (convm criar um atalho para simplicar 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
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
DDL - Linguagem de Definio de Dados
DML - Linguagem de Manipulao de Dados
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
a) denio
Mostrar os campos (colunas) de uma tabela:
Os principais comandos DML so:
INSERT ( Insero de Dados )
SELECT ( Seleo de Dados )
UPDATE ( Actualizao de Dados )
DELETE ( Eliminao de Dados )
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
insero de dados | INSERT
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
Vamos agora perceber como podemos introduzir novos registos numa tabela da nossa base
de dados. Caso se pretenda preencher todos os campos pela ordem denida na prpria
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
especicar quais so os campos e os respectivos valores. J os campos omitidos cam
com valor NULL.
INSERT INTO nomeTabela (campo1 , campo2 , ... )
VALUES ( valorNumerico1 , ' valorString1 ' , ... ) ;
ou ento assim:
INSERT INTO nomeTabela
SET campo1 = valorNumerico1, campo2 = valorString1 , ... = ... ;
NOTA: strings e datas devero ser delimitadas por aspas. Valores numricos no
necessitam.
3. DML - Linguagem de Manipulao de Dados
c) insero de dados | INSERT
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
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");
3. DML - Linguagem de Manipulao de Dados
c) insero de dados | INSERT | Exemp.
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
consulta de dados | SELECT
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
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 ;
Tambm aqui podemos utilizar o smbolo * para seleccionar TODOS os campos da tabela:
SELECT * FROM nomedaTabela ;
3. DML - Linguagem de Manipulao de Dados
d1) consulta de dados | SELECT
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
Se houver a necessidade de ordenar os registos do resultado de uma consulta, tal pode ser
feito bastando para isso especicar 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 ;
3. DML - Linguagem de Manipulao de Dados
d3) consulta de dados | SELECT ORDER BY
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
Podemos ainda mascarar o nome verdadeiro de um campo da tabela utilizando a funo
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;
3. DML - Linguagem de Manipulao de Dados
d3) consulta de dados | SELECT AS (alias)
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
Por vezes h a necessidade de introduzir clusulas ou critrios na consulta. Utilizamos para
isso o WHERE:
SELECT * FROM nomedaTabela WHERE condio
Exemplo:
SELECT * FROM cds WHERE jahr = 2001 ;
3. DML - Linguagem de Manipulao de Dados
d4) consulta de dados | critrios WHERE
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
Aqui temos um exemplo mais complexo (tem uma condio maior) mas que obedece s
mesmas regras de construo da anterior:
SELECT CDName, Category, InStock+OnOrder-Reserved AS Available
FROM CDs
WHERE ( Category = " Blues " OR Category = " Jazz " )
AND ( InStock+OnOrder-Reserved ) > 20 ;
3. DML - Linguagem de Manipulao de Dados
d4) consulta de dados | critrios WHERE
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
Quando os valores que utilizamos como critrio no so 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 ;
3. DML - Linguagem de Manipulao de Dados
d4) consulta de dados | WHERE ... LIKE
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
Exemplos:
1) vamos procurar todos registos da tabela CDs cujo titulo comece com a letra g
SELECT * FROM CDs WHERE titel LIKE g% ;
3. DML - Linguagem de Manipulao de Dados
d4) consulta de dados | WHERE ... LIKE
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
Exemplos:
2) vamos agora procurar todos registos da tabela CDs cujo titulo no tenha apenas 5 letras
e cujo ano de lanamento (campo jahr) seja superior ao ano 2000
SELECT * FROM CDs WHERE titel NOT LIKE _ _ _ _ _ AND jahr > 2000 ;
3. DML - Linguagem de Manipulao de Dados
d4) consulta de dados | WHERE ... LIKE
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
d4) consulta de dados | WHERE ... outros...
Alm do LIKE existem ainda outros operadores que podem ser usados como critrio na
utilizao da clusula WHERE:
BETWEEN / NOT BETWEEN
IS NULL / IS NOT NULL
Ex.
SELECT * FROM CDs WHERE jahr BETWEEN 2000 AND 2001 ;
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
d4) consulta de dados | WHERE | AND OR
Podemos ainda juntar diversos critrios 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 smbolo diferente ( < > )
SELECT BookName , Category , InStock , OnOrder
FROM Books
WHERE InStock > 30 OR OnOrder < > 60
ORDER BY BookName;
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
Caso o resultado da consulta tenha demasiados registos, o programador poder especicar
um limite mximo:
SELECT campo1, campo2, ... FROM nomedaTabela LIMIT numeroMximo ;
Caso no queiramos comear a consulta a partir do primeiro registo mas avanar X registos
(ideal quando se quer dividir o resultado por pginas), utilizamos a seguinte estrutura:
SELECT campo1, campo2, ... FROM nomedaTabela LIMIT offset , numeroMximo ; ou
SELECT campo1, campo2, ... FROM nomedaTabela LIMIT numeroMximo
OFFSET numeroRegInicial ;
Exemplos implementados das duas formas mas com o mesmo resultado nal:
SELECT * FROM student LIMIT 5 , 10 || SELECT * FROM student LIMIT 10 OFFSET 5
No exemplo, a consulta vai mostrar no mximo 10 registos, e comea a contar a partir do
5 registo da tabela em diante. Ou seja, se todos os registos tivessem um campo idStudent
com nmeros de 1 a 100... mostraria os alunos onde idStudent fosse entre 6 e 15.
3. DML - Linguagem de Manipulao de Dados
d2) consulta de dados | SELECT LIMIT
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
e) consulta de dados | COUNT
Por vezes h a necessidade de contar registos. Nesses casos utiliza-se a funo COUNT.
Exemplo:
SELECT count ( * ) FROM cds;
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
f) consulta de dados | GROUP BY
Podemos agrupar dados utilizando a clusula GROUP BY que permite unir numa nica linha
todas as linhas selecionadas que possuem os mesmos valores.
Exemplo: aqui vo ser agrupados os registos cujo intrprete se repita
SELECT interpret , count ( interpret ) FROM cds GROUP BY interpret;
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
g) consulta de dados | DISTINCT
Por vezes h necessidade de ignorar registos com valores duplicados.
Nesses casos podemos utilizar a funo DISTINCT.
SELECT DISTINCT nomeCampo FROM nomeTabela;
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
h) consulta de dados | FUNCTIONS
Os SGBDs actuais suportam diversas funes de clculo estatstico simples como:
Ex. de utilizao:
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:
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
actualizao de dados | UPDATE
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
i) actualizao de dados | UPDATE
O comando UPDATE serve ento para efectuar uma actualizao a um registo e pode ser
realizado sem a clusula WHERE.
No entanto, a clusula WHERE que vai denir exactamente qual/quais /sero os registos a
serem ACTUALIZADOS. Caso seja omitido, TODOS OS REGISTOS SERO
ACTUALIZADOS POR IGUAL!!
Sintaxe de utilizao:
UPDATE nomeTabela SET
nomeColuna1=valor1 [, nomeColuna2=valor2 ...]
[WHERE condio];
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
i) actualizao de dados | UPDATE
Exemplo:
Vamos alterar o nome do intrprete Groove Armada por Groovy em todos os registos da tabela CDs.
UPDATE cds SET interpret = ' Groovy ' WHERE interpret = ' Groove Armada ' ;
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
i) actualizao 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 actualizao for em duas ou mais tabelas em simultneo?
UPDATE tabela1, tabela2 , ...
SET
tabela1.Quantity = tabela1.Quantity + 1 ,
tabela2.InStock = tabela2.InStock - 1
WHERE tabela1.BookID = tabela2.BookID
AND tabela1.OrderID = 1002 ;
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
eliminao de dados | DELETE
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
j) eliminao de dados | DELETE
O comando DELETE serve ento para apagar registos das tabelas e pode ser utilizado sem o
WHERE. No entanto, neste caso, todas as linhas da tabela indicada sero excludas!! Portanto,
vamos utilizar o WHERE quando desejamos eliminar os registros que obedeam a uma certa
condio.
Sintaxe de utilizao:
DELETE FROM nomeTabela
[WHERE condio];
[LIMIT numeroLinhas]
Exemplo 1)
DELETE FROM Clientes;
Neste exemplo 1) seriam eliminados TODOS os registros da tabela Clientes na medida em
que no foi especicado nenhum critrio (WHERE).
Exemplo 2)
DELETE FROM student WHERE name = ' michael ' LIMIT 10 ;
J no exemplo 2, sero apagados no mximo 10 registos cujo name tenha o valor michael
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
operadores lgicos
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
k) operadores lgicos
Uma vez que estamos a utilizar o SGBD MySQL nas aulas, o MySQL suporta os seguintes
operadores lgicos:
AND ( && )
OR ( || )
NOT ( ! )
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
k) operadores lgicos | AND (&&)
The logical AND (&&) operator indicates whether the both operands are true. Lets see a
statement using AND operator.
Sintaxe de utilizao:
SELECT studid, name FROM student WHERE marks > 80 AND marks < 100 ;
ou
SELECT studid, name FROM student WHERE marks > 80 && marks < 100 ;
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
k) operadores lgicos | OR ( | | )
The logical OR ( | | ) operator indicates whether the both operands are true. Lets see a statement
using AND operator.
Exemplo de utilizao:
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% ' ;
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
k) operadores lgicos | NOT ( ! )
The logical NOT ( ! ) operator have only one operand and it returns the inverse of the value.
Exemplo de utilizao:
SELECT * FROM cds WHERE jahr != 1999;
ou
SELECT * FROM cds WHERE NOT ( jahr = 1999 );
ou
SELECT * FROM cds WHERE ! ( jahr = 1999 );
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
consultas com
JUNES DE TABELAS
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
l) consultas c/ juno tabelas
INNER JOIN
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
Caso exista uma relao 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 primria e
chave estrangeira).
Exemplo de aplicao com as tabelas CARROS e EMPREGADOS, onde cada empregado
(tabela EMPREGADOS) pode ter associado um carro (da tabela CARROS) via campo chave idCarro
3. DML - Linguagem de Manipulao de Dados
l) consultas c/ juno tabelas | INNER JOIN
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
l) consultas c/ juno tabelas | INNER JOIN
SELECT EMPREGADOS.nomeEmpregado, EMPREGADOS.funcao, CARROS.fabricante, CARROS.modelo
FROM CARROS INNER JOIN EMPREGADOS
ON CARROS.idCarro = EMPREGADOS.idCarro ;
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
l) consultas c/ juno tabelas | INNER JOIN
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
l) consultas c/ juno tabelas
LEFT JOIN
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
l) consultas c/ juno tabelas | LEFT JOIN
Neste caso, com o LEFT JOIN so 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 esto atribudos a um empregado, a respectiva informao includa na
tabela. Os carros que no esto 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 ;
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
l) consultas c/ juno tabelas | LEFT JOIN
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
l) consultas c/ juno tabelas
RIGHT JOIN
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
l) consultas c/ juno tabelas | RIGHT JOIN
Neste caso, com o RIGHT JOIN so obtidos TODOS os empregados, porque a segunda tabela
referenciada no JOIN (RIGHT) a tabela EMPREGADOS.
Para os funcionrios a que est atribudo um carro, a respectiva informao includa na
tabela. Naqueles funcionrios que tm o campo CarNo na tabela EMPLOYEES, os campos
Make e Model aparecem por consequncia vazios...
SELECT EMPREGADOS.nomeEmpregado, EMPREGADOS.funcao, CARROS.fabricante, CARROS.modelo
FROM CARROS RIGHT JOIN EMPREGADOS
ON CARROS.idCarro = EMPREGADOS.idCarro ;
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
l) consultas c/ juno tabelas | RIGHT JOIN
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
transaces
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
n) transaces | conceito
Uma transaco num SGBD uma sequncia de instrues que dever ser lida como uma
instruo indivisvel. Todo o trabalho realizado pelas vrias instrues dever ser completado
ou ento no poder ser feito, mas nunca dever car uma parte feita e outra no. (denio e
exemplo em http://www.php-pt.com/index.php?
option=com_content&task=view&id=65&Itemid=28)
Sintaxe:
START TRANSACTION ;
instruces de SQL ;
[ ROLLBACK ; ]
COMMIT ;
Ex. Imaginemos uma transferncia de 1000! da bancria 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, poderamos anular esta transaco
ROLLBACK;
Caso tudo tivesse corrido bem:
COMMIT;
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
integridade referencial
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
m) integridade referencial | conceitos
No MySQL tambm possvel propagar a integridade referencial entre os registos de tabelas
relacionadas entre si.
Essa propagao pode acontecer em dois momentos diferentes:
Quando acontece uma ACTUALIZAO do valor de uma chave primria (PRIMARY KEY);
Quando h uma ELIMINAO de um registo com um campo cuja chave primria est
envolvida em relaes noutras tabelas (como chave estrangeira - FOREIGN KEY).
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
m) integridade referencial | conceitos
Quando o valor de um campo que chave primria (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 recairo sobre todos os registos que contenham a chave primria
sob a qual est a recair a operao de modicao/eliminao como chave estrangeira -
foreign key:
1. RESTRICT
2. CASCADE
3. SET NULL
4. NO ACTION
Pre
50
50
50
50
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
m) integridade referencial | RESTRICT
1. RESTRICT
Enquanto houver registos na base de dados cuja chave estrangeira a chave primria da tabela
sobre a qual est a recair a operao de actualizao / eliminao, a dita operao ser sempre
abortada.

Assim, esta medida obriga a que todas as ocorrncias dessa chave sejam apagadas primeiro.
Exemplo:
Se tentarmos apagar o produto Cadeira
da tabela PRODUTOS, uma vez que
h registos na tabela ENCOM_PROD
com ID_Produto igual a 1, o SGBD no
ser deixar alterar o ID_Produto de 1
para outro nmero nem permitir que o
produto Cadeira (com o ID_Produto 1) seja apagado da tabela
PRODUTOS!
Pre
50
50
50
50
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
m) integridade referencial | CASCADE
2. CASCADE
Como o nome indica, aqui a propagao efectuada em CASCATA.

Assim, esta medida obriga a que o SGBD efectue a actualizao do novo valor da chave em todos
os registos relacionados ou efectue a eliminao de todas as ocorrncias que tenham referncia a
essa chave.
Exemplo:
Se tentarmos apagar o produto Cadeira
da tabela PRODUTOS, uma vez que
h registos na tabela ENCOM_PROD
com ID_Produto igual a 1, o SGBD ir
apagar todos os registos da tabela
ENCOM_PROD que tenham como ID_
Produto o nmero 1. Caso contrrio, cariam encomendas com
referncia a um produto que j no existia... (rfo!)
Em caso de uma actualizao do valor ID_Produto da Cadeira da tabela PRODUTOS (de 1 para
100 por exemplo), TODOS os registos da tabela ENCOM_PROD onde actualmente tm
ID_PRoduto igual a 1, seriam actualizados pelo SGBD para 100.
Pre
50
50
50
50
44
44
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
m) integridade referencial | SET NULL
3. SET NULL
Neste caso, o SGBD deixa que os valores dos campos chave sejam modicados ou mesmo
eliminados.
No entanto, o valor das chaves que fazem referncia a este campo tero o seu valor actualizado
para NULL. til pois posteriormente podemos fazer uma consulta e averiguar que registos tm
referncias a chaves que j no existem (contm valor NULL) e podero depois ser tratados da
forma que se achar conveniente - SELECT * FROM nomeTabelaRelacionada WHERE
nomeCampoChaveEstrangeira is NULL;
Pre
50
50
50
50
NULL
NULL
NULL
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao 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... no acontece nada aos registos que tm referncia a esta chave que acabou de ser
alterada ou apagada.
Esta situao ser de eviar na medida em que haver registos que vo car orfos! Seno
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
50
Qual o nome do produto
com ID_Produto = 2?!
No existe nenhum produto com
ID_Produto = 2...
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
m) integridade referencial | SET DEFAULT
4. SET DEFAULT
Ainda no suportado pelo SGBD MySQL!!
Na prtica acontece quase o mesmo do que na opo SET NULL mas em vez dos valores da
chave estrangeira carem vazios (NULL) caro com o seu valor predenido (DEFAULT).
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
m) integridade referencial | reviso fk
A chave estrangeira (foreign key) uma clusula que deve ser includa quando possumos
duas tabelas relacionadas numa base de dados.
Atravs da chave estrangeira estabelecemos as relaes entre duas ou mais tabelas.
A chave estrangeira desta forma referenca o campo que chave primria na tabea
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 ;
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
m) integridade referencial | reviso fk
Implementando a chave estrangeira atravs do mtodo 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 ;
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
3. DML - Linguagem de Manipulao de Dados
m) integridade referencial | implementao
No MySQL tambm possvel 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 }]
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
Implementando a propagao da ELIMINAO ( ON DELETE ) atravs do mtodo de escrita
em linha:
3. DML - Linguagem de Manipulao de Dados
m) integridade referencial | implementao
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 ;
Marco Pinheiro | profmarco550@gmail.com Escola Secundria de Adolfo Portela
Implementando a propagao da ELIMINAO ( ON DELETE ) atravs do mtodo 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 ;
3. DML - Linguagem de Manipulao de Dados
m) integridade referencial | implementao

You might also like