2012-02-23 72 views
0

我想打一個觸發器來做到這一點:MYSQL觸發麻煩

UPDATE formulario 
    SET ano = EXTRACT(year FROM create_date), 
    mes = EXTRACT(month FROM create_date) 

,但我得到了很多麻煩使得它。它被接受但是不起作用,或者在發佈新行時發佈錯誤消息。 我想插入create_date並獲得自動安裝的anomes。我怎樣才能做到這一點 ?

對不起這裏是觸發defenition:

CREATE TRIGGER `anomes` AFTER INSERT ON `formulario` FOR EACH ROW BEGIN 
UPDATE formulario SET ano = EXTRACT(year FROM create_date); 
UPDATE formulario SET mes = EXTRACT(month FROM create_date); 
END; 

和表:

-- Dumping structure for table at.formulario 
CREATE TABLE IF NOT EXISTS `formulario` (
    `id` int(10) NOT NULL AUTO_INCREMENT, 
    `uniqid` varchar(38) DEFAULT NULL, 
    `create_date` date DEFAULT NULL, 
    `ano` int(4) DEFAULT NULL, 
    `mes` int(2) DEFAULT NULL, 
    `codcliente` int(8) DEFAULT NULL, 
    `tipo_act` int(1) DEFAULT NULL, 
    `contacto_nome` varchar(50) DEFAULT NULL, 
    `contacto_funcao` int(1) DEFAULT NULL, 
    `contacto_telefone` varchar(20) DEFAULT NULL, 
    `cara_cli_abc` int(1) DEFAULT NULL, 
    `cara_cli_estado` int(1) DEFAULT NULL, 
    `cara_cli_tipo_est` int(3) DEFAULT NULL, 
    `cara_cli_sazonal` int(1) DEFAULT '0', 
    `loc_inst_piso` varchar(5) DEFAULT NULL, 
    `loc_inst_acesso` int(1) DEFAULT NULL, 
    `loc_inst_data_vistoria` date DEFAULT NULL, 
    `loc_inst_data_inter` date DEFAULT NULL, 
    `loc_inst_time_vistoria_start` time DEFAULT NULL, 
    `loc_inst_time_vistoria_end` time DEFAULT NULL, 
    `loc_inst_time_inter_start` time DEFAULT NULL, 
    `loc_inst_time_inter_end` time DEFAULT NULL, 
    `check_list_p_agua` int(1) DEFAULT '0', 
    `check_list_t_agua` int(1) DEFAULT '0', 
    `check_list_p_dist` varchar(3) DEFAULT NULL, 
    `check_list_obs` text, 
    `final_obs` text, 
    `vendedor` int(4) DEFAULT NULL, 
    `dt_aceito` int(1) DEFAULT NULL, 
    `bonus` text, 
    `anulado` tinyint(1) DEFAULT '0', 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
+0

如何顯示觸發器定義?我們不會爲你寫一篇,但會嘗試幫助解決你迄今爲止所做的一切。 – 2012-02-23 16:26:45

+0

你使用的確切代碼是什麼?我的意思是以「'create trigger'」開始的那一行。請參閱http://dev.mysql.com/doc/refman/5.0/en/trigger-syntax.html – Nanne 2012-02-23 16:27:39

+0

您可以爲您的問題添加表和觸發器定義嗎?我希望你發佈的查詢不是''formulario'表上的觸發體...... – a1ex07 2012-02-23 16:27:59

回答

0

的問題是,你不能修改調用此觸發器的表。這是一個限制。

嘗試使用BEFORE INSERT觸發器並在插入數據之前設置新值。例如:

CREATE TRIGGER anomes 
BEFORE INSERT 
ON formulario 
FOR EACH ROW 
BEGIN 
    SET NEW.ano = EXTRACT(year FROM NEW.create_date); 
    SET NEW.mes = EXTRACT(month FROM NEW.create_date); 
END 

而問題 - 你爲什麼要將這些數據存儲在表中?你可以在SELECT查詢中快速計算它。

+0

坦克它的工作:)我只使用它,因爲é需要在不支持視圖或查詢的另一個軟件上的那些字段...只是讀取數據,因爲它是... – user1228825 2012-02-23 17:19:28