Опитвам се да създам тригер за обновяване в 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;