【发布时间】:2020-04-30 23:58:34
【问题描述】:
我正在使用 mysql,并且我有一个具有以下结构的表(摘要):
CREATE TABLE `costs` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`utility` DECIMAL(9,2) UNSIGNED NOT NULL,
`tax` DECIMAL(9,2) UNSIGNED NOT NULL,
`active` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1',
`created_at` TIMESTAMP NULL DEFAULT NULL,
`updated_at` TIMESTAMP NULL DEFAULT NULL,
PRIMARY KEY (`id`),
)
插入时活动字段默认为 1,然后我想在保存新记录时所有其他行都将活动字段更新为 0,所以我尝试为此创建触发器,但出现 mysql 错误。
DELIMITER //
CREATE TRIGGER after_costs_insert AFTER INSERT ON costs FOR EACH ROW
BEGIN
UPDATE costs SET active = 0 WHERE id <> NEW.id;
END;
//
DELIMITER ;
我认为不可能做到这一点,那么如何更新这些行?
【问题讨论】:
-
如果您总是希望最后一行处于活动状态,为什么还需要这个活动列?每次插入后更新每一行的成本很高,因此您可以缓存活动的行 ID。
标签: mysql sql database sql-insert database-trigger