2010-11-21 5 views
1

Ici, lg_id est PK et son incrément automatique.mysql - après insertion d'un déclencheur pour insérer des données dans une autre table

LeagueMember (lgMbr_lg_id, lgMbr_Userid, lgMbr_JoinDate) 

lgMbr_lb_id est une référence FK League(lg_id)

Après une ligne est insérée dans la table League, une rangée correspondante doit être insérée dans leagueMember avec le même lg_id qui a été inséré dans la table en ligue. J'essaye de créer un déclencheur après insertion pour ceci.

CREATE TRIGGER trigger_league AFTER INSERT ON `League` 
FOR EACH ROW 
BEGIN 
    INSERT INTO `LeagueMember` (`lgMbr_lg_id`, `lgMbr_Userid`,`lgMbr_JoinDate`) values (NEW.lg_id,NEW.lg_UserId,'2000-10-10') 
END; 

J'ai essayé mais cela ne fonctionne pas. Qu'est-ce qui ne va pas ici?

Edition -

Je reçois un message d'erreur qui dit qu'il ya une erreur avec ma syntaxe. Basé sur ce mysql create trigger reference page j'ai même essayé ceci, mais j'obtiens toujours une erreur de syntaxe.

CREATE TRIGGER trigger_league AFTER INSERT ON `League` 
FOR EACH ROW 
BEGIN 
    INSERT INTO `LeagueMember` SET lgMbr_lg_id = NEW.lg_id;  
END; 
+0

* cela ne fonctionne pas * - Pouvez-vous être plus précis? –

+0

J'ai édité la question avec des détails. – pavanred

+0

cela ne marchera jamais - arrêtez-vous et pensez-y! –

Répondre

3

peut-être cela pourrait aider ???

drop table if exists league; 
create table league 
(
league_id smallint unsigned not null auto_increment primary key, 
user_id int unsigned not null, 
name varchar(255) unique not null 
) 
engine=innodb; 

drop table if exists league_user; 
create table league_user 
(
league_id smallint unsigned not null, 
user_id int unsigned not null, 
created_date datetime not null, 
creator_flag tinyint unsigned not null default 0, 
primary key (league_id, user_id) 
) 
engine=innodb; 


drop procedure if exists create_league; 
delimiter # 

create procedure create_league 
(
in p_user_id int unsigned, 
in p_name varchar(255) 
) 
begin 

declare v_league_id smallint unsigned default 0; 

    insert into league (user_id, name) values (p_user_id, p_name); 

    set v_league_id = last_insert_id(); 

    call add_league_user(v_league_id, p_user_id, 1); -- 1 = owner 
end # 

delimiter ; 

drop procedure if exists add_league_user; 
delimiter # 

create procedure add_league_user 
(
in p_league_id smallint unsigned, 
in p_user_id int unsigned, 
in p_creator_flag tinyint unsigned 
) 
begin 
    insert into league_user (league_id, user_id, created_date, creator_flag) values 
     (p_league_id, p_user_id, now(), p_creator_flag); 
end # 

delimiter ; 

call create_league(1,'Premiere League'); 

call add_league_user(1,2,0); 
call add_league_user(1,3,0); 
call add_league_user(1,4,0); 

select * from league; 
select * from league_user; 
+0

Merci. Ma première fois avec PHP et MySQL. Je n'étais pas au courant de last_insert_id(). Je ne voudrais pas créer des déclencheurs si je peux faire la même chose avec sp. – pavanred

+1

De rien, j'évite généralement les trigs car ils ont l'habitude d'être oubliés. Gardez ce code dans sprocs et chemin à parcourir :) –

Questions connexes