Я пытаюсь создать триггер mySql.
Таблица program_user выглядит следующим образом:
user_id |ID_программы |неделя |max_week |is_active |
Моя цель - поддерживать целое число от max_week
всегда равным или превышающим week
. Поскольку week
может быть сброшен пользователем, мне нужно сохранить его лучший прогресс.
Строки уже созданы и обновляются тремя различными способами:
- сервером (+1 к фактической неделе)
- , сброшенный пользователем (
week
=1) - установленный администратором
Я попытался несколько кодов с помощью после обновления, чтобы обновить саму строку, но ни один из них, кажется, не работает. Google, похоже, не находит ни одного подобного случая, ни stackOverflow: (
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";
CREATE TABLE `program_user` (
`user_id` int(11) NOT NULL,
`prog_id` int(11) NOT NULL,
`week` int(11) DEFAULT NULL,
`max_week` int(11) NOT NULL DEFAULT '1',
`active` tinyint(4) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `program_user` (`user_id`, `prog_id`, `week`, `max_week`, `active`) VALUES
(6967, 1, 2, 2, 1),
(6967, 2, 2, 4, 0),
(6967, 3, 1, 1, 0),
(6967, 4, 1, 1, 0),
(6967, 5, 1, 1, 0),
(6968, 1, 1, 1, 1),
(6968, 2, 1, 1, 0),
(6968, 3, 1, 1, 0),
(6968, 4, 1, 1, 0),
(6968, 5, 1, 1, 0);
DELIMITER $$
CREATE TRIGGER `trigg_max_week1` BEFORE UPDATE ON `program_user` FOR EACH ROW BEGIN
IF new.week >= old.max_week THEN
SET new.max_week = new.week;
END IF;
END
$$
DELIMITER ;
ALTER TABLE `program_user`
ADD UNIQUE KEY `user_idpk` (`user_id`,`prog_id`);
COMMIT;
, затем обновление:
UPDATE `program_user` SET `week` = '5' WHERE `program_user`.`user_id` = 6967 AND `program_user`.`prog_id` = 2;
результат: нет ошибки ни при сохранении триггера, ни при обновлении столбца недели, однакопосле обновления столбец max_week остается в своем исходном состоянии.
Спасибо:)