2011-12-30 14 views
0

私はいくつかのフィールドを持つテーブルを持っています。 1つのフィールドは「date_assigned」で、もう1つは「割り当て済み」です。 "date_assigned"はtimestampのデータ型を持ち、nullでもかまいません。 "assigned"のデータ型はtinyintで、値は0(デフォルト; '割り当てられていません')または1(割り当て済み)です。カラムのMySQLトリガー

"date_assigned"が値(nullでない)で更新された場合、自動的に "assigned"値を1に更新するトリガーを作成したいと思います。

以前はトリガーを使用していましたが、値がnullであるかどうかのチェックと併用していませんでした。私は構文が不明なので、どんな助けもありがとう。これまでのところ、私が試してみた:

DELIMITER $$ 

CREATE 
    TRIGGER `<database>`.`<trigger_name>` AFTER UPDATE 
    ON `<database>`.`<table>` 
    FOR EACH ROW BEGIN 
    IF(NEW.date_assigned IS NOT NULL) THEN 
    UPDATE <table> SET assigned = '1'; 

    END$$ 

DELIMITER ; 

私はエラーコードを取得する:1064私はコードUPO見て、構文エラーだと思われます。だから私は文法上の間違いを作っているのですが、これは正しい文法ですか?

答えて

1

のようになります。

DELIMITER $$ 

CREATE 
    TRIGGER `<database>`.`<trigger_name>` AFTER UPDATE 
    ON `<database>`.`<table>` 
    FOR EACH ROW 

    BEGIN 
    IF(NEW.date_assigned IS NOT NULL) THEN 
    UPDATE <table> SET assigned = '1'; 

    END;  //Change here also. 
    $$ 

DELIMITER ; 
0

これは、MySQLのデフォルトの区切り文字が;に設定されているためです。だから、最初の行は次のように新しい行にBEGINを入れてみてくださいDELIMITER $$;

DELIMITER $$; 

CREATE  TRIGGER `<database>`.`<trigger_name>` 
AFTER UPDATE  ON `<database>`.`<table>` 
FOR EACH ROW BEGIN  
IF(NEW.date_assigned IS NOT NULL) THEN 
UPDATE <table> SET assigned = '1'; 
END$$ 

    DELIMITER ;