Jump to content

MySQL - Trigger


Enziguri
 Share

Recommended Posts

Boas,

DB1:

INSERT INTO `towny_nations` (`name`, `towns`, (...etc...)) VALUES

DB2:

INSERT INTO `web_categories` (`id`, `parent`, `name`, (...etc...)) VALUES

tenho estas duas tabelas em bases de dados diferentes, em que quero que crie outra linha na DB2 com o campo name da DB1 e adicionar o numero 10 no campo parent. queria fazer exactamente o mesmo com outras tabelas da DB1. Se o nome na DB1 alterar deve tambem alterar apenas o nome na DB2.

Isto tudo a tempo real, sem ter que executar o script para fazer essa copia, uma especie de loop...

Se alguem tiver alguma solução agradecia, visto que não sou la grande espingarda em bases de dados...

Obrigado desde ja

Link to comment
Share on other sites

Se percebi bem a pergunta, então só é possível usando triggers.

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Link to comment
Share on other sites

Aprende SQL/PL. É disso q precisas. Mas n sei aonde é q há bons tutorials disso.

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Link to comment
Share on other sites

delimiter |

CREATE TRIGGER nation_create AFTER INSERT ON mc_towny.towny_nations
FOR EACH ROW BEGIN
INSERT INTO website.web_kunena_categories SET name = NEW.name;
END;
|

delimiter ;

Como já disse nao percebo la muito de mysql, tenho este pedaço de codigo e está a darme este erro... só quero copiar uma coluna para já, talvez 2 ou 3 quando conseguir copiar uma... mas para já quero por a funcionar so com uma...

Error Code: 1235. This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for one table'

alguém consegue dizerme como funciona? :S

Obrigado

Edit: Acrescentada formatação do código (Rechousa)

Link to comment
Share on other sites

Tu já tens um trigger para esse evento.

Experimenta remover esse trigger anterior antes de tentares adicionar um novo (esse).

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Link to comment
Share on other sites

Não existe o alter trigger (nem faz sentido existir pq é muito difícil saber o q queres alterar com código parcial).

executas o drop trigger e depois crias um novo.

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Link to comment
Share on other sites

Bem, com este padaço de codigo o que me está a dar a entender é que nao está a "ler" a parte to ELSE principal(segundo).

Alguém me consegue ajudar a encontrar onde está o erro?

obrigado

delimiter |
DROP TRIGGER IF EXISTS town_create|
CREATE TRIGGER town_create BEFORE INSERT ON mc_towny.towny_towns
    FOR EACH ROW
        BEGIN
        SET @ID = (SELECT id FROM website.web_kunena_categories WHERE name = NEW.nation);
        SET @TOWN = (SELECT name FROM mc_towny.towny_towns WHERE name = NEW.name);
        SET @NEWID = (select max(ordering) from website.web_kunena_categories);
            IF EXISTS (SELECT parent FROM website.web_kunena_categories WHERE name = NEW.name)
                THEN
                    IF (SELECT nation FROM mc_towny.towny_towns WHERE name = NEW.name) IS NULL THEN
                        UPDATE website.web_kunena_categories
                        SET parent = 14
                        WHERE name = @town;
                    ELSE
                        UPDATE website.web_kunena_categories
                        SET parent = @ID
                        WHERE name = @town;
                    END IF;
            ELSE
                IF (SELECT nation FROM mc_towny.towny_towns WHERE name = NEW.name) IS NULL THEN
                    INSERT INTO website.web_kunena_categories VALUES ('', 14, NEW.name, 0, 0, 0, 1, NULL, 'joomla.level', 1, 1, 1, 8, 1, @NEWID + 1, 0, 1, 0, '0000-00-00 00:00:00', 0, 0, 0, 0, '', '', '', 0, 0, 0, 0, 0);
                ELSE
                    INSERT INTO website.web_kunena_categories VALUES ('', @ID, NEW.name, 0, 0, 0, 1, NULL, 'joomla.level', 1, 1, 1, 8, 1, @NEWID + 1, 0, 1, 0, '0000-00-00 00:00:00', 0, 0, 0, 0, '', '', '', 0, 0, 0, 0, 0);
                END IF;
            END IF;
        END;
| delimiter ;
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.