Escolar Documentos
Profissional Documentos
Cultura Documentos
Tipos de Dados:
TINYINT = Número inteiro muito pequeno (tiny).
SMALLINT = Número inteiro pequeno.
MEDIUMINT = Número inteiro de tamanho médio.
INT = Número inteiro de tamanho comum.
BIGINT = Número inteiro de tamanho grande.
FLOAT = Número de ponto flutuante de precisão simples (32 bits).
DOUBLE = Número de ponto flutuante de precisão dupla (64 bits).
DECIMAL (N,D) = Número decimal, com N = inteiro e D = Decimal.
Tipos de Tempo:
DATE = valor referente a uma data no formato ‘AAAA-MM-DD’.
TIME = Valor horário no formato ‘hh:mm:ss’ (hora:minutos:segundos).
TIMESTAMP = “Timestamp” é uma sequência de caracteres ou informação codificada que
identifica uma marca temporal ou um dado
momento em que um evento ocorreu. Tem o formato ‘AAAA-MM-DD hh:mm:ss’.
YEAR = Armazena um ano no formato ‘CCYY’ ou ‘YY’
ALTERAÇÃO DE COLUNAS:
Às vezes, surge a necessidade de aumentar o tamanho ou o tipo de dados de uma
coluna. Quando isso acontece, podemos fazer com o
comando ALTER.
1. Criação de Tabelas
CREATE TABLE ‘teste2’.‘produto’ (
‘PRODUTOCODIGO’ INT NOT NULL,
‘PRODUTODESCRICAO’ VARCHAR(45) NULL);
a) Alteração da coluna de Tabelas
Na alteração vamos mudar o tamanho da coluna ‘PRODUTODESCRICAO’ VARCHAR(45) NULL)
para ‘PRODUTODESCRICAO’ VARCHAR(50)
NULL); para isso, vamos executar a seguinte sintaxe:
ALTER TABLE ‘teste2’.‘produto’
CHANGE COLUMN ‘PRODUTODESCRICAO’ ‘PRODUTODESCRICAO’ VARCHAR(50) NULL DEFAULT NULL.
EXCLUSÃO DE COLUNAS:
Às vezes, surge a necessidade de excluir uma coluna. Podemos fazer com o comando
DROP.
ALTER TABLE ‘teste2’. ‘produto’
DROP COLUMN ‘PRODUTODESCRICAO’.
INCLUIR UMA COLUNA:
Para incluir uma coluna ou mais numa tabela já existente, podemos fazer com o
comando CHANGE.
ALTER TABLE ‘teste2’.‘produto’
CHANGE COLUMN ‘PRODUTODESCRICAO’ VARCHAR(60) NULL.
CRIAÇÃO DE TABELAS:
A tabela nasce com um nome e se compõe de linhas (Registro) e colunas (Campos);
contém definições de tamanho e tipo de cada coluna.
Contém nomes de colunas, definição de coluna chave, e definição de chaves
estrangeiras. As linhas e as colunas servem de referência para
armazenar os conteúdos dos dados.
Chave Primária (Primary Key) é uma ou mais colunas com valores que são únicos
dentro da tabela e, por isso, podem ser usados para
identificar as linhas dessa tabela.
Há uma série de parâmetros que são considerados, no momento de criação de uma
tabela:
1. UNSIGNED – Modificador que faz com que uma coluna aceite apenas números
positivos (sem sinal). Somente para tipo “integer”.
2. ZEROFILL – Adiciona zeros de preenchimento à esquerda para completar um número;
por exemplo, se o campo tem 5 posições e temos o
conteúdo de 235, o resultado fica 00235.
3. AUTO_INCREMENT – Campo que soma automática e sequencialmente mais 1 ao conteúdo
anterior.
4. ON DELETE NO ACTION - Exclui somente o pai sem afetar o(s) registro(s) filhos ou
relacionados em outras entidades.
5. ON DELETE CASCADE – É a exclusão com efeito realizado em cascata, quando se
exclui o registro de uma tabela principal, também exclui
todos os registros de outras tabelas com conteúdo associado por chaves estrangeiras
à tabela principal.
6. CASCADE: A opção CASCADE permite excluir ou atualizar os registros relacionados
presentes na tabela filha automaticamente, quando um
registro da tabela pai for atualizado (ON UPDATE) ou excluído (ON DELETE). É a
opção mais comumente aplicada.
7. RESTRICT: Impede que ocorra a exclusão ou a atualização de um registro da tabela
principal, caso haja alguma tabela com conteúdo
associado à tabela principal com chave estrangeira. A verificação de integridade
referencial é realizada antes de tentar executar a instrução
UPDATE ou DELETE.
8. SET NULL: Esta opção é usada para definir com o valor NULL o campo na tabela
filha, quando um registro da tabela pai for atualizado ou
excluído.
9. NO ACTION: Essa opção equivale à opção RESTRICT, porém a verificação de
integridade referencial é executada após a tentativa de alterar
a tabela. É a opção padrão, aplicada caso nenhuma das opções seja definida na
criação da chave estrangeira.
10. SET DEFAULT: “Configura Padrão” – Define um valor padrão na coluna na tabela
filha, aplicado quando um registro da tabela pai for
atualizado ou excluído.
11. PRIMARY KEY (PK): Esta restrição cria um índice único para um conjunto de
colunas ou uma coluna para Chave Primária.
12. UNIQUE: Esta Contraint determina que uma coluna não poderá ter duas linhas com
o mesmo valor.
13. FOREIGN KEY (FK ou Chave Estrangeira): Determina uma ou mais colunas, a qual se
considera o seu conteúdo como único dentro da
tabela.
14. CHECK: Especifica uma condição lógica que condiciona para efetivar o salvamento
da tabela.
15. NOT NULL: Determina que a coluna tem preenchimento obrigatório.
Um exemplo para criação de tabela (abaixo) explicado:
CREATE TABLE ‘test’.‘alunoxdisciplina’ (
‘test’ class="">‘test’ - corresponde ao nome do banco de dados ou “schema”
‘alunoxdisciplina’ - Corresponde o nome da tabela
‘Aluno_CPF’ INT(10) UNSIGNED NOT NULL,
‘Aluno_CPF’ – Nome da Coluna ou Campo.
INT –Tipo da coluna (campo).
UNSIGNED - Aceite apenas números positivos.
NOT NULL – Coluna com conteúdo obrigatório.
‘Disciplina_Codigo’ INT(10) UNSIGNED NOT NULL,
‘Disciplina_Codigo’ – Nome da Coluna ou Campo.
INT –Tipo da coluna (campo).
UNSIGNED - Aceite apenas números positivos.
NOT NULL – Coluna com conteúdo obrigatório.
‘Alunoxdisciplina_DataValidade’ DATE NULL DEFAULT NULL,
‘Alunoxdisciplina_DataValidade’ – Nome da Coluna ou Campo.
DATE – Tipo da coluna que aceita somente conteúdo no formato data (DD/MM/AAA).
NULL – Coluna com conteúdo opcional.
DEFAULT NULL – Quando o campo não for informado, assume o NULL, sem ser necessário
ter um conteúdo obrigatório.
PRIMARY KEY (‘Aluno_CPF’, ‘Disciplina_Codigo’),
PRIMARY KEY – Chave primária com único conteúdo em toda tabela.
‘Aluno_CPF’ – Nome da primeira coluna da chave primária.
‘Disciplina_Codigo’ – Nome da segunda coluna da chave primária.
INDEX ‘AlunoXDisciplina_FKIndex1’ (‘Disciplina_Codigo’ ASC) VISIBLE,
INDEX – Primeiro índice da chave estrangeira (Foreign Key).
‘AlunoXDisciplina_FKIndex1’ – Nome do primeiro índice da chave estrangeira (Foreign
Key).
ASC – Classificação do índice de forma crescente do menor para o maior.
VISIBLE – Significa que índice está sempre disponível para usá-lo.
INDEX ‘AlunoXDisciplina_FKIndex2’ (‘Aluno_CPF’ ASC) VISIBLE,
Idem as mesmas configurações da primeira chave estrangeira.
CONSTRAINT ‘alunoxdisciplina_ibfk_1’
CONSTRAINT – Coluna com restrição que só permite a criação da tabela desde que
conteúdo esteja presente na tabela pai (principal).
‘alunoxdisciplina_ibfk_1’ – Nome de referência da primeira chave estrangeira.
FOREIGN KEY (‘Disciplina_Codigo’)
FOREIGN KEY – Comando de indicação de chave estrangeira.
‘Disciplina_Codigo’ – Nome da coluna da chave estrangeira referente a nome em outra
tabela pai (Principal).
REFERENCES ‘test’.‘disciplina’ (‘Disciplina_Codigo’)
REFERENCES – Comando para referenciar a outra tabela pai (principal) onde tem a
chave de origem.
‘test’ – Nome do Banco ou esquema onde existe a tabela com chave de origem para ser
chave estrangeira.
‘disciplina’ – Nome tabela onde com chave de origem para ser a chave estrangeira.
‘Disciplina_Codigo’ – Nome da coluna (campo) de origem da chave estrangeira.
ON DELETE NO ACTION
ON DELETE – Quando houver exclusão de linha (registro).
Exclui somente o pai sem afetar o(s) registro(s) filhos ou relacionados em outras
entidades.
ON UPDATE NO ACTION,
ON UPDATE – Quando houver alteração de coluna (campo) na linha (registro).
Altera somente o pai sem afetar o(s) registro(s) filhos ou relacionados em outras
entidades.
CONSTRAINT ‘alunoxdisciplina_ibfk_2’
FOREIGN KEY (‘Aluno_CPF’)
REFERENCES ‘test’.‘aluno’ (‘Aluno_CPF’)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
CONCESSÃO DE ACESSO A TABELAS – PRIVILÉGIOS:
Quando se cria um “Schema”, é possível conceder acesso e privilégios por meio do
seguinte comando:
GRANT ALL PRIVILEGES ON test.* TO testecursoxdisciplina
CRIAÇÃO DE CHAVE ESTRANGEIRA:
Toda que vez que temos uma relação terceira forma normal entre tabelas, temos de
juntar as chaves de duas tabelas numa terceira tabela,
chamada de entidade associativa.
EXECUÇÃO DE SCRIPTS DE UM MODELO DE DADOS PARA CRIAÇÃO DE TABELAS:
A partir de um modelo de dados criado na ferramenta DBDesignerfork, foi gerado um
script completo em linguagem DML. Esse script foi
executado na ferramenta IDE Workbench do MySQL, o resultado foi a criação de todas
as tabelas. A partir das tabelas criadas, foi gerado um
modelo lógico dentro da ferramenta Workbench, o que resultou numa figura gráfica do
DER, conforme apresentado no item anterior, semelhante
ao modelo lógico da fermenta DBDesignerfork.
CREATE TABLE ‘test’.‘aluno’ (
‘Aluno_CPF’ INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
‘Aluno_Nome’ VARCHAR(40) NULL DEFAULT NULL,
PRIMARY KEY (‘Aluno_CPF’));
-- -----------------------------------------------------
CREATE TABLE ‘test’.‘disciplina’ (
‘Disciplina_Codigo’ INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
‘Disciplina_Nome’ VARCHAR(40) NULL DEFAULT NULL,
‘Disciplina_Creditos’ INT(10) UNSIGNED NULL DEFAULT NULL,
PRIMARY KEY (‘Disciplina_Codigo’));
-- -----------------------------------------------------
CREATE TABLE ‘test’.‘alunoxdisciplina’ (
‘Aluno_CPF’ INT(10) UNSIGNED NOT NULL,
‘Disciplina_Codigo’ INT(10) UNSIGNED NOT NULL,
‘Alunoxdisciplina_DataValidade’ DATE NULL DEFAULT NULL,
PRIMARY KEY (‘Aluno_CPF’, ‘Disciplina_Codigo’),
INDEX ‘AlunoXDisciplina_FKIndex1’ (‘Disciplina_Codigo’ ASC) VISIBLE,
INDEX ‘AlunoXDisciplina_FKIndex2’ (‘Aluno_CPF’ ASC) VISIBLE,
CONSTRAINT ‘alunoxdisciplina_ibfk_1’
FOREIGN KEY (‘Disciplina_Codigo’)
REFERENCES ‘test’.‘disciplina’ (‘Disciplina_Codigo’)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT ‘alunoxdisciplina_ibfk_2’
FOREIGN KEY (‘Aluno_CPF’)
REFERENCES ‘test’.’aluno’ (‘Aluno_CPF’)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
-- -----------------------------------------------------
CREATE TABLE ‘test’.‘turma’ (
‘Turma_Numero’ INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
‘Turma_Sala’ INT(10) UNSIGNED NULL DEFAULT NULL,
‘Turma_Horario’ DATETIME NULL DEFAULT NULL,
PRIMARY KEY (‘Turma_Numero’));
-- -----------------------------------------------------
CREATE TABLE ‘test’.‘alunoxturma’ (
‘Turma_Numero’ INT(10) UNSIGNED NOT NULL,
‘Aluno_CPF’ INT(10) UNSIGNED NOT NULL,
‘Alunoxturma_DataValidade’ DATE NULL DEFAULT NULL,
PRIMARY KEY (‘Turma_Numero’, ‘Aluno_CPF’),
INDEX ‘AlunoXTurma_FKIndex1’ (‘Turma_Numero’ ASC) VISIBLE,
INDEX ‘AlunoXTurma_FKIndex2’ (‘Aluno_CPF’ ASC) VISIBLE,
CONSTRAINT ‘alunoxturma_ibfk_1’
FOREIGN KEY (‘Turma_Numero’)
REFERENCES ‘test’.‘turma’ (‘Turma_Numero’)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT ‘alunoxturma_ibfk_2’
FOREIGN KEY (‘Aluno_CPF’)
REFERENCES ‘test’.‘aluno’ (‘Aluno_CPF’)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
-------------------------------------------------------
CREATE TABLE ‘test’.‘curso’ (
‘Curso_Codigo’ INT(10) UNSIGNED NOT NULL,
‘Curso_Descricao’ VARCHAR(40) NOT NULL,
PRIMARY KEY (‘Curso_Codigo’));
-------------------------------------------------------
CREATE TABLE ‘test’.‘cursoxdisciplina’ (
‘Curso_Codigo’ INT(10) UNSIGNED NOT NULL,
‘Disciplina_Codigo’ INT(10) UNSIGNED NOT NULL,
‘Cursoxdisciplina_DataValidade’ DATE NULL DEFAULT NULL,
PRIMARY KEY (‘Curso_Codigo’, ‘Disciplina_Codigo’),
INDEX ‘CursoxDisciplina_FKIndex1’ (‘Disciplina_Codigo’ ASC) VISIBLE,
INDEX ‘CursoxDisciplina_FKIndex2’ (‘Curso_Codigo’ ASC) VISIBLE,
CONSTRAINT ‘cursoxdisciplina_ibfk_1’
FOREIGN KEY (‘Disciplina_Codigo’)
REFERENCES ‘test’.‘disciplina’ (‘Disciplina_Codigo’)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT ‘cursoxdisciplina_ibfk_2’
FOREIGN KEY (‘Curso_Codigo’)
REFERENCES ‘test’.‘curso’ (‘Curso_Codigo’)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
-------------------------------------------------------
-- Table ‘test’.‘professor’
-------------------------------------------------------
CREATE TABLE ‘test’.‘professor’ (
‘Professor_CPF’ INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
‘Professor_Nome’ VARCHAR(40) NULL DEFAULT NULL,
‘Professor_Endereco’ VARCHAR(40) NULL DEFAULT NULL,
PRIMARY KEY (‘Professor_CPF’));
-------------------------------------------------------
CREATE TABLE ‘test’.‘professorxaluno’ (
‘Professor_CPF’ INT(10) UNSIGNED NOT NULL,
‘Aluno_CPF’ INT(10) UNSIGNED NOT NULL,
‘Professorxaluno_DataValidade’ DATE NULL DEFAULT NULL,
PRIMARY KEY (‘Professor_CPF’, ‘Aluno_CPF’),
INDEX ‘ProfessorXAluno_FKIndex1’ (‘Aluno_CPF’ ASC) VISIBLE,
INDEX ‘ProfessorXAluno_FKIndex2’ (‘Professor_CPF’ ASC) VISIBLE,
CONSTRAINT ‘professorxaluno_ibfk_1’
FOREIGN KEY (‘Aluno_CPF’)
REFERENCES ‘test’.‘aluno’ (‘Aluno_CPF’)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT ‘professorxaluno_ibfk_2’
FOREIGN KEY (‘Professor_CPF’)
REFERENCES ‘test’.‘professor’ (‘Professor_CPF’)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
-------------------------------------------------------
CREATE TABLE ‘test’.‘professorxcurso’ (
‘Professor_CPF’ INT(10) UNSIGNED NOT NULL,
‘Curso_Codigo’ INT(10) UNSIGNED NOT NULL,
‘Professorxcurso_DataValidade’ DATE NULL DEFAULT NULL,
PRIMARY KEY (‘Professor_CPF’, ‘Curso_Codigo’),
INDEX ‘ProfessorXCurso_FKIndex1’ (‘Professor_CPF’ ASC) VISIBLE,
INDEX ‘ProfessorXCurso_FKIndex2’ (‘Curso_Codigo’ ASC) VISIBLE,
CONSTRAINT ‘professorxcurso_ibfk_1’
FOREIGN KEY (‘Professor_CPF’)
REFERENCES ‘test’.‘professor’ (‘Professor_CPF’)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT ‘professorxcurso_ibfk_2’
FOREIGN KEY (‘Curso_Codigo’)
REFERENCES ‘test’.‘curso’ (‘Curso_Codigo’)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
-------------------------------------------------------
CREATE TABLE ‘test’.‘professorxturma’ (
‘Professor_CPF’ INT(10) UNSIGNED NOT NULL,
‘Turma_Numero’ INT(10) UNSIGNED NOT NULL,
‘Professorxturma_DataValidade’ DATE NULL DEFAULT NULL,
PRIMARY KEY (‘Professor_CPF’, ‘Turma_Numero’),
INDEX ‘ProfessorXTurma_FKIndex1’ (‘Professor_CPF’ ASC) VISIBLE,
INDEX ‘ProfessorXTurma_FKIndex2’ (‘Turma_Numero’ ASC) VISIBLE,
CONSTRAINT ‘professorxturma_ibfk_1’
FOREIGN KEY (‘Professor_CPF’)
REFERENCES ‘test’.‘professor’ (‘Professor_CPF’)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT ‘professorxturma_ibfk_2’
FOREIGN KEY (‘Turma_Numero’)
REFERENCES ‘test’.‘turma’ (‘Turma_Numero’)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
-------------------------------------------------------
CREATE TABLE ‘test’.‘turmaxdisciplina’ (
‘Turma_Numero’ INT(10) UNSIGNED NOT NULL,
‘Disciplina_Codigo’ INT(10) UNSIGNED NOT NULL,
‘Turmaxdisciplina_DataValidade’ DATE NULL DEFAULT NULL,
PRIMARY KEY (‘Turma_Numero’, ‘Disciplina_Codigo’),
INDEX ‘TurmaXDisciplina_FKIndex1’ (‘Disciplina_Codigo’ ASC) VISIBLE,
INDEX ‘TurmaXDisciplina_FKIndex2’ (‘Turma_Numero’ ASC) VISIBLE,
CONSTRAINT ‘turmaxdisciplina_ibfk_1’
FOREIGN KEY (‘Disciplina_Codigo’)
REFERENCES ‘test’.‘disciplina’ (‘Disciplina_Codigo’)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT ‘turmaxdisciplina_ibfk_2’
FOREIGN KEY (‘Turma_Numero’)
REFERENCES ‘test’.‘turma’ (‘Turma_Numero’)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
MODELO DE DADOS APÓS CRIAÇÃO DE TABELAS NO IDE WORKBENCH MYSQL:
Para converter as tabelas criadas em um modelo lógico, por meio de uma opção do
Workbench, clicar no seguinte caminho:
Database/Reverse Engineer/Connect to DBMS/Select Schemas. Após isso, será gerado o
modelo lógico.
MANIPULAÇÃO DE DADOS:
Para manipulação de dados é utilizada a linguagem DML (Data Manipulation Language),
que é aplicada universalmente dentro de linguagens
de aplicativos com compatibilidade de 100%.
Os comandos DML estão dentro da linguagem SQL (Structured Query Language), servem
para realizar a manipulação de dados, Consulta de
dados (Select), Inclusão de dados (Insert), Exclusão de dados (Delete) e Alteração
de dados (Update).
A linguagem SQL é basicamente dividida em três tipos de comandos: SQL = DDL + DML +
DCL:
1. DDL (definição de dados): Comandos: CREATE, DROP, ALTER
2. DML (manipulação de dados): Comandos: SELECT, INSERT, UPDATE e DELETE
3. DCL (controle de dados): Comandos: GRANT e REVOKE
4. Os comandos de manipulação de dados (DML) em SQL são representados por:
● INSERT: permite a inclusão de novas linhas nas tabelas.
● UPDATE: altera os valores de dados já cadastrados.
● DELETE: remove dados já cadastrados.
● SELECT: usado para consultar o BD e retornar dados que satisfazem a determinada
expressão em um comando.
INCLUSÃO DE DADOS:
Nos comandos DML da linguagem SQL (Structured Query Language) são executadas as
inclusões (Insert) nas tabelas: Aluno, Disciplina e
Alunoxdisciplina, conforme descrito anteriormente.
INCLUSÃO DE DADOS DA TABELA ALUNO:
INSERT INTO ‘test’.‘aluno’ (‘Aluno_CPF’,‘Aluno_Nome’) VALUES (1,“João”);
INSERT INTO ‘test’.‘aluno’ (‘Aluno_CPF’,‘Aluno_Nome’) VALUES (2,“Antonio”);
INSERT INTO ‘test’.‘aluno’ (‘Aluno_CPF’,‘Aluno_Nome’) VALUES (3,“José”);
INCLUSÃO DE DADOS DA TABELA DISCIPLINA:
INSERT INTO ‘test’.‘disciplina’ (‘Disciplina_Codigo’, ‘Disciplina_Nome’,
‘Disciplina_Creditos’) VALUES (1, “Engenharia”,10);
INSERT INTO ‘test’.‘disciplina’ (‘Disciplina_Codigo’, ‘Disciplina_Nome’,
‘Disciplina_Creditos’) VALUES (2, “Direito”,30);
INSERT INTO ‘test’.‘disciplina’ (‘Disciplina_Codigo’, ‘Disciplina_Nome’,
‘Disciplina_Creditos’) VALUES (3, “Matemática”,50);
INCLUSÃO DE DADOS DA TABELA ALUNOXDISCIPLINA:
INSERT INTO ‘test’.‘alunoxdisciplina’ (‘Aluno_CPF’, ‘Disciplina_Codigo’,
‘Alunoxdisciplina_DataValidade’) VALUES (1, 1, “2019/09/23”);
INSERT INTO ‘test’.‘alunoxdisciplina’ (‘Aluno_CPF’, ‘Disciplina_Codigo’,
‘Alunoxdisciplina_DataValidade’) VALUES (1, 2, “2019/09/23”);
INSERT INTO ‘test’.‘alunoxdisciplina’ (‘Aluno_CPF’, ‘Disciplina_Codigo’,
‘Alunoxdisciplina_DataValidade’) VALUES (1, 3, “2019/09/23”);
INSERT INTO ‘test’.‘alunoxdisciplina’ (‘Aluno_CPF’, ‘Disciplina_Codigo’,
‘Alunoxdisciplina_DataValidade’) VALUES (2, 1, “2019/09/23”);
INSERT INTO ‘test’.‘alunoxdisciplina’ (‘Aluno_CPF’, ‘Disciplina_Codigo’,
‘Alunoxdisciplina_DataValidade’) VALUES (2, 2, “2019/09/23”);
INSERT INTO ‘test’.‘alunoxdisciplina’ (‘Aluno_CPF’, ‘Disciplina_Codigo’,
‘Alunoxdisciplina_DataValidade’) VALUES (2, 3, “2019/09/23”);
INSERT INTO ‘test’.‘alunoxdisciplina’ (‘Aluno_CPF’, ‘Disciplina_Codigo’,
‘Alunoxdisciplina_DataValidade’) VALUES (3, 2, “2019/09/23”);
Devemos observar que, antes de fazer os “Inserts” dos dados chave da tabela
Alunoxdisciplina, deve-se providenciar os “Inserts” dos conteúdos
dos dados Aluno_CPF na tabela Aluno e Disciplina_Codigo na tabela Disciplina. Se
isso não for feito, inviabiliza o insert da tabela
Alunoxdisciplina.
Abaixo vamos reexecutar um insert de conteúdo de dados na tabela Alunoxdisciplina.
INSERT INTO ‘test’.‘alunoxdisciplina’ (‘Aluno_CPF’, ‘Disciplina_Codigo’,
‘Alunoxdisciplina_DataValidade’) VALUES (1, 3, “2019/09/23”);
Quando tentamos reinserir os mesmos dados já antes cadastrados na tabela
Alunoxdisciplina, ocorre um erro “Duplicate entry for key
PRIMARY”, por tratar-se de dados da chave estrangeira (ocorrência de somente uma
vez em toda tabela), sendo recusada a inclusão dos dados.
EXCLUSÃO DE DADOS:
Quando precisamos excluir uma linha (registro) da tabela, é necessário que os dados
já existam na tabela.
Vamos executar a instrução de exclusão de dados abaixo. Observamos que temos a
cláusula Where para selecionar em qual linha devemos
excluir. No Caso do Where comparamos os campos de chave primária, Aluno_CPF = 1 and
Disciplina_Codigo = 3.
DELETE FROM ‘test’.‘alunoxdisciplina’ WHERE Aluno_CPF = 1 and Disciplina_Codigo =
3;
Quando tentamos fazer a mesma exclusão pela segunda vez, executamos a instrução
abaixo.
DELETE FROM ‘test’.‘alunoxdisciplina’ WHERE Aluno_CPF = 1 and Disciplina_Codigo =
3;
Quando tentamos fazer a mesma exclusão pela segunda vez, ocorre de não concluir a
exclusão, porque os dados não existem mais.
ALTERAÇÃO DE DADOS:
Quando precisamos alterar dados na tabela, é necessário que os dados já existam
nela.
Vamos executar a instrução de alteração de dados conforme abaixo. Observamos que
temos a cláusula Where para selecionar em qual linha
devemos alterar. No Caso do Where comparamos os campos de chave primária,
‘Aluno_CPF’ = 3 AND ‘Disciplina_Codigo’ = 2. Ainda, a
cláusula SET define qual a coluna deve ser alterada, e após o sinal de igual,
coloca-se o conteúdo novo que deve ser alterado.
UPDATE ‘test’.‘alunoxdisciplina’ SET ‘Alunoxdisciplina_DataValidade’ = “2019/09/24”
WHERE ‘Aluno_CPF’ = 3 AND ‘Disciplina_Codigo’ = 2;
Quando tentamos fazer a mesma alteração pela segunda vez, executamos a instrução
abaixo.
UPDATE ‘test’.‘alunoxdisciplina’ SET ‘Alunoxdisciplina_DataValidade’ = “2019/09/24”
WHERE ‘Aluno_CPF’ = 3 AND ‘Disciplina_Codigo’ = 4;
Quando tentamos fazer a alteração de dados inexistente, ocorre de não concluir a
alteração, porque os dados não existem, apresenta uma
mensagem de “0 rows affected”.
CONSULTA DE DADOS:
Um dos comandos mais utilizados é á consulta de dados, em que podemos ter inúmeras
variações na forma de consulta; a mais simples é o
que consta abaixo, pois o “*” é mostrado em todas as colunas da tabela que se
deseja consultar.
SELECT * FROM ‘test’.‘alunoxdisciplina’;
Podemos selecionar a consulta conforme um critério; basta mencionarmos uma coluna
com o conteúdo que desejamos. A coluna pode ser
qualquer uma da tabela; se forem colunas da chave primária, o processo fica rápido,
se forem colunas que não sejam chave primária, o
processamento ficará demorado, principalmente se o volume de dados for além de
1.000 linhas, o que pode comprometer o tempo de resposta
do resultado. Para realizarmos uma experiência, executamos a instrução abaixo, na
qual selecionamos todas as linhas da coluna
Aluno_CPF = 1.
SELECT * FROM ‘test’.‘alunoxdisciplina’ where Aluno_CPF = 1;
Pode ocorrer quando executamos uma seleção de a comparação da coluna não encontrar
nenhuma linha que satisfaça a condição.
Para essa situação, executamos a instrução a seguir.
SELECT * FROM ‘test’.‘alunoxdisciplina’ where Aluno_CPF = 4;
Uma vez que não há nenhum registro que atenda a condição da seleção, o resultado
não mostra nenhum registro.
OPERADORES RELACIONAIS:
Os operadores lógicos são aplicados para compor condições de decisões para realizar
uma consulta ou em situação de atualizações de
dados – são associados à cláusula “Where”.
Essas condições envolvem comparações entre o conteúdo de uma coluna com valor fixo
ou com uma variável do aplicativo, ou ainda com o
conteúdo de outra coluna.
> Maior que
< Menor que
= Igual a
<> Diferente de
>= Maior ou igual a
<= Menor ou igual a
CLASSIFICAÇÃO DE DADOS:
É comum surgir a necessidade de fazermos uma consulta dos dados de uma tabela
ordenada por ordem crescente ou decrescente.
Para isso, utilizamos uma cláusula chamada de “ORDER BY”, que associamos com o
comando “Select”.
Incluir na tabela teste os seguintes dados:
INSERT INTO ‘teste2’.‘teste’ (‘codigo’, ‘nome’, ‘email’, ‘telefone’) VALUES (‘1’,
‘Elaine’, ‘a@a.com’, ‘33334444’);
INSERT INTO ‘teste2’.‘teste’ (‘codigo’, ‘nome’, ‘email’, ‘telefone’) VALUES (‘2’,
‘Elaine’, ‘b@b.com’, ‘11112222’);
INSERT INTO ‘teste2’.‘teste’ (‘codigo’, ‘nome’, ‘email’, ‘telefone’) VALUES (‘3’,
‘Elaine’, ‘b@b.com’, ‘22223333’);
Vamos classificar todas as linhas da tabela aluno, com duas colunas em diferentes
ordens: ordem de classificação, nascimento ordem
descendente (DESC), e nome em ordem ascendente (ASC).
Antes vamos executar uma inclusão de dados para podemos, em seguida, executar o
“select” com order by.
INSERT INTO aluno (ra, nome, nascimento) VALUES (1, “JOAO”, “2019/09/27”);
INSERT INTO aluno (ra, nome, nascimento) VALUES (2, “ANTONIO”, “2019/08/27”);
INSERT INTO aluno (ra, nome, nascimento) VALUES (3, “CARLOS”, “2019/08/26”);
INSERT INTO aluno (ra, nome, nascimento) VALUES (4, “ALVARO”, “2019/08/26”);
Select * from aluno order by nascimento desc, nome asc;
OPERADORES AUXILIARES:
Vamos trabalhar com a cláusula “Between” para fazer a seleção de linhas, obedecendo
a uma condição que atenda a um valor mínimo e valor
máximo. A condição está associada com a cláusula “Where”. A sintaxe tem a seguinte
estrutura: “<expressão> [Not] BETWEEN <mínimo> and
<máximo>”.
Antes, para podermos testar esta condição, faremos inclusão de dados na tabela
contatos:
INSERT INTO contato (codigo, nome, idade, setor, cargo, salario, admissao)
VALUES (20, ‘Aline Brito’, 20 , 2, ‘Supervisora’, 1700, ‘2019-09-05’);
INSERT INTO contato (codigo, nome, idade, setor, cargo, salario, admissao)
VALUES (22, ‘Silvia Mendes’, 20, 2, ‘Gerente’, 2000, ‘2019-09-01’);
INSERT INTO contato (codigo, nome, idade, setor, cargo, salario, admissao)
VALUES (24, ‘Moacir Campos’, 30, 2, ‘Programador’, 2000, ‘2019-09-10’);
INSERT INTO contato (codigo, nome, idade, setor, cargo, salario, admissao)
VALUES (26, ‘Marcos Silva’, 30, 2, ‘Programador’, 2000, ‘2019-09-15’);
Após a execução do comando “Select * from contato where idade between 10 and 25;”,
foram selecionadas somente as linhas em que a
idade com conteúdo 20 que atende as condições do between.
Também temos outras formas de seleção por meio de condição com conteúdos
sequenciais. Para isso utilizamos a cláusula IN.
Vamos executar o comando “Select * from contato where idade in (20,25);”
Outra situação que podemos utilizar é a de verificar a existência de colunas que
tenham conteúdos de valores nulos ou não. Para testarmos
essa situação, vamos executar a instrução “Select * from contato where nome is NOT
null;” Se formos executar o comando “Select * from
contato where nome is null;”, não teremos nenhum resultado apresentado, pois a
coluna está definida como “NOT NULL”, ou seja, será exigido
um conteúdo quando da inclusão dos dados.
VERIFICAÇÃO DE CARACTERES:
Para verificar a sequência de caracteres dentro de uma coluna do tipo string (char
ou varchar), podemos utilizar a cláusula “where”, uma
condição baseada no uso do operador LIKE, e a sintaxe tem a seguinte configuração
de instrução: “<expressão> [NOT] LIKE <valor>”.
Primeiro exemplo, vamos verificar quando a coluna nome da tabela contato começa com
a letra “M”. Para isso, executamos o comando
“Select * From contato Where nome LIKE ‘M%’;”
Outro exemplo. Vamos verificar quando a coluna nome da tabela contato tenha a
segunda letra igual a “l”. Para isso, executamos o comando
“Select * From contato Where nome LIKE ‘_l%’;”
Elaboração própria.
Mais um exemplo. Vamos verificar quando a coluna nome da tabela contato tenha a
letra “o” em qualquer posição do nome. Para isso,
executamos o comando “Select * From contato Where nome LIKE ‘%o%’;”
FUNÇÕES AGREGADAS:
Existem funções no SQL que contribuem para realizar operações matemáticas e
estatísticas. uma relação de funções e o que cada função
pode resultar. Também para cada função é mostrado um exemplo de comando SQL.
Função Resultado Exemplo de comando SQL
AVG() Média aritmética SELECT AVG(Preco_Livro) FROM tbl_Livro;
MAX() Maior valor SELECT MAX(Preco_Livro) FROM tbl_Livro;
MIN() Menor valor SELECT MIN(Preco_Livro) FROM tbl_Livro;
SUM() Soma dos valores SELECT SUM(Preco_Livro) FROM tbl_Livro;
COUNT() Número de valores SELECT COUNT(*) FROM tbl_autores;
ALL Contagem dos valores não vazios SELECT COUNT(ALL id_autor) FROM
tbl_Livro;
Distinct Contagem dos valores não vazios e únicos SELECT COUNT(DISTINCT
id_autor) FROM tbl_Livro;
RELACIONAMENTO DE TABELAS:
Se houver necessidade de relacionar colunas entre duas ou mais tabelas, vamos
analisar que precisamos apresentar, ao mesmo tempo,
o número da conta da tabela conta e também nome do cliente da tabela cliente. Nesse
caso, podemos utilizar o comando SQL:
SELECT conta.numero, cliente.nome
FROM cliente, conta
WHERE cliente.codigo=conta.codcli;
Esse comando pode ser entendido como juntar as tabelas Cliente e Conta. O objetivo
é selecionar na comparação da cláusula “Where” através
do código do cliente ser igual ao codcli da tabela conta. Todas as linhas que
atenderem a essas condições do “Where” serão apresentadas às
colunas número da tabela conta e nome da tabela cliente.
INFORMAÇÕES AGRUPADAS:
Podem existir necessidades de agrupar as funções agregadas por alguma coluna para
obter uma somatória, média ou contagem, por uma
determinada coluna de uma tabela.
Para solucionar essa necessidade, devemos utilizar a cláusula WHERE com a cláusula
GROUP BY. Podemos resolver, tomando como
referência cinco exemplos de comando SQL.
1 SELECT codcli, COUNT(*) FROM conta GROUP BY codcli;
2 SELECT cliente.Nome, COUNT(*) FROM cliente, conta
WHERE cliente.codigo = cobranca.codcli
GROUP BY cliente.Nome;
3 SELECT codcli, avg(valor) FROM conta GROUP BY codcli having avg(valor)>2000;
4 Select codcli, sum (valor) From conta Group by codcli with ROLLUP;
O modificador ROLLUP faz com que o mysql retorne também as linhas totalizadas, ou
seja, o total por cliente e o total geral.
5 Select cliente.nome, conta.numero, sum (conta.valor)as total
From conta, cliente
where conta.codcli = cliente.codigo
Group by cliente.nome, conta.numero with ROLLUP;
QUALIFICADORES:
Quando utilizamos as funções matemáticas ou estatísticas para uma apresentação
fina, surge a necessidade de definirmos outro qualificador
para às funções. Quando utilizamos, podemos substituir por um nome que julgamos ser
o mais ideal. Para isso aplicamos uma cláusula “as”
para definir o novo nome.
Executar as seguintes inclusões de conta:
INSERT INTO ‘teste2’.‘conta’ (‘numero’, ‘valor’, ‘vencimento’, ‘codcli’) VALUES
(‘1’, ‘10’, ‘2019-08-29’, ‘1’);
INSERT INTO ‘teste2’.‘conta’ (‘numero’, ‘valor’, ‘vencimento’, ‘codcli’) VALUES
(‘2’, ‘50’, ‘2019-08-29’, ‘1’);
INSERT INTO ‘teste2’.‘conta’ (‘numero’, ‘valor’, ‘vencimento’, ‘codcli’) VALUES
(‘3’, ‘40’, ‘2019-08-28’, ‘1’);
INSERT INTO ‘teste2’.‘conta’ (‘numero’, ‘valor’, ‘vencimento’, ‘codcli’) VALUES
(‘4’, ‘30’, ‘2019-08-28’, ‘2’);
INSERT INTO ‘teste2’.‘conta’ (‘numero’, ‘valor’, ‘vencimento’, ‘codcli’) VALUES
(‘5’, ‘20’, ‘2019-08-28’, ‘2’);
INSERT INTO ‘teste2’.‘conta’ (‘numero’, ‘valor’, ‘vencimento’, ‘codcli’) VALUES
(‘6’, ‘40’, ‘2019-08-28’, ‘3’);
INSERT INTO ‘teste2’.‘conta’ (‘numero’, ‘valor’, ‘vencimento’, ‘codcli’) VALUES
(‘7’, ‘95’, ‘2019-08-29’, ‘4’);
Considerando os dados da tabela clientes, conforme ilustrado na figura 15, e mais
os dados da tabela conta, vamos executar o comando SQL a
seguir, a fim verificarmos como funciona a cláusula “AS”.
SELECT clientes.Nome, COUNT(*) AS contas, sum(conta.valor) as valor
FROM clientes, conta WHERE clientes.codigo = conta.codcli
GROUP BY clientes.Nome;
Após a execução do comando acima, verificamos, que o count(*) foi substituído pela
palavra “contas” e que sum (conta.valor) foi
substituído pela palavra “valor”.
SUBQUERY:
Uma subquery é um comando SELECT que faz uma seleção sobre outra seleção já feita
por outro SELECT.
A subquery deve ser colocada entre parênteses; deve ser colocada depois de um
operador de comparação, e a cláusula ORDER BY não deve
ser incluída em uma subquery.
Executar as seguintes inclusões:
INSERT INTO ‘teste2’.‘clientes’ (‘codigo’, ‘nome’, ‘sobrenome’, ‘idade’,
‘endereco’, ‘cidade’, ‘estado’, ‘cep’) VALUES (‘1’, ‘Jose’, ‘Lacerda’, ‘30’, ‘Rua
um numero 5’, ‘São Paulo’, ‘SP’, ‘00000100’);
INSERT INTO ‘teste2’.‘clientes’ (‘codigo’, ‘nome’, ‘sobrenome’, ‘idade’,
‘endereco’, ‘cidade’, ‘estado’, ‘cep’) VALUES (‘2’, ‘Maria’, ‘Antonia’, ‘25’, ‘Rua
um numero 6’, ‘Araraquara’, ‘SP’, ‘00000200’);
INSERT INTO ‘teste2’.‘clientes’ (‘codigo’, ‘nome’, ‘sobrenome’, ‘idade’,
‘endereco’, ‘cidade’, ‘estado’, ‘cep’) VALUES (‘3’, ‘Marco’, ‘Jose’, ‘25’, ‘Rua H
numero 30’, ‘Araraquara’, ‘SP’, ‘00000300’);
INSERT INTO ‘teste2’.‘clientes’ (‘codigo’, ‘nome’, ‘sobrenome’, ‘idade’,
‘endereco’, ‘cidade’, ‘estado’, ‘cep’) VALUES (‘4’, ‘Aparicio’, ‘Alfredo’, ‘30’,
‘Rua X numero 15’, ‘Araraquara’, ‘SP’, ‘00000400’);
Vamos executar o seguinte Exemplo:
SELECT nome FROM clientes WHERE nome LIKE ‘M%’ AND cidade IN (SELECT cidade FROM
clientes where cidade LIKE ‘A%’);
O resultado do primeiro SELECT executado foram as linhas com códigos 2, 3 e 4, pois
existem 3 ocorrências que começam pela letra “A”, ou
seja, “Araraquara”. Dessas três linhas, o segundo SELECT executado seleciona os
nomes que começam por “M”. Temos a Maria e o Márcio,
que é o resultado final, pois o Aparício não é considerado.
JUNÇÃO DE TABELAS:
Utilizamos a cláusula WHERE para aplicar a junção de tabelas, conhecido termo em
inglês “JOINs” (relacionamentos).
A cláusula JOIN é usada para associar dados de duas ou mais tabelas do banco de
dados. Temos duas categorias de joins:
a) INNER JOIN: Retorna linhas (registros) quando houver pelo menos uma
correspondência em ambas as tabelas pela cláusula “where”.
b) OUTER JOIN: Retorna linhas (registros) mesmo quando não houver ao menos uma
correspondência em uma das tabelas (ou ambas).
No caso do OUTER JOINS. Há três tipos de aplicações:
a) LEFT JOIN: Retorna todas as linhas da tabela à esquerda, mesmo se não houver
nenhuma correspondência na tabela à direita.
b) RIGHT JOIN: Retorna todas as linhas da tabela à direita, mesmo se não houver
nenhuma correspondência na tabela à esquerda.
c) FULL JOIN: Retorna linhas quando houver uma correspondência em qualquer uma das
tabelas.
Para criar uma alias para uma tabela, basta acrescentar um identificador à frente
do nome da tabela. A partir de então, basta utilizar este alias
para se referenciar à tabela, por exemplo, “p” para pedido, “c” para clientes.
Select nome,nr,valor from pedido p inner join clientes c on (p.cliente=c.codigo);
Vamos executar o comando a seguir para verificar o entendimento do join e do alias.
Select f.nome, p.valor as pagamento from funcionarios f INNER JOIN pagamentos p ON
f.codigo_ funcionario = p.codigo_ funcionario;
select f.nome, p.valor as pagamento from funcionarios f LEFT JOIN pagamentos p ON
f.codigo_ funcionario= p.codigo_ funcionario;
TRIGGERS NO MYSQL:
Um trigger é um conjunto de instruções SQL para desempenhar funções lógicas em
banco de dados, como atualizar uma coluna estoque do
produto. Toda vez que houver uma venda de um item de produto, automaticamente pode
subtrair o item de venda do estoque, por meio de uma
configuração trigger na tabela de itens de venda.
Antes, podemos saber sobre triggers armazenadas, utilizando o comando SQL a seguir:
SELECT * FROM INFORMATION_SCHEMA.TRIGGERS;
Vamos, num primeiro momento, criar duas tabelas: uma de produto e outra de itens de
venda. Para isso, executamos os scripts a seguir, por
meio de queries. Recomenda-se seguir os seguintes passos na ordem em que são
citados os exemplos.
1. CRIAÇÃO TABELA PRODUTOS
CREATE TABLE Produtos (
Referencia INT PRIMARY KEY,
Descricao VARCHAR(50) UNIQUE,
Estoque INT NOT NULL DEFAULT 0);
2. INSERT TABELA PRODUTOS
INSERT INTO Produtos VALUES (1, ‘Feijão’, 10);
INSERT INTO Produtos VALUES (2, ‘Arroz’, 5);
INSERT INTO Produtos VALUES (3, ‘Farinha’, 15);
INSERT INTO Produtos VALUES (4, ‘SAL’, 15);
INSERT INTO Produtos VALUES (5, ‘ACUCAR’, 9);
INSERT INTO Produtos VALUES (6, ‘CAFE’, 12);
3. Apresentação dos dados da tabela PRODUTOS
Select * from produtos;
4. CRIAÇÃO TABELA itens de venda
CREATE TABLE itensvenda (
Venda INT NOT NULL,
Produto INT NOT NULL,
Quantidade INT NULL,
PRIMARY KEY (Venda, Produto));
5. CRIAÇÃO TRIGGER itens de venda para INSERT
Toda vez que incluir um item de venda, atualiza-se o valor de estoque do produto,
subtraindo do estoque do produto a quantidade de vendas.
DELIMITER $
CREATE TRIGGER Tgr_ItensVenda_Insert AFTER INSERT
ON ItensVenda
FOR EACH ROW
BEGIN
UPDATE Produtos SET Estoque = Estoque - NEW.Quantidade
WHERE Referencia = NEW.Produto;
END$
O nome da trigger é Tgr_ItensVenda_Insert. Após cada vez que for incluído um item
na tabela itens de venda (AFTER INSERT), será subtraída a
quantidade (NEW.Quantidade) do estoque (Estoque). Para cercar isso, a atualização
correta do registro é comparada à coluna Referência da
tabela produto com itens de produto (NEW.Produto). Após a criação do trigger, irá
aparecer dentro da tabela de vendas
6. INSERT DE ITENS DE VENDAS
Vamos incluir os itens de venda para ativar o trigger.
INSERT INTO ItensVenda VALUES (1, 1,3);
INSERT INTO ItensVenda VALUES (1, 2,1);
INSERT INTO ItensVenda VALUES (1, 3,5);
Após a inclusão de dados na tabela de ItensVenda, é mostrado o resultado da
consulta (conforme tabela 22). Após a inclusão, entra em ação o
Tgr_ItensVenda_Insert, que subtrai a quantidade de itens de vendas do estoque do
produto (10 – 3 = 7).
7. CRIAÇÃO DE TRIGGGER PARA TABELA ITENS DE VENDAS APÓS DELETE
Toda vez que excluir um item de venda, atualiza-se o valor de estoque do produto,
somando no estoque do produto a quantidade de vendas.
DELIMITER $
CREATE TRIGGER Tgr_ItensVenda_Delete AFTER DELETE
ON ItensVenda
FOR EACH ROW
BEGIN
UPDATE Produtos SET Estoque = Estoque + OLD.Quantidade
WHERE Referencia = OLD.Produto;
END$
O nome da trigger é Tgr_ItensVenda_Delete. Após cada vez que for excluído um item
na tabela itens de venda (AFTER DELETE), será somada a quantidade (OLD.Quantidade)
do estoque (Estoque). Para cercar isso, a atualização correta do registro é
comparada à coluna Referência da tabela produto com itens de produto (OLD.Produto).
Após a criação do trigger, irá aparecer dentro da tabela de vendas.
8. DELETE NA TABELA ITENS DE VENDAS
Vamos executar a exclusão do item de venda. Para ativar a trigger
“Tgr_ItensVenda_Insert” de exclusão do item de venda.
DELETE FROM itensvenda WHERE venda = 1 AND produto = 1;
Após a exclusão de dados na tabela de ItensVenda, é mostrado o resultado da
consulta
9. CONSULTA DA TABELA PRODUTOS
Após a exclusão do item de venda, entra em ação o Tgr_ItensVenda_Delete, que soma a
quantidade de itens de vendas do estoque do produto
(7 + 3 = 10).
“STORED PROCEDURE”:
A sintaxe geral para criação de Stored Procedure é a seguinte:
CREATE PROCEDURE proc_name([parameters, ...])
[characteristics]
[BEGIN]
corpo_da_rotina;
[END]
Detalhes sobre a configuração de parâmetros para sintaxe de “Stored Procedure”:
proc_name: seu procedimento armazenado deve ter um nome para, quando for chamado,
podermos então usá-lo.
tipo_param: existem três tipos de parâmetros em uma Stored Procedure.
proc_name: seu procedimento armazenado deve ter um nome para, quando for chamado,
podermos então usá-lo.
tipo_param: existem três tipos de parâmetros em uma Stored Procedure no MySQL:
a) IN – este é um parâmetro de entrada, ou seja, um parâmetro cujo valor será
utilizado no interior do procedimento para produzir algum resultado.
b) OUT – este parâmetro retorna algo de dentro do procedimento para o lado externo,
colocando os valores manipulados disponíveis na
memória ou no conjunto de resultados.
c) INOUT – faz os dois trabalhos ao mesmo tempo.
Para colocar em prática, vamos criar uma tabela “tbl_correntista”, conforme script
abaixo; o objetivo é criar uma Stored Procedure para passar
por parâmetros NOME e CPF, em que esses parâmetros são passados por uma chamada por
“CALL”, que é executado por query, na ferramenta
IDE WorkBench MySQL. A chamada por “CALL” ativa a “Stored Procedure” que, com os
parâmetros passados, é atualizada a tabela
tbl_correntista.
1. PRIMEIRO PASSO: Criação da tabela Correntista
CREATE TABLE tbl_correntista (
correntista_id int auto_increment primary key,
correntista_nome varchar(60) not null unique,
correntista_cpf varchar(20) not null,
dt_cadastro timestamp default current_timestamp);
2. SEGUNDO PASSO: Criação STORED PROCEURE para INSERT
Vamos criar a “STORED PROCEDURE” para criar incluir dados de parâmetros passados
pela chamada do “CALL” para incluir dados na tabela Correntista.
DELIMITER $
CREATE PROCEDURE mySp_correntistaInsert
(v_correntista_nome VARCHAR(60), v_correntista_cpf VARCHAR(20))
BEGIN
IF ((v_correntista_nome!= ‘’) && (v_correntista_cpf!= ‘’)) THEN
INSERT INTO tbl_correntista (correntista_nome, correntista_cpf)
VALUES (v_correntista_nome, v_correntista_cpf);
ELSE
SELECT ‘NOME e CPF devem ser fornecidos para o cadastro!’ AS Msg;
END IF;
END$
O nome da “Stored Procedure” é “mySp_correntistaInsert”. Após cada vez que for
acionada por uma chamada por “CALL”, será ativada a “Stored Procedure” e, então, é
efetivada a inclusão na tabela correntista.
Os parâmetros são recebidos nome (v_correntista_nome) e CPF (v_correntista_cpf).
Depois disso, são verificados se os parâmetros conteúdos não são vazios; então, é
efetivada a inclusão da tabela correntista por meio da instrução (INSERT INTO
tbl_correntista) e são incluídos os dados “VALUES (v_correntista_nome,
v_correntista_cpf)”.
3. TERCEIRO PASSO: Chamada da “Stored Procedure” por “CALL”
Antes da chamada é apresentada a consulta da tabela
A chamada de “CALL” da “Stored Procedure” é feita por query na ferramenta IDE
WorkBench MySQL, conforme a seguinte instrução:
CALL mySp_correntistaInsert (‘Wagner Bianchi’, ‘023.456.789-10’);
Após a chamada por “CALL” ativa a “Stored Procedure” e, então, a inclusão de dados
é providenciada e, depois disso, a tabela de correntista fica
com os dados.