2016-09-13 8 views
0
CREATE TRIGGER `update_2` 
AFTER UPDATE ON `itm_master` 
FOR EACH ROW 
BEGIN 
    IF NEW.transfer_status='YES' THEN 
     INSERT into activity_tbl (`evnt_date`,`con_type`,`username`,`item_serial`,`item_model`,`item_type`,`to_status`) 
     VALUES (now(),'Update',NEW.user,NEW.item_serial,NEW.master_item_model,NEW.master_item_type,NEW.item_status); 
    END IF; 
END 

item_masterテーブルでtransfer_statusフィールドが更新されるたびにactivity_tblにデータを挿入するトリガを作成したいとします。私は、このクエリを使用しますが、私は、MySQLエラーにカラムが更新されたときにデータを挿入するmysqlトリガを作成する

CREATE TRIGGER `update_2` 
AFTER UPDATE ON `itm_master` 
FOR EACH ROW 
BEGIN 
    IF NEW.transfer_status='YES' THEN 
     INSERT into activity_tbl (`evnt_date`,`con_type`,`username`,`item_serial`,`item_model`,`item_type`,`to_status`) 
     VALUES (now(),'Update',NEW.user,NEW.item_serial,NEW.master_item_model,NEW.master_item_type,NEW.item_status); 

を受けていますMySQLは言った:ドキュメント

1064 - Erreurデsyntaxe PRASド '' ア・ラ・LIGNE 7

+0

私は個人的にトリガーを避けるようにします。コードを見ると、このデータが追加されたような魔法のように見えます。他のデータが挿入されたときにデータを挿入する方が読みやすくなります。それ以外に、私はそのエラーメッセージを読むことができません... – ArtisticPhoenix

+0

私はその1つに同意します – Drew

+0

あなたのコードは、最初のブロックまたは秒ですか?私はそれが不完全なので、2番目の構文エラーがあることがわかります(END IF、BEGINのENDはありません)。それはエラーが英語で言うことですか? – Robert

答えて

0

私が得ましたこれはうまくいく。私は現時点で創造的な解説から外れています。

SCHEMA:

create table itm_master 
( id int auto_increment primary key, 
    transfer_status VARCHAR(100) NOT NULL, 
    user VARCHAR(100) NOT NULL, 
    item_serial VARCHAR(100) NOT NULL, 
    master_item_model VARCHAR(100) NOT NULL, 
    master_item_type VARCHAR(100) NOT NULL, 
    item_status VARCHAR(100) NOT NULL 
); 
create table activity_tbl 
( id int auto_increment primary key, 
    `evnt_date` DATETIME NOT NULL, 
    `con_type` VARCHAR(100) NOT NULL, 
    `username` VARCHAR(100) NOT NULL, 
    `item_serial` VARCHAR(100) NOT NULL, 
    `item_model` VARCHAR(100) NOT NULL, 
    `item_type` VARCHAR(100) NOT NULL, 
    `to_status` VARCHAR(100) NOT NULL 
); 

TRIGGER:

DROP TRIGGER IF EXISTS update_2; 
DELIMITER $$ 
CREATE TRIGGER `update_2` 
AFTER UPDATE ON `itm_master` 
FOR EACH ROW 
BEGIN 
    IF NEW.transfer_status='YES' THEN 
     INSERT into activity_tbl (`evnt_date`,`con_type`,`username`,`item_serial`,`item_model`,`item_type`,`to_status`) 
     VALUES (now(),'Update',NEW.user,NEW.item_serial,NEW.master_item_model,NEW.master_item_type,NEW.item_status); 
    END IF; 
END;$$ 
DELIMITER ; 

試験:

INSERT itm_master(transfer_status, user, item_serial, master_item_model, master_item_type, item_status) values 
('a','b','c','d','e','f'); 

UPDATE itm_master SET transfer_status='blah' WHERE id=1; 
select * from activity_tbl; 
-- no rows 

UPDATE itm_master SET transfer_status='YES' WHERE id=1; 
select * from activity_tbl; 
+----+---------------------+----------+----------+-------------+------------+-----------+-----------+ 
| id | evnt_date   | con_type | username | item_serial | item_model | item_type | to_status | 
+----+---------------------+----------+----------+-------------+------------+-----------+-----------+ 
| 1 | 2016-09-13 00:14:26 | Update | b  | c   | d   | e   | f   | 
+----+---------------------+----------+----------+-------------+------------+-----------+-----------+ 
DELIMITER

ラッパーがPHPMyAdminのために必要とされません。

+0

私は全文索引とMysql 5.4を持っていたので、私はカスケードで削除するために一度トリガを使いました... – ArtisticPhoenix

+0

ありがとう!!!出来た。 私はエラーの理由を見つけました.... 私のバージョンのmysqlは、同じ機能を持つ複数のトリガをサポートしていません。 – Mancharagopan

関連する問題