Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Zinan

Replicação de Tabela

Recommended Posts

Como é possível replicar através de uma trigger uma tabela de um banco para o outro dentro do mesmo host ??Ex.:---------Banco1 --------- Tabela1Tabela2Tabela3---------Banco2--------- Tabela1Tabela2Tabela3Eu costaria de replicar a tabela 3 do Banco 1 (Banco1.Tabela3) pra tabela 3 do banco 2 (Banco2.Tabela3), para que as duas tabelas nos dois bancos fiquem idênticas.Sei que simples fazer isso, mas será que alguém poderia por favor me ajudar??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi,

Taí um exemplo, utilizando mysql 5.0.22:

Criar uma tabela de teste no banco test (do mysql):

CREATE TABLE `test`.`teste` (

`id` tinyint(4) NOT NULL auto_increment,

`nome` varchar(40) NOT NULL default '',

`data` date NOT NULL default '0000-00-00',

`hora` time NOT NULL default '00:00:00',

`datahora` datetime default '0000-00-00 00:00:00',

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE DATABASE bdteste2;

CREATE TABLE bdteste2.teste LIKE test.teste;

Este LIKE no create table indica que a tabela a ser criada deve ter a mesma estrutura da tabela utilizada na referência.

Bom, agora você deve criar as Triggers para inclusão, alteração, exclusão, ou conforme a sua necessidade:

quando incluir um registro:

DELIMITER $$;

 

DROP TRIGGER `test`.`insere`$$

 

CREATE TRIGGER `test`.`insere` AFTER INSERT on `test`.`teste`

FOR EACH ROW BEGIN

INSERT INTO `bdteste2`.`teste` (id,nome,data,hora,datahora)

VALUES (NEW.id,NEW.nome,NEW.data,NEW.hora,NEW.datahora);

END$$

 

DELIMITER ;$$

alterar um registro:

DELIMITER $$;

 

DROP TRIGGER `test`.`altera`$$

 

CREATE TRIGGER `test`.`altera` AFTER UPDATE on `test`.`teste`

FOR EACH ROW BEGIN

UPDATE `bdteste2`.`teste` SET

id = NEW.id,

nome = NEW.nome,

data = NEW.data,

hora = NEW.hora,

datahora = NEW.datahora

WHERE id = OLD.id;

END$$

 

DELIMITER ;$$

Neste caso deve-se utilizar o OLD porque precisamos comparar o id do dbteste2.teste com o id antes da alteração do test.teste.

 

e finalmente na exclusão:

DELIMITER $$;

 

DROP TRIGGER `test`.`exclui`$$

 

CREATE TRIGGER `test`.`exclui` AFTER DELETE on `test`.`teste`

FOR EACH ROW BEGIN

DELETE FROM `bdteste2`.`teste` WHERE id = OLD.id;

END$$

 

DELIMITER ;$$

O NEW refere-se aos novos valores informados na tabela, e o OLD são os valores antigos.

As Triggers foram criadas na tabela teste do banco de dados test (original).

Se estiver utilizando PhpMyAdmin e não conseguir criar Triggers, tente outro programa como o SQLYog por exemplo.

Fiz os testes aqui e funfou beleza, se tiver dúvidas/problemas diz ae.

flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.