/ / Trigger за обновяване на друга грешка в таблицата - mysql, triggers

Спусък за актуализиране на друга грешка в таблицата - mysql, задейства

Опитвам се да създам тригер за обновяване в MySQL Community Server 5.5.16. Имам две таблици:

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" след всяка актуализация в таблицата "продажби". Създал съм тригер:

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 за отговор № 1

Имате допълнително ; в спусъка и тъй като тригерът съдържа точка и запетая, трябва временно да смените ограничителя, за да добавите тригера;

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 ;

2 за отговор № 2

Имате заблуда ; След SET клауза:

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

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


1 за отговор № 3

Имаш един ; твърде много във вашия синтаксис

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;