2012-03-09 3 views
-1

Я пытаюсь создать триггер обновления в MySQL Community Server 5.5.16. У меня есть две таблицы:Trigger для обновления другой ошибки таблицы

create table sales 
    (ono integer primary key, 
    dnr integer not null, 
    osum integer); 

create table salessum 
    (dnr integer primary key, 
    dsum integer); 



alter table sales 
    add constraint fk_sales_salessum foreign key (dnr) 
      references salessum (dnr); 

Мне нужно обновить таблицу «salessum» после любого обновления в таблице «sales». Я создал триггер:

Create trigger up_to_date 
after update on sales 
for each row 
begin 
update salessum 
set dsum = dsum + new.osum; 
where dnr=new.dnr; 
end; 

Но я получил сообщение об ошибке:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that 
corresponds to your MySQL server version for the right syntax to use near 'where 
dnr=new.dnr' at line 1 

Может кто-нибудь мне помочь. Благодарю.

ответ

3

У вас есть дополнительный ; в вашем триггере, и поскольку триггер содержит точки с запятой, вам необходимо временно изменить разделитель, чтобы добавить триггер;

delimiter // 

Create trigger up_to_date 
after update on sales 
for each row 
begin 
update salessum 
set dsum = dsum + new.osum 
where dnr=new.dnr; 
end// 

delimiter ; 
1

У вас есть один ; слишком много в вашем синтаксисе

Create trigger up_to_date 
after update on sales 
for each row 
begin 
    update salessum 
    set dsum = dsum + new.osum /*removed ; here */ 
    where dnr=new.dnr; 
end; 

И не забудьте разделитель вокруг спускового

Пример:

delimiter // 
CREATE TRIGGER ... 
BEGIN 
... 
END; 
// 
delimiter; 
2

Вы странствующий ; после SET статья:

update salessum 
set dsum = dsum + new.osum; <--- Remove that 
where dnr=new.dnr; 

Всякий раз, когда MySQL говорит вам проверки руководство для правильного синтаксиса, чтобы использовать рядом ххх, посмотрите сначала на характер, непосредственно предшествующий ххх, чтобы увидеть, если есть ошибка есть. В этом случае, непосредственно перед началом статьи WHERE.