У меня есть следующая таблица:
| uid (key) | version (key) | active | firstName |
| 1 | 0 | 0 | Piter |
| 1 | 1 | 0 | Pater |
| 1 | 2 | 1 | Peter |
Как видите, столбцы ID и Версия создают комбинированный ключ. Идентификатор установлен как автоинкремент. Теперь у меня есть две проблемы:
1) Я хотел бы увеличить версию при каждой вставке, которую я выполняю, не читая значение версии последней существующей строки. 2) Я хотел бы установить для всех существующих строк для данного uid значение active = 0, поскольку вставленная запись должна быть активной.
Я попытался объединить оба шага в одном триггере:
DELIMITER $$
CREATE TRIGGER before_member_insert
BEFORE INSERT
ON members FOR EACH ROW
BEGIN
DECLARE version INT;
SELECT MAX(version) INTO version FROM members WHERE uid=new.uid;
IF @version IS NULL THEN
new.version=0
ELSE
UPDATE members SET active=0 WHERE uid=uid;
END IF;
INSERT INTO members(version) VALUES(new.version);
END $$
DELIMITER ;
, но мой MySQL сервер просто говорит:
# 1064 - ошибка в синтаксисе SQL в .version = 0 ELSE UPDATE члены SET active = 0 ГДЕ uid = uid; КОНЕЦ I в строке 8
Можно ли достичь моих целей с помощью триггера? Как мне изменить его, чтобы он работал?
Спасибо!