2010-11-21 2 views
1
I have two tables - 

League  (lg_id, lg_Userid, lg_JoinDate) 

Здесь lg_id является PK и его число увеличивается.mysql - после ввода триггера для вставки данных в другую таблицу

LeagueMember (lgMbr_lg_id, lgMbr_Userid, lgMbr_JoinDate) 

lgMbr_lb_id является ФК ссылки League(lg_id)

После того, как строка вставляется в таблицу Лиги, соответствующая строка должна быть вставлена ​​в leagueMember с той же lg_id, который был вставлен в таблицу Лиги. Я пытаюсь создать триггер после вставки для этого.

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; 

Я пробовал это, но он не работает. Что здесь не так?

Edit -

Я получаю сообщение об ошибке, в котором говорится, что есть ошибка с моим синтаксисом. Основываясь на этом mysql create trigger reference page, я даже пробовал это, но я все еще получаю синтаксическую ошибку.

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

* Это не работает * - Вы можете уточнить? –

+0

Я отредактировал вопрос с деталями. – pavanred

+0

он никогда не будет работать - остановитесь и подумайте об этом! –

ответ

3

Возможно, это может помочь?

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

Спасибо. Мой первый раз с php и mysql. Я не знал о last_insert_id(). Я бы не стал создавать триггеры, если я могу сделать то же самое с sp. – pavanred

+1

Добро пожаловать - я вообще избегаю триггеров, поскольку у них есть привычка забываться. Сохраните этот код в sprocs и пути. :) –

Смежные вопросы