ありがとうございました。 私は同じことをしていました。 MySqlのトリガを使用しているのは初めてです。私は今MS SQL Serverの年のためのトリガを使用していると私は奇妙なMysqlで見つける。それは決して発射されないように見えるか、または十分に速くイベントをキャッチしていません。実際のコードを書いて説明しましょう。Triser構文エラーの中で重複してキー更新が発生する
DROP trigger if exists sales_ins;
delimiter //
CREATE TRIGGER sales_ins
AFTER INSERT ON pos_items
FOR EACH ROW
BEGIN
DECLARE new_am INTEGER;
SET new_am = 0;
If NEW.item_class = 0 Then
Select
Sum(ifnull(pos_items.pos_quantity,0)) INTO new_am
From
pos_items Right Join pos_invoice On pos_items.inv_number = pos_invoice.inv_number And
pos_items.branch_id = pos_invoice.branch_id
Where
pos_invoice.inv_void_cacel = 0 And pos_items.item_class = 0 And pos_items.item_code = NEW.item_code
Group By
pos_items.item_code
Having
Not pos_items.item_code Is Null;
REPLACE INTO item_quantity VALUES (NEW.company_id, NEW.branch_id, NEW.item_code,
0, 0, 0, new_am, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, now(), NEW.rowguid);
ElseIf NEW.item_class = 7 Then
Select
Sum(ifnull(pos_items.pos_quantity,0)) INTO new_am
From
pos_items Right Join pos_invoice On pos_items.inv_number = pos_invoice.inv_number And
pos_items.branch_id = pos_invoice.branch_id
Where
pos_invoice.inv_void_cacel = 0 And pos_items.item_class = 7 And pos_items.item_code = NEW.item_code
Group By
pos_items.item_code
Having
Not pos_items.item_code Is Null;
REPLACE INTO item_quantity VALUES (NEW.company_id, NEW.branch_id, NEW.item_code,
0, 0, 0, 0, new_am, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, now(), NEW.rowguid);
End If;
END //
delimiter ;
問題は、更新されていません。明確にするためにコードを説明します。 挿入後にpos_itemsテーブルがトリガされると(このqtyを合計する必要があるため挿入が使用された後)、すべてのトランザクション合計が販売数量として取得され、item_quantity item_sold_qtyフィールドが更新されるか、返品item_salesret_qtyフィールドが更新されます。
更新された数量は正確ではありません。 どのようにエラーが発生しているか、または作成ビューごとにmyisamテーブルが作成されているようですが、これも実行遅延です。ちょうど私は理解していません。 ご協力いただきありがとうございます。
作成ステートメントの前に区切り文字が設定されていないようです。 –
トリガーの前に区切り文が必要だと思います。 –
行番号を増やして同じエラーで試行しました。 – Luckie