Я не получаю правильный вывод из MySQL UPDATE Triggers. Я использую MySQL 5.5.30. Моя проблема основана на этом учебнике MySQL Triggers: http://www.sitepoint.com/how-to-create-mysql-triggers/. Я подведу итог сценарию, и вы можете попробовать это на клиенте MySQL.MySQL Trigger UPDATE не запускается
CREATE TABLE `blog` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`title` text,
`content` text,
`deleted` tinyint(1) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `ix_deleted` (`deleted`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='Blog posts';
CREATE TABLE `audit` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`blog_id` mediumint(8) unsigned NOT NULL,
`changetype` enum('NEW','EDIT','DELETE','OTHER') NOT NULL,
`changetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `ix_blog_id` (`blog_id`),
KEY `ix_changetype` (`changetype`),
KEY `ix_changetime` (`changetime`),
CONSTRAINT `FK_audit_blog_id` FOREIGN KEY (`blog_id`) REFERENCES `blog` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
DELIMITER $$
CREATE
TRIGGER `blog_after_update` AFTER UPDATE
ON `blog`
FOR EACH ROW BEGIN
IF NEW.deleted THEN
SET @changetype = 'DELETE';
ELSE
SET @changetype = 'EDIT';
END IF;
INSERT INTO audit (blog_id, changetype) VALUES (NEW.id, @changetype);
END$$
DELIMITER ;
В приведенном выше примере работает триггер «blog_after_update». Результат триггера должен привести к тому, что «EDIT» будет вставлен в строку таблицы аудита. Это работает, потому что обновляется другой столбец, отличный от столбца «удаленный».
Однако я изменил триггер в учебнике немного воспроизвести TRIGGER я был после, как описано ниже:
DELIMITER $$
CREATE
TRIGGER `blog_after_update` AFTER UPDATE
ON `blog`
FOR EACH ROW BEGIN
IF NEW.content THEN
SET @changetype = 'EDIT';
ELSE
SET @changetype = 'OTHER';
END IF;
INSERT INTO audit (blog_id, changetype) VALUES (NEW.id, @changetype);
END$$
DELIMITER ;
По моим данным, это до сих пор приводит в блок ELSE выполняется. Я ожидаю блок IF, то есть 'SET @changetype =' EDIT ';' выполнить.
Может ли кто-нибудь предложить почему?
Спасибо, что: NEW.content <> old.content работал, а не NEW.content – stampkick