MySQL Trigger(Gatilho)

O que é um trigger ?

Trigger ou gatilho é uma função implementada a partir da versão 5.0.2 do MySQL.
Ele funciona associado a um evento do banco de dados, sempre que for executado uma instrução SQL, insert, delete ou update em determinada tabela o gatilho é disparado.

Criando um trigger

Sintaxe para criação de um trigger

CREATE TRIGGER nome_gatilho
{ BEFORE | AFTER }
{ INSERT | UPDATE | DELETE }
ON tabela
FOR EACH ROW
triggered_statement

Tradução da sintaxe

Criar um gatilho com_esse_nome
BEFORE (antes) ou AFTER (depois) da ação na tabela
INSERT(sempre que uma nova linha é inserida) ou UPDATE (sempre que uma nova linha é atualizada) ou DELETE(sempre que uma linha é deletada)
ON tabela
FOR EACH ROW
INSERT tabela_arquivo (ID, data) VALUES (tab.ID, tab.DATA);

Observações:
Se você usar multiplas instrução dentro do seu trigger é necessário usar BEGIN e END para indicar o inicio e fim da instrução do trigger.
Lembrando que é necessário alterar o delimitador antes da execução do trigger pelo comando DELIMITER || e voltando para ;(ponto e virgula) usando DELIMITER ;

Para visualizar os triggers use o comando.

mysql> SHOW TRIGGERS;

Este post é um resumo sobre trigger, para saber mais visite a documentção oficial no link(inglês): http://dev.mysql.com/doc/refman/5.0/en/triggers.html

Olá pessoal, hoje vou escrever bem resumido para explicar O que é normalização ?

Normalização é um conjunto de regras que ajuda minimizar problemas de logica.
Ex.. não armazenar os dados de compra junto com os dados dos clientes, pois o mesmo cliente poderá fazer mais de uma compra certo!
A normalização ajuda a tornar o banco de dados mais facil de se entender, basicamente devemos passar por três passos de normalização.
1FN – primeira forma normal, 2NF – segunda forma normal, 3FN – terceira forma normal, e cada formato tem seu proprio conjunto de regras.

Se você tem interesse em banco de dados, é essencial estudar sobre normalização, um abraço a todos.

Olá pessoal, resolvi fazer uma pequena lista de alguns comandos que poderá ajudar quem não tem muito costume de usar prompt.

Apos ter instalado o MySQL em seu computador precisamos iniciar o servidor

No linux acesse a pasta do mysql

> cd mysql
> bin/safe_mysqld &

Vai aparecer uma mensagem pedindo o password

> Enter password:

Para entrar no shel do mysql

>mysql -u root -p senha

acima estamos abrindo conexão com o -usuário root e -password senha

//Lista dos comandos básicos
mysql> show databases; //mostra todos banco de dados

mysql > use nome_banco; //seleciona um banco de dados para trabalhar

mysql> show tables; //mostra todas as tabelas do banco selecionado

mysql> desc ou describe // mostra detalhes da tabela, colunas e tipo de dados

mysql> SELECT @ @datadir; //mostra o diretório de dados do mysql
cada banco de dados é separado por uma pasta com o nome do banco

mysql> select count(*) from tabela; //conta quantidade de registros(linhas) da tabela selecionada

mysql> CREATE DATABASE modelo; //cria um banco de dados chamado modelo

mysql > DROP DATABASE modelo; // Exclui o banco de dados chamado modelo e todos os dados dentro dele


Basicamente é isso pessoal, ate a proxima.

Baixe e instale o driver de conexão do site do MySql.

http://www.mysql.com/downloads/connector/odbc/

Crie um arquivo chamado asp_conexao_mysql.asp

1
2
3
4
5
6
 
<%
strConnection = "driver={MySQL ODBC 5.1 Driver}; server=localhost; uid=USUARIO; pwd=SENHA; database=DATABASE;option=NUM"
set conn = Server.CreateObject("ADODB.Connection")
conn.Open strConnection
%>

Olá pessoal, hoje vou mostrar sobre os tipos de dados que podem ser definidos para as colunas do seu banco de dados e tornar suas consultas mais rápidas.

Tipos de data e Hora:

DATE – armazena data tipo AAAA-MM-DD
DATETIME – armazena data e hora no formato – AAAA-MM-DD HH:MM:SS
TIME – armazena hora no formato – hh:mm:ss
YEAR – armazena ano no formato – aaaa
TIMESTAMP – armazena data e hora podendo ser usando com TIME_STAMP

Tipos numéricos
Bytes Range
TINYINT 1 -128 até 127
SMALLINT 2 -32768 até 32767
MEDIUMINT 3 -8388608 até 8388607
INT 4 -2147483648 até 2147483647
BIGINT 8 -9223372036854775808 até 9223372036854775807

Tipos string

Os tipos strings são CHAR, VARCHAR, BLOB, TEXT, ENUM, e SET.

A seguinte tabela ilustra as diferenças entre os dois tipos de colunas, mostrando o resultado de se armazenar vários valores de strings em campos CHAR(4) e VARCHAR(4):
CHAR-VARCHAR

Então usar varchar é melhor para meu banco ficar mais leve certo ? Errado!
É obvio que para um colunas com valores fixos você deve usar CHAR, e colunas com valores variaveis deve-se usar o VARCHAR.
Mas isso vai depender muito do tipo de informação que será guardada pois em alguns casos é melhor usar CHAR pois a maneira que o Mysql trabalha internamente para essas colunas poderá fazer sua consulta ficar mais lenta.
E também depende de como esta seus indices entre outros fatores que influenciam.

Tipo ENUM
Enum – armazena um valor único de uma lista pré especificada.
Ex.: ENUM(‘S’,’N’) – somente será aceito os valos S,N
pode ser usado para campos como, sexo, recebe newsletter,

Tipos binários

Hoje vamos aprender a fazer um Filtro de palavras inapropriadas com substiuição de palavras. Poderá ser implementado no seu sistema de mural de recados, comentários de artigos ou fotos, enfim vamos ao que interessa.

Nessa parte vamos criar uma tabela no banco de dados para armazenar as palavras que queremos filtrar.


CREATE TABLE IF NOT EXISTS `filtro_palavras` (
  `Codigo` int(4) NOT NULL AUTO_INCREMENT,
  `MsgErrada` varchar(200) DEFAULT NULL,
  `MsgCorreta` varchar(200) DEFAULT '--',
  PRIMARY KEY (`Codigo`),
  UNIQUE KEY `MsgErrada` (`MsgErrada`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COMMENT='armazena filtros de palavras' AUTO_INCREMENT=1 ;

Agora vamos criar a função que vai fazer todo o trabalho.
Crie um arquivo chamado filtro.php e coloque o codigo abaixo.


//conexão com o banco de dados
$conexao = mysql_connect('servidor', 'usuario', 'senha') or die(mysql_error());
//seleciona banco de dados
$db = mysql_select_db('banco', $conexao) or die(mysql_error());

// função para Filtrar palavras inapropriadas
function filtro($mensagem)
{
    if ($mensagem) {
        $resultado = mysql_query("SELECT * FROM filtro_palavras");
        while ($mostra = mysql_fetch_array($resultado)) {
            $mensagem= str_replace($mostra['MsgErrada'], $mostra['MsgCorreta'],  $mensagem);
        }
    }
    return $mensagem;
}
?

Para chamar a função dentro do seu código siga o exemplo abaixo:

//inclue a função
include('filtro.php');

//chama a função
filtro("frase mural recado")

Se tiver alguma duvida, é so postar.

Um pacotão completo e gratuito que inclui Apache, PHP5, MySQL database, PHPmyadmin e SQLitemanager!

O WAMP5 (que significa Windows, Apache, MySQL, PHP5) é um pacote de programas que instala automaticamente o Apache 1.331, PHP5, MySQL database, PHPmyadmin e SQLitemanager. Disponibiliza também suporte ao uso de scripts PHP e comporta vários add-ons encontrados no site oficial.

Com esse pacote você poderá fazer sua página na Internet com muito mais vantagens e vai incrementar ele com muitos mais recursos. Também tornará o site mais dinâmico e rápido conforme a sua habilidade e conforme o servidor de onde você vai hospedar.

Também é possível criar um servidor que possa hospedar e armazenar dados ou páginas da Internet em um banco de dados.

Baixar
Para baixar clique aqui

O que é?

Apache:

É um dos maiores servidores de web livre e foi criado em cima de códigos já prontos.O servidor é compatível com o protocolo HTTP. Para saber mais sobre as funcionalidades visite o site oficial do Apache (em inglês).

PHP5:

PHP ao pé da letra significa Hypertext Preprocessor. De maneira geral, o PHP é uma linguagem livre orientada a objetos que cria scripts simples. Scripts são partes de um código que executam alguma função. O PHP5 veio com algumas mudanças para tornar a linguagem um pouco mais forte: é possível refazer construtores e os destruir, com maior visibilidade no acesso, abstração de objetos e, por fim, a interface de objetos.

Para mais informações sobre o programa, visite o site oficial do PHP (em inglês).

MySQL database:

MySQL é um sistema gerenciador de banco de dados (SGDB) que funciona de forma estruturada. Possui um excelente desempenho e é um software livre. Compatível com muitos drivers e também módulos de interfaces para muitas linguagens de programação. Suporta vários tipos de tabelas.

Para mais informações sobre o MySQL database, visite o site oficial do MySQL (em inglês).

PHPmyadmin:

Programa desenvolvido para a parte administrativa do PHP. É possível criar e deletar bases de dados ou tabelas. É possível que você faça alterações nas suas tabelas, campos, enfim, tudo o que você precisar alterar na sua base de dados.

SQLitemanager:

É o sistema gerenciador do SQL. Você pode aplicar o SQLitemanager na hora que estiver montando o seu banco de dados com o MySQL database, que também é incluso no pacote do WAMP5.

Quando você instalar o WAMP5, todos os arquivos são copiados no diretório que você escolher. Se você preferir baixar os programas inclusos no WAMP5 separadamente, confira alguns deles que o Baixaki já disponibilizou para você: PHP5, Apache e o phpMyAdmin.

Fonte: Baixaki

Continuando a primeira aula, vamos gerar a exibição da enquete.

Assista a video aula para entender cada arquivo, estou explicando detalhadamente.

Começando crie um arquivo chamado conexao.php

//este arquivo é responsavel pela conexao do banco de dados
$host = "localhost";
$database = "enquete";
$login_db = "root";
$senha_db = "pass123";

$conexao = mysql_connect ($host, $login_db, $senha_db) or die ("Erro: ".mysql_error());
$db = mysql_select_db($database);

Agora vamos criar o arquvo enquete.php para mostrar nossa enquete.
A imagem abaixo mostra como será o resultado no final.

Enquete

////////////////arquivo enquete_comentar.php


/*
desenvolvido por Fabiano Bento
http://www.fabianobento.com.br
*/
//arquivo CSS de estilos


//java script para validar formulário




//verifica se existe a variavel ACT no GET if(isset($_GET['act'])){ $act = $_GET['act']; switch ($act) { case "escrever": echo "Escreva seu comentário!"; //cria o formulário e envia para o mesmo arquivo e seta avariavel act
Nome:
E-mail:
Cidade:
Estado:
Comentário:

 
//termina o switct break; //verifica se o valor de ACT é igual a inc case "inc": //chama o arquivo de conexao com o banco require_once('inc/conexao.php'); $codigo_enquete = $_POST['codigo_enquete']; $ip = getenv('REMOTE_ADDR'); $provedor = gethostbyaddr($_SERVER['REMOTE_ADDR']); $datahora = date(" Y-m-d H:i:s"); $form_nome = $_POST['nome']; $form_email = $_POST['email']; $form_cidade = $_POST['cidade']; $form_uf = $_POST['uf']; $form_comentario = $_POST['comentario']; $form_btn_comentar = $_POST['btn_comentar']; $enqcStatus = "A"; //grava os dados dentro da tabela enquetes comentarios $sql = " INSERT INTO enquetes_comentarios (`enqcCodigo` ,`enqcCodEnquete` ,`enqcIpEnvio` ,`enqcProvedorEnvio` ,`enqcDtHrEnvio` ,`enqcNome` ,`enqcEmail` ,`enqcCidade` ,`enqcUF` ,`enqcComentario` ,`enqcStatus`)VALUES (' ', '$codigo_enquete', '$ip', '$provedor', '$datahora', '$form_nome', '$form_email', '$form_cidade', '$form_uf', '$form_comentario', '$enqcStatus')"; mysql_query("$sql"); echo ""; echo ""; break; } } ?>

Tela do formulário do arquivo enquete_comentar.php
Tela formulário comentário

Explicando o conteudo e funcionamento de cada arquivo.
*Lembrando que o texto antes da barra é o nome da pasta.

enquete/inc/conexao.php - função que conecta no banco de dados
enquete/enquete.php - este arquivo mostra a enquete com as opções para votar e links para comentar e resultado
enquete/enquete_resultado.php - aqui mostra o resultado da enquete e comentários
enquete/enquete_comentar.php - este é o formulário para envio dos comentarios
enquete/enquete_votar.php - este arquivo recebe os dados do arquivo enquete.php e grava a opções escolhida no banco de dados

Nesta aula, vou ensinar com desenvolver um sistema de enquetes para ilimitadas enquetes.
Primeiro nos vamos criar o banco de dados e as tabelas para armazenar as enquetes, os votos, comentarios, e log de registros os votos.

Assista ao video para entender sobre cada coluna das tabelas

O SQL das tabelas;

//tabela enquetes

CREATE TABLE IF NOT EXISTS `enquetes` (
  `enqCodigo` int(10) NOT NULL AUTO_INCREMENT COMMENT 'codigo da enquete',
  `enqDtCadastro` date NOT NULL COMMENT 'data do cadastro',
  `enqNmEnquete` varchar(200) NOT NULL COMMENT 'pergunta da enquete',
  `enqOpcao1` varchar(150) NOT NULL COMMENT 'resposta 1',
  `enqOpcao2` varchar(150) NOT NULL COMMENT 'resposta 2',
  `enqOpcao3` varchar(150) NOT NULL COMMENT 'resposta 3',
  `enqOpcao4` varchar(150) NOT NULL COMMENT 'resposta 4',
  `enqOpcao5` varchar(150) NOT NULL COMMENT 'resposta 5',
  `enqOpcao6` varchar(150) NOT NULL COMMENT 'resposta 6',
  `enqOpcao7` varchar(150) NOT NULL COMMENT 'resposta 7',
  `enqOpcao8` varchar(150) NOT NULL COMMENT 'resposta 8',
  `enqOpcao9` varchar(150) NOT NULL COMMENT 'resposta 9',
  `enqOpcao10` varchar(150) NOT NULL COMMENT 'resposta 10',
  `enqVotos1` int(10) NOT NULL DEFAULT '0' COMMENT 'htis 1',
  `enqVotos2` int(10) NOT NULL DEFAULT '0' COMMENT 'htis 2',
  `enqVotos3` int(10) NOT NULL DEFAULT '0' COMMENT 'htis 3',
  `enqVotos4` int(10) NOT NULL DEFAULT '0' COMMENT 'htis 4',
  `enqVotos5` int(10) NOT NULL DEFAULT '0' COMMENT 'htis 5',
  `enqVotos6` int(10) NOT NULL DEFAULT '0' COMMENT 'htis 6',
  `enqVotos7` int(10) NOT NULL DEFAULT '0' COMMENT 'htis 7',
  `enqVotos8` int(10) NOT NULL DEFAULT '0' COMMENT 'htis 8',
  `enqVotos9` int(10) NOT NULL DEFAULT '0' COMMENT 'htis 9',
  `enqVotos10` int(10) NOT NULL DEFAULT '0' COMMENT 'htis 10',
  `enqDtInicioExibicao` date NOT NULL COMMENT 'data inicio da exiicao',
  `enqDtFinalExibicao` date NOT NULL COMMENT 'data final da exibicao',
  `enqStatus` enum('A','I') NOT NULL DEFAULT 'A' COMMENT 'ativo ou inativo',
  PRIMARY KEY (`enqCodigo`,`enqNmEnquete`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COMMENT='Entidade para os dados das enquetes' AUTO_INCREMENT=1 ;


//tabela enquetes_comentarios

CREATE TABLE IF NOT EXISTS `enquetes_comentarios` (
  `enqcCodigo` int(20) NOT NULL AUTO_INCREMENT COMMENT 'codigo do comentario',
  `enqcCodEnquete` int(10) NOT NULL,
  `enqcIpEnvio` varchar(30) NOT NULL COMMENT 'ip do usuario',
  `enqcProvedorEnvio` varchar(150) NOT NULL COMMENT 'provedor do ip',
  `enqcDtHrEnvio` datetime NOT NULL COMMENT 'data e hora do envio',
  `enqcNome` varchar(40) NOT NULL COMMENT 'nome que quem enviou',
  `enqcEmail` varchar(60) NOT NULL COMMENT 'email de quem envu',
  `enqcCidade` varchar(150) NOT NULL,
  `enqcUF` char(2) NOT NULL,
  `enqcComentario` mediumtext NOT NULL COMMENT 'comentáro',
  `enqcStatus` enum('A','I') NOT NULL,
  PRIMARY KEY (`enqcCodigo`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COMMENT='Entidade para os comentários das enquetes' AUTO_INCREMENT=1 ;


//tabela enquete_log

CREATE TABLE IF NOT EXISTS `enquetes_log` (
  `enqlCodigo` int(30) NOT NULL AUTO_INCREMENT COMMENT 'codigo do envio',
  `enqlCodEnquete` int(10) NOT NULL COMMENT 'codigo da enquete',
  `enqlIpEnvio` varchar(30) NOT NULL COMMENT 'ip que enviou',
  `enqlDtHrEnvio` datetime NOT NULL COMMENT 'data e hora do envio',
  `enqlOpcao` varchar(5) NOT NULL,
  PRIMARY KEY (`enqlCodigo`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COMMENT='Entidade para os dados de log dos votos' AUTO_INCREMENT=2 ;