我有以下触发器:
DELIMITER $$
CREATE TRIGGER user_update_trigger BEFORE UPDATE ON `users` FOR EACH ROW
BEGIN
IF (NEW.type != OLD.type or NEW.agency_name != OLD.agency_name) and NEW.type = 'INDEPENDENT' THEN
SET NEW.agency_name = NULL;
END IF;
END;
$$
DELIMITER ;
只要NULL
为agency_name
,type
字段就应保留INDEPENDENT
值。只有当我将agency_name
设置为除NULL
以外的任何其他内容时,它才会按预期工作,例如SET NEW.agency_name = 'some value’
。
我该如何解决这个问题?
2016年2月22日更新:
CREATE TABLE `users` (
`id` int(11) NOT NULL,
`created` datetime NOT NULL,
`modified` datetime NOT NULL,
`username` varchar(20) NOT NULL,
`password` varchar(60) NOT NULL,
`type` enum('INDEPENDENT','AGENCY') NOT NULL,
`agency_name` varchar(150) DEFAULT NULL,
`foto` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `users` ADD PRIMARY KEY (`id`);
ALTER TABLE `users` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
INSERT INTO `users` (`id`, `created`, `modified`, `username`, `password`, `type`, `agency_name`, `foto`) VALUES (NULL, NOW(), NOW(), '1234567', '1234567', 'INDEPENDENT', NULL, '')
现在,如果您更新agency_name
字段,它会更新。
UPDATE users SET agency_name = '12312’;
但如果您在触发器中设置了NEW.agency_name = 'some'
,则值会更新为某些'。
答案 0 :(得分:1)
感谢@wchiquito,3.3.4.6 Working with NULL Values真的很有帮助,!(firstValue <=> secondValue)
就行了。
DROP TRIGGER IF EXISTS user_update_trigger;
DELIMITER $$
CREATE TRIGGER user_update_trigger BEFORE UPDATE ON `users` FOR EACH ROW
BEGIN
IF (NEW.type != OLD.type or !(NEW.agency_name <=> OLD.agency_name)) and NEW.type = 'INDEPENDENT' THEN
SET NEW.agency_name := NULL;
END IF;
END $$
DELIMITER ;