CREATE TABLE IF NOT EXISTS `comenzi` (
`idcomanda` int(11) NOT NULL AUTO_INCREMENT,
`iduser` int(11) DEFAULT NULL,
`idprodus` int(11) DEFAULT NULL,
`numepiesa` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`pretunit` int(11) DEFAULT NULL,
`cantitate` int(11) DEFAULT NULL,
`pretftva` int(11) DEFAULT NULL,
`valtva` int(11) DEFAULT NULL,
`total` int(11) DEFAULT NULL,
`nrfactura` int(11) unsigned zerofill DEFAULT NULL,
`achitat` tinyint(4) DEFAULT NULL,
`dataachitat` date DEFAULT NULL,
PRIMARY KEY (`idcomanda`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
嗨,大家好,我有上面提到的表结构,但是我从未在MySQL中做过触发器,请您帮我一个忙。
每当行的“ achitat”值设置为1时,我就需要使用currentdate更新“ dataachitat”列
例如假设第一项受更新脚本的影响,并且achitat值设置为1,我需要将该行的“ dataachitat”列自动设置为currentdate。
请帮帮我
干杯!
最佳答案
BEFORE UPDATE
触发器执行指定的操作将类似于以下内容:
DELIMITER $$
CREATE TRIGGER trg_comenzi_bu
BEFORE UPDATE ON comenzi
FOR EACH ROW
BEGIN
IF NEW.achitat = 1 THEN
SET NEW.dataachitat = DATE(NOW());
END IF;
END$$
DELIMITER ;
(仅在桌面进行检查;关键字的顺序可能存在问题;
BEFORE UPDATE
可能在ON comenzi
之后,等等。)注意:
BEFORE UPDATE
触发器仅在UPDATE语句影响表中的行时才被“触发”,当将行插入表中时将不触发。您需要一个等效的BEFORE INSERT
触发器在INSERT上执行相同的操作。注意:触发器主体中的
IF
语句检查achitat列的值是否为1;否则,该值为0。它不会检查先前的(OLD)值是否不是1。也就是说,无论achitat是否已更改为1,或者是否已经为1,IF
的计算结果均为TRUE。如果只希望在achitat列从其他值更改为1时执行SET操作,则可以执行以下操作:
IF (NEW.achitat = 1 AND (OLD.achitat <> 1 OR OLD.achitat IS NULL)) THEN