在 MySQL 中更新触发器

标签: 触发器 MySQL PHP
发布时间: 2017/4/9 22:40:47
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.
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,你能帮我出这一请。

我需要更新"dataachitat"列的每一行都有"achitat"值设置为 1 的 currentdate 次

出埃及记让我们说的第一个项目受更新脚本和 achitat 值设置为 1,我需要那一行将被自动设置为 currentdate 的"dataachitat"列。

请你帮帮我

干杯 !

解决方法 1:

A 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 ,et al.)

注︰BEFORE UPDATE触发器将只被"解雇"当 UPDATE 语句影响到表中的行时,它不会被解雇,当向表插入行。你将需要相当于 BEFORE INSERT 要做同样的事情在插入触发器。

注︰IF在触发器主体中的语句检查是否 achitat 列的值为 1; 它不会检查是否以前的 (旧) 值是不是 1。那就是, IF 还是 achitat 改为 1,如果它已经是 1 将计算结果为 TRUE。

如果你只想要执行 achitat 列是否改为1 从一些其他值设置的操作,你可以做这样的事情︰

  IF (NEW.achitat = 1 AND (OLD.achitat <> 1 OR OLD.achitat IS NULL)) THEN
官方微信
官方QQ群
31647020