Я пытаюсь создать триггер для обновления таблицы (клиента) после вставки в другую таблицу (счет-фактуру), вот где я застрял:
delimiter |
CREATE TRIGGER after_insert_invoice AFTER INSERT ON invoice FOR EACH ROW
BEGIN
SET @TIME=new.paid_time
SET @id=new.id_customer
UPDATE customer SET bank_time = bank_time + @TIME WHERE id = @id
END |
delimiter ;
Я ожидаю всего 01:30:00, когда bank_time = 00:00:00 и paid_time = 01:30:00. Но это устанавливает bank_time в NULL, и я не могу понять, почему.
Вот структуры таблиц:
CREATE TABLE `customer` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`bank_time` TIME NULL DEFAULT '00:00:00',
`country` VARCHAR(25) NULL DEFAULT NULL,
`NAME` VARCHAR(25) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
;
CREATE TABLE `invoice` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`paid_time` TIME NULL DEFAULT NULL,
`id_customer` INT(11) NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `id_customer` (`id_customer`),
CONSTRAINT `invoice_ibfk_1` FOREIGN KEY (`id_customer`) REFERENCES `customer` (`id`)
)
ENGINE=InnoDB
;
По некоторым причинам я не могу комментировать, но вот что я попробовал после ответа @GMB, но все же без удачи:
delimiter |
CREATE TRIGGER after_insert_invoice AFTER INSERT ON invoice FOR EACH ROW
BEGIN
SET @TIME = new.paid_time,
SET @identif = new.id_customer,
UPDATE customer SET bank_time = ADDTIME(COALESCE(bank_time, 0), @TIME) WHERE id = @identif;
END |
delimiter ;