MYSQL触发麻烦
问题描述:
我想打一个触发器来做到这一点:MYSQL触发麻烦
UPDATE formulario
SET ano = EXTRACT(year FROM create_date),
mes = EXTRACT(month FROM create_date)
,但我得到了很多麻烦使得它。它被接受但是不起作用,或者在发布新行时发布错误消息。 我想插入create_date
并获得自动安装的ano
和mes
。我怎样才能做到这一点 ?
对不起这里是触发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;
答
的问题是,你不能修改调用此触发器的表。这是一个限制。
尝试使用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
如何显示触发器定义?我们不会为你写一篇,但会尝试帮助解决你迄今为止所做的一切。 – 2012-02-23 16:26:45
你使用的确切代码是什么?我的意思是以“'create trigger'”开始的那一行。请参阅http://dev.mysql.com/doc/refman/5.0/en/trigger-syntax.html – Nanne 2012-02-23 16:27:39
您可以为您的问题添加表和触发器定义吗?我希望你发布的查询不是''formulario'表上的触发体...... – a1ex07 2012-02-23 16:27:59