Escola Secundária de Adolfo Portela 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
May 24, 2015
Escola Secundária de Adolfo Portela
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
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
Módulo VII (opção 1)acesso a bases de dado remotas via web
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
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
1. introdução...
a) materiais de suporte
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
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
1. introdução...
b) introdução | SQL?!
Marco Pinheiro | [email protected] Secundária 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 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 (-->)
1. introdução...
b) introdução | a consola
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
Para termos acesso a uma lista de bases de dados existentes no servidor
show databases;
1. introdução...
c) primeiros passos | show databases
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
Para criar uma nova base de dados
create database NomeDaNovaBaseDados;
1. introdução...
c) primeiros passos | create database
Marco Pinheiro | [email protected] Secundária 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 não foram criadas quaisquer tabelas na dita base de dados...
1. introdução...
c) primeiros passos | use e show
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
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 ;
1. introdução...
c) primeiros passos | describe
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
1. introdução...
d) tipos de dados aceites no SQL
Tipo Abreviação Descrição
INTEIRO INT ou
INTEGERNúmeros inteiros. Existem outros tipos de números inteiros de acordo com o
sgbd utilizado.
REAL DOUBLE ou REAL
Números reais. Permitem armazenar todo tipo de número não inteiro. Existem outros tipos de números reais de acordo com o sgbd utilizado.
CARACTER CHAR (x)Caracter. Permite a inclusão de dados alfanuméricos com tamanho pré-
definido. O número de caracteres é definido entre os parênteses. Ocupa sempre o número indicado (com espaços...)
CARACTER VARIÁVEL VARCHAR (x)
Caracter. Permite a inclusão de dados alfanuméricos. O número de caracteres é 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.
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
1. introdução...
d) tipos de dados aceites no MySQLPara valores numérios inteiros temos:
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
1. introdução...
d) tipos de dados aceites no MySQLPara valores numérios reais temos:
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
1. introdução...
d) tipos de dados aceites no MySQLPara valores do tipo caracter (string) temos:
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
1. introdução...
d) tipos de dados aceites no MySQLPara valores tipo data temos:
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
DDL - Linguagem de Definição de Dados
DML - Linguagem de Manipulação de Dados
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
2. DDL - Linguagem de Definição de Dados
a) definiçãoLinguagem 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).
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
2. DDL - Linguagem de Definição de Dados
a) cad - create, alter, dropCREATEUma 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);
ALTERUma 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...
DROPUma 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...
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
create table
2. DDL - Linguagem de Definição de Dados
a) cad - create, alter, drop
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
2. DDL - Linguagem de Definição de Dados
b1) CREATE TABLECREATE 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 ( 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 | [email protected] Secundária de Adolfo Portela
2. DDL - Linguagem de Definição de Dados
b1) CREATE TABLE | auto-incrementSe 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 )!
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
2. DDL - Linguagem de Definição de Dados
b1) CREATE TABLE | defaultValor predefinido para um campo da tabela
CREATE TABLE student (studID INT,name VARCHAR(30) ,address VARCHAR(40) DEFAULT ‘ Aveiro ‘) ENGINE = InnoDB ;
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
constraints
2. DDL - Linguagem de Definição de Dados
b2) CREATE TABLE | constraints
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
2. DDL - Linguagem de Definição de Dados
b2) create | constraintsHá 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
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
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 ;
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
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.
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 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!
inline:
CREATE TABLE student (studID INT UNIQUE ,name VARCHAR(30) ,address VARCHAR(40)) ENGINE = InnoDB ;
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
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).
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 vários 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 | [email protected] Secundária de Adolfo Portela
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 )
);
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
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 ;
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
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 ;
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
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:
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 | [email protected] Secundária de Adolfo Portela
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
alter table
2. DDL - Linguagem de Definição de Dados
c) cad - create, alter, drop
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
2. DDL - Linguagem de Definição de Dados
c) ALTER TABLEApó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_regraMODIFY Nome_Campo NovoTipo ou Nova_RegraCHANGE Nome_Campo_actual novo_Nome_Campo NovoTipo [e Nova_Regra]DROP Nome_Campo | RegraConstraint];
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
2. DDL - Linguagem de Definição de Dados
c1) ALTER TABLE | ADDPodemos 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_TabelaADD nomeCampo TipoDados ;
ALTER TABLE ClienteADD 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 ClienteADD Nome_Mae VARCHAR ( 60 ) FIRST;
ALTER TABLE ClienteADD Nome_Mae VARCHAR ( 60 ) AFTER nomeCampo;
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
2. DDL - Linguagem de Definição de Dados
c1) ALTER TABLE | ADDCom 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 ClienteADD PRIMARY KEY ( Nome ) ;
Se quisermos que o campo dataNascimento tenha valores entre 1980-12-31 e 2009-12-31, podemos fazer:
ALTER TABLE ClienteADD CHECK ( nome LIKE ‘ a% ‘ ) ;
ou através da forma de declaração da regra de constrangimento via constraint:
ALTER TABLE ClienteADD CONSTRAINT ck_nomeConstricao CHECK ( class BETWEEN 0 AND 10 )
Podiamos inclusivamente adicionar uma chave estrangeira (foreign key):
ALTER TABLE ClienteADD FOREIGN KEY ( campoChaveEstrangeira ) REFERENCES Nome_outraTabela ( Nome_da_Chave )
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
2. DDL - Linguagem de Definição de Dados
c2) ALTER TABLE | MODIFYAltera 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 ’;
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
2. DDL - Linguagem de Definição de Dados
c3) ALTER TABLE | CHANGEAltera 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 ;
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
2. DDL - Linguagem de Definição de Dados
c4) ALTER TABLE | DROPSe 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 | [email protected] Secundária de Adolfo Portela
DROP TABLE
2. DDL - Linguagem de Definição de Dados
d) cad - create, alter, drop
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
2. DDL - Linguagem de Definição de Dados
d) DROP TABLESe desejarmos ELIMINAR uma tabela intera da base de dados:
DROP TABLE nomeTabela;
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
Informação avulsa... :)
mysqldump e show createSe 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
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
DDL - Linguagem de Definição de Dados
DML - Linguagem de Manipulação de Dados
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
a) definiçãoMostrar 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 )
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
inserção de dados | INSERT
Marco Pinheiro | [email protected] Secundária 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 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.
3. DML - Linguagem de Manipulação de Dados
c) inserção de dados | INSERT
Marco Pinheiro | [email protected] Secundária 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 Manipulação de Dados
c) inserção de dados | INSERT | Exemp.
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
consulta de dados | SELECT
Marco Pinheiro | [email protected] Secundária 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 ;
Também aqui podemos utilizar o símbolo * para seleccionar TODOS os campos da tabela:
SELECT * FROM nomedaTabela ;
3. DML - Linguagem de Manipulação de Dados
d1) consulta de dados | SELECT
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
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 ;
3. DML - Linguagem de Manipulação de Dados
d3) consulta de dados | SELECT ORDER BY
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
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;
3. DML - Linguagem de Manipulação de Dados
d3) consulta de dados | SELECT AS (alias)
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
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 ;
3. DML - Linguagem de Manipulação de Dados
d4) consulta de dados | critérios WHERE
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
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 ;
3. DML - Linguagem de Manipulação de Dados
d4) consulta de dados | critérios WHERE
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
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 ;
3. DML - Linguagem de Manipulação de Dados
d4) consulta de dados | WHERE ... LIKE
Marco Pinheiro | [email protected] Secundária 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 Manipulação de Dados
d4) consulta de dados | WHERE ... LIKE
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
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 ;
3. DML - Linguagem de Manipulação de Dados
d4) consulta de dados | WHERE ... LIKE
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
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 ;
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
d4) consulta de dados | WHERE | AND ORPodemos 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;
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
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.
3. DML - Linguagem de Manipulação de Dados
d2) consulta de dados | SELECT LIMIT
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
e) consulta de dados | COUNTPor vezes há a necessidade de contar registos. Nesses casos utiliza-se a função COUNT.
Exemplo:
SELECT count ( * ) FROM cds;
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
f) consulta de dados | GROUP BYPodemos 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;
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
g) consulta de dados | DISTINCTPor vezes há necessidade de ignorar registos com valores duplicados. Nesses casos podemos utilizar a função DISTINCT.
SELECT DISTINCT nomeCampo FROM nomeTabela;
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
h) consulta de dados | FUNCTIONSOs 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:
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
actualização de dados | UPDATE
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
i) actualização de dados | UPDATEO 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];
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
i) actualização de dados | UPDATEExemplo:
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 ' ;
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
i) actualização de dados | UPDATEOutros exemplos:
UPDATE student SET address = ' welling street ' WHERE name = ' jack ' ;ouUPDATE 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 ;
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
eliminação de dados | DELETE
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
j) eliminação de dados | DELETEO 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
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
operadores lógicos
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
k) operadores lógicosUma vez que estamos a utilizar o SGBD MySQL nas aulas, o MySQL suporta os seguintes operadores lógicos:
AND ( && )
OR ( || )
NOT ( ! )
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
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 ;
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
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% ' ;
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
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;ouSELECT * FROM cds WHERE NOT ( jahr = 1999 );ouSELECT * FROM cds WHERE ! ( jahr = 1999 );
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
consultas com JUNÇÕES DE TABELAS
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
l) consultas c/ junção tabelas
INNER JOIN
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
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
3. DML - Linguagem de Manipulação de Dados
l) consultas c/ junção tabelas | INNER JOIN
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
l) consultas c/ junção tabelas | INNER JOIN
SELECT EMPREGADOS.nomeEmpregado, EMPREGADOS.funcao, CARROS.fabricante, CARROS.modeloFROM CARROS INNER JOIN EMPREGADOSON CARROS.idCarro = EMPREGADOS.idCarro ;
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
l) consultas c/ junção tabelas | INNER JOIN
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
l) consultas c/ junção tabelas
LEFT JOIN
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
l) consultas c/ junção tabelas | LEFT JOINNeste 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.modeloFROM CARROS LEFT JOIN EMPREGADOSON CARROS.idCarro = EMPREGADOS.idCarro ;
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
l) consultas c/ junção tabelas | LEFT JOIN
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
l) consultas c/ junção tabelas
RIGHT JOIN
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
l) consultas c/ junção tabelas | RIGHT JOINNeste 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.modeloFROM CARROS RIGHT JOIN EMPREGADOSON CARROS.idCarro = EMPREGADOS.idCarro ;
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
l) consultas c/ junção tabelas | RIGHT JOIN
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
transacções
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
n) transacções | conceitoUma 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çãoROLLBACK;Caso tudo tivesse corrido bem:COMMIT;
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
integridade referencial
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
m) integridade referencial | conceitosNo 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).
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
m) integridade referencial | conceitosQuando 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
4. NO ACTIONPre50505050
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
m) integridade referencial | RESTRICT1. 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 quehá registos na tabela ENCOM_PROD com ID_Produto igual a 1, o SGBD nãoserá deixará alterar o ID_Produto de 1 para outro número nem permitirá que o produto Cadeira (com o ID_Produto 1) seja apagado da tabelaPRODUTOS!
Pre50505050
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
m) integridade referencial | CASCADE2. 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 quehá registos na tabela ENCOM_PROD com ID_Produto igual a 1, o SGBD iráapagar todos os registos da tabelaENCOM_PROD que tenham como ID_
Produto o número 1. Caso contrário, ficariam encomendas comreferê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.
Pre5050505044
44
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
m) integridade referencial | SET NULL3. 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;
Pre50505050
NULL
NULL
NULL
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
m) integridade referencial | NO ACTION4. 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!
Pre50505050Qual é o nome do produto
com ID_Produto = 2?!Não existe nenhum produto com
ID_Produto = 2...
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
m) integridade referencial | SET DEFAULT4. 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).
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
m) integridade referencial | revisão fkA 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 ;
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
m) integridade referencial | revisão fkImplementando 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 ;
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
3. DML - Linguagem de Manipulação de Dados
m) integridade referencial | implementaçãoNo 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 }]
Marco Pinheiro | [email protected] Secundária de Adolfo Portela
Implementando a propagação da ELIMINAÇÃO ( ON DELETE ) através do método de escrita em linha:
3. DML - Linguagem de Manipulação de Dados
m) integridade referencial | implementação
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 | [email protected] Secundária de Adolfo Portela
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 ;
3. DML - Linguagem de Manipulação de Dados
m) integridade referencial | implementação