0

そのテーブルのバックアップ バージョンからテーブルを復元する必要がありました。次に、トリガーを再作成しました。再作成することはできません。この種のトリガーがどのように見えるべきかの例をいくつか見てきました。古いトリガーで「変更」をクリックして保存したときにphpmyadminに表示されたコードからコピーしました。私はそれが絶対確実だと思った!

1064 - SQL 構文にエラーがあります。5 行目の near '' を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

CREATE TRIGGER `trig_parts_price_AfterUpdate` AFTER UPDATE ON `parts`
    FOR EACH ROW BEGIN
       IF (NEW.cost <> OLD.cost || NEW.price <> OLD.price || NEW.QtyInStock <> OLD.QtyInStock) THEN
          INSERT INTO `inv_hist_simple` (sku, cost, price, QtyInStock, change_date) 
          VALUES(OLD.sku_m, NEW.cost, NEW.price, NEW.QtyInStock, NOW());
    END IF;
END;
4

1 に答える 1

2

次の行をコードの上に置きます。

DELIMITER $$

コードの最後の行を次のように変更します

END $$

次に、最後に次の行を追加します。

DELIMITER ;

そうし;ないと、構文エラーの原因となっているinsertステートメントの後にトリガーのコードが終了することがサーバーに通知されます。

したがって、基本的には次のようになります。

DELIMITER $$
CREATE TRIGGER `trig_parts_price_AfterUpdate` AFTER UPDATE ON `parts`
    FOR EACH ROW BEGIN
       IF (NEW.cost <> OLD.cost || NEW.price <> OLD.price || NEW.QtyInStock <> OLD.QtyInStock) THEN
          INSERT INTO `inv_hist_simple` (sku, cost, price, QtyInStock, change_date) 
          VALUES(OLD.sku_m, NEW.cost, NEW.price, NEW.QtyInStock, NOW());
    END IF;
END $$
DELIMITER ;
于 2012-05-24T22:02:09.950 に答える