LOGIN:

iMasters | Por uma internet mais criativa e dinâmica

Feeds

MySQL

Feed da seção MySQL

Newsletter de MySQL


Terça-feira, 22/11/2005 - 14:55 - Por Júlio César Martini
Seções relacionadas:

MySQL 5

Fala pessoal! A MySQL AB lançou no dia 24 de Outubro a versão 5.0 do MySQL. Nessa nova versão foram adicionadas novas características como: triggers, views e stored procedures. E são essas novas características que estaremos apresentando essa semana interagindo PHP e MySQL.

Vamos lá:

Primeiramente, devemos criar o nosso database.

CREATE DATABASE JULIO

Criaremos a tabela PRODUTOS, conforme descrição abaixo dentro do schema julio:

CREATE TABLE JULIO.PRODUTOS (
         COD_PRODUTO INTEGER NOT NULL AUTO_INCREMENT
        , DSC_PRODUTO VARCHAR(45) NOT NULL
        , VLR_PRODUTO DOUBLE(4,2)
        , PRIMARY KEY(COD_PRODUTO)
)
ENGINE = INNODB;

Agora "populamos" a nossa tabela.

INSERT INTO PRODUTOS (DSC_PRODUTO, VLR_PRODUTO) VALUES("CPM 22 - FELICIDADE INSTANTÂNEA", "22.00");
INSERT INTO PRODUTOS (DSC_PRODUTO, VLR_PRODUTO) VALUES("BIQUINI CAVADÃO - AO VIVO", "25.50");
INSERT INTO PRODUTOS (DSC_PRODUTO, VLR_PRODUTO) VALUES("PAPA ROACH - LOVE HATE TRAGEDY", "23.00");

Views

Uma view(visão) é uma tabela virtual na qual os dados não estão fisicamente armazenados. Ela é apenas uma visão de um grupo de colunas de uma ou mais tabelas do banco de dados. No exemplo abaixo, criaremos uma view que terá apenas as colunas COD_PRODUTO, DSC_PRODUTO.

CREATE VIEW julio.VIEW_PRODUTOS AS
         SELECT cod_produto, dsc_produto FROM produtos;

Resultado:

Stored Procedures

Conjunto de comandos SQL armazendos no servidor que realizam tarefas específicas e são ativadas como comandos. Podem receber parâmetros de entrada, saída ou entrada e saída.

DELIMITER $$
DROP PROCEDURE IF EXISTS julio.pr_total $$
CREATE PROCEDURE julio.pr_total ( OUT total INT)
BEGIN
SELECT count(0) INTO total
FROM produtos;
END $$

Executando a procedure via linha de comando

C:\ mysql -u root -p
(após teclar ENTER informe a senha do usuário root)
mysql> use julio;
mysql> call pr_total(@teste);
mysql> select @teste;

Depurando:

use julio - Informamos o database que iremos utilizar.
call pr_total(@teste) -
Chamamos a procedure pr_total e armazenamos o resultado em teste.
select @teste -
Exibimos o resultado. No exemplo acima, trazemos a quantidade de produtos cadastrados.

Triggers

É um bloco PL/SQL armazendo em um banco de dados.e executado sempre que o evento ocorrer. Esse evento pode ser um DML (update, insert, delete) , um DDL (create, alter, drop, truncate table) ou mesmo um evento ocorrido do banco, como uma conexão, por exemplo.

Criaremos a tabela HISTÓRICO que armazenará todas as alterações de valores efetuadas na tabela de PRODUTOS.

CREATE TABLE julio.historico (
             COD_HIST INTEGER NOT NULL AUTO_INCREMENT
             , COD_PRODUTO INTEGER NOT NULL
             , DT_ALTERACAO DATE NOT NULL
             , VLR_ANTIGO DOUBLE(4,2) NOT NULL
             , VLR_NOVO DOUBLE(4,2) NOT NULL
             , FOREIGN KEY(COD_PRODUTO) REFERENCES
produtos(COD_PRODUTO)
             , PRIMARY KEY(COD_HIST)
             )
ENGINE = INNODB;

Abaixo, a trigger TR_PRODUP que será acionada quando ocorrer um UPDATE na tabela de PRODUTOS.

DELIMITER $$
DROP TRIGGER julio.tr_produp $$
CREATE TRIGGER tr_produp BEFORE UPDATE ON produtos
FOR EACH ROW
BEGIN
    DECLARE TESTE VARCHAR(30);
    DECLARE DATA DATE;
    SET DATA = NOW();
INSERT INTO HISTORICO SET COD_PRODUTO = OLD.cod_produto
               , VLR_ANTIGO = OLD.vlr_produto
               , VLR_NOVO = NEW.vlr_produto
               , DT_ALTERACAO = DATA;
END $$

Após alterarmos algum dado na tabela produtos é disparado a trigger tr_produp que fará automaticamente uma inserção na tabela de histórico.

Para testarmos, alterarei o valor do CD do CPM 22, de R$ 22,00 para R$ 25,00.

UPDATE produtos SET vlr_produto = 25.00 WHERE cod_produto = 1;

Após a atualização, se dermos um SELECT na tabela HISTÓRICO teremos como resultado:

SELECT * FROM historico;

Chamando Stored Procedures em MySQL com PHP

Nesse exemplo, utilizarei o PHP 5.0 e Apache 1.3.38. Antes de começarmos, devemos efetuar uma pequena alteração no arquivo php.ini.

Utilizaremos em vez da extensão mysql a extensão mysqlqi que nos dá acesso a outras funcionalidades do MySQL à partir da versão 4.1.

Editando php.ini

Adicionar a seguinte linha: extension=php_mysqli.dl

Arquivo: call.php

<?
//CONECTA AO MYSQL
$conn = mysqli_connect("127.0.0.1","usuario","senha");

//VERIFICA SE OCORREU ALGUM ERRO
if (mysqli_connect_errno()) {
    echo "Erro na conexão!";
exit();
}

//SELECIONA O BANCO DE DADOS
mysqli_select_db ($conn,"julio");

//EXECUTA A QUERY
if ($result = mysqli_query($conn,"CALL pr_total(@teste)")) {
    if ($result = mysqli_query($conn,"SELECT @teste")) {
        $row = mysqli_fetch_array($result);
        echo "Total de produtos cadastrados ........: ".$row[0];
    } //FECHA IF
} //FECHA IF
?>

Resultado:

Dicas:

É muito cansativo e demorado executar todos os comandos em linha de comando. Para isso foram criados aplicativos que visam facilitar esse trabalho. Abaixo apresento o MySQLAdministrador e o Query Browser que otimizam em muito a nossa vida.

MySQL Administrator (essencial para o DBA)

Interface para administração do banco de dados MySQL.. Backups, log de erro etc...

Download: http://www.mysql.com

Query Browser

Aplicativo para criar, executar e otimizar comandos SQL. Podemos ainda criar e deletar tabelas.

Download: http://www.mysql.com

Links úteis:
http://www.php.net/manual/pt_BR/ref.mysqli.php

Para baixar os exemplos desse artigo, clique aqui!

Semana que vem tem mais. Espero que vocês tenham gostado! Não deixe de nos enviar críticas ou sugestões para o próximo assunto, afinal a coluna é de vocês.

Boa semana a todos! Até mais!

Todos os artigos de Júlio César Martini

10 comentários publicados

  • 1. Excelente!

    Terça-feira, 22/11/2005, por Domirélio Ferreira Moreira

    Muito bom Júlio, com essas novas características a MySQL ficou muito boa. Eu só gostaria de saber o seguinte, isso fará com que o acesso a Base de Dados fique mais lenta? Um abraço!

    Responder comentário
  • 2. Erro Truncate

    Quinta-feira, 24/11/2005, por Cristiano Freire Moura

    amigo porque qdo eu insiro um valor em branco em campo integer ou float da erro truncate

    e um exemplo se uso o mysql 5 em casa e qdo eu jogar no servidor for 4 vai dar algum erro.. como faço?

    Responder comentário
  • 3. Usuarios

    Segunda-feira, 28/11/2005, por Danilo Gomes

    Queria saber se existe uma quantidade maxima de usuarios simultaneos para que o MySQL deixe de ser free? E queria saber se ele se trabalha bem com o Visual Basic?

    Responder comentário
  • 4. Chaves estrangeiras

    Quarta-feira, 21/12/2005, por Helton Eduardo Ritter

    Cara, sugestão, como o Mysql não tem integridade podia montar um exemplo com duas tabelas e fazer uma Trigger para ele não deixar excluir da tabela se houvese dependências.

    parabéns pela coluna!

    Responder comentário
  • 5. MYSQL 5

    Quinta-feira, 05/01/2006, por Paulo Ronaldo Vilela de Lima Jr

    AMIGO, TEM COMO VC ME PASSAR UM EXEMPLO.
    1)COMO FAZER UMA PROCEDURE COM VARIOS PARAMETROS DE ENTRADA. E COMO FAZER PARA PEGAR O RESULTADO DESSE SELECT E COMO PASSAR ESSES PARAMETROS EM PHP PARA CHAMAR A PROCEDURE
    2) COMO FAZER UMA PROCEDURE DE INSERT COMO VARIOS PARAMETROS DE ENTRADA. E COMO PASSAR ESSES PARAMENTROS E
    M PHP PARA ESSA PROCEDURE


    GRATO

    Responder comentário
  • 6. Apagando dados

    Segunda-feira, 23/01/2006, por diego

    Amigo em um tutorial sobre login vcs ensinaram a cadastrar, realizar o login mais, sou novo em php e tava querendo uma explicaçao de como deletar usuarios obrigado

    Responder comentário
  • 7. Tutorial perfeito!!!

    Terça-feira, 14/02/2006, por julio coronel

    Parabéns pelo tutorial, perfeito, cheio de detalhes e muito mais, testei e funcionou perfeitamente! Muito obrigado por nos passa um pouco do seu conhecimento, pois só assim crescemos como ser humano, e não esquecemos dos iniciantes, por que um dia todos nós tivemos um começo. Forte Abraço e muita energia positiva xará!!

    Responder comentário
  • 8. procedure?

    Segunda-feira, 27/03/2006, por erivelto carvalho

    ai. aonde eu coloco a procedure para ser executada?não entendi o
    DELIMITER$$
    .
    .
    .
    .

    Responder comentário
  • 9. Mesmo erro que >> Cristiano Freire Moura

    Terça-feira, 25/04/2006, por Leandro Zavitoski Galassi

    Olá pessoal, estou com o mesmo problema descrito no post do "Cristiano Freire Moura, 24/11/2005 18:26", tenho que declarar a variável com valor = "0"? ou alguem saberia me ajudar com outra solução? Valeu!

    Responder comentário
  • 10. Variavel

    Segunda-feira, 12/06/2006, por Guilherme Santos Sá

    òtimo, mas como faço para passar uma variavel do php para a procedure ou trigger?!?!

    Responder comentário

Poste um comentário


Os textos publicados neste espaço são de responsabilidade única de seus autores (colunistas e leitores) e podem não expressar necessariamente a opinião do iMasters.

Sobre o autor

Júlio César Martini atualmente presta serviços de WebMaster/Programador para o UOL (http://www.uol.com.br), Graduado em Tecnólogo em Informática pela UNIFIAN - Faculdades Anhanguera e Pós-Graduado em Desenvolvimento de Software para Web pela UFSCAR. Foi o primeiro profissional a chegar à marca de 100 artigos publicados no iMasters e trabalha com PHP desde 2000. Site: http://www.juliocesarmartini.com


Indique para um amigo

captcha

TI SHOP Produtos iMasters

  • Lançamento: CD-ROM Treinamento Aplicado de SQL - Lançamento! Treinamento Aplicado de SQL - Aprenda a trabalhar com SQL com bancos de dados Oracle e SQL Server. São mais de 100 tópicos explicados por Mauro Pichilliani, um articulistas mais lidos do iMasters. Aproveite! Apenas R$ 69,90 no TI SHOP.
  • Lançamento: Livro iMasters "O Encontro de 2 Mundos"- Este livro conta com 56 crônicas de profissionais mais admirados e influentes do mercado brasileiro de Internet. Aproveite o preço especial para leitores do iMasters. Apenas R$ 40,00 e envio imediato!
  • DVD Curso Completo de Photoshop - Do conceito à finalização Lançamento! Curso Completo de Photoshop, em DVD, com mais de 230 aulas dividas em 4 módulos: conceito, básico, avançado e finalização. Apenas R$ 69,50 no TI SHOP - Frete com 50% de desconto
  • DVD Javascript Starter - Curso Completo Com mais de 9 horas de vídeo-aulas, é um curso completo sobre Javascript. Ideal para quem deseja aprender a linguagem. Apenas R$ 64,90 no TI SHOP - Frete com 50% de desconto!

2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.