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

09-25 17:16
查看更多