2012-03-09 11 views
-1

MySQL Community Server 5.5.16で更新トリガーを作成しようとしています。私は2つのテーブルを持っています:別のテーブルエラーを更新するためのトリガー

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); 

"sales"テーブルの更新後にテーブル "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

トリガーには;が余分にあり、トリガーにはセミコロンが含まれているため、トリガーを追加するために区切り文字を一時的に変更する必要があります。

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; 

で1 ;あまりを持っており、あなたのトリガー周りの区切り文字を忘れてはいけない

例:

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

あなたは後に誤った;を持っていますSET句:

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

MySQLはにあなたを伝えるたびはXXX近くで使用する権利構文については、マニュアルを確認し、すぐにエラーがあるかどうかを確認するためにxxxのの前の文字に最初に見えます。この場合、WHERE句が始まる直前です。

関連する問題