MySQL Insert Trigger: проверка на наличие дублирующихся записей перед выполнением

232
Jan

У меня есть триггер, выполняющий «копирование» записей из моей базы данных Home Assistant (ПО для домашней автоматизации) в другую таблицу в другой БД. Home Assistant хранит записи в таблице под названием «состояния». Если есть новая запись для entity_id моей Wi-Fi-шкалы Nokia (Withings), я хочу скопировать ее значения в мою таблицу «здоровья» в БД «home». Пока все хорошо, работает с помощью этого триггера:

BEGIN IF new.entity_id = '[my_wifi_scale]' THEN INSERT INTO my_db.health (user, datetime, metric, val1, val2) VALUES ('[my_username]', new.last_changed, 'weight', new.state, JSON_EXTRACT(new.attributes, '$.fat_ratio')); END IF; END 

Теперь я хотел бы проверить, существует ли новая запись. Home Assistant регулярно получает значения и не заботится о том, являются ли данные избыточными.

Как я могу изменить триггер так, чтобы он вставлял значение в мою таблицу «health» только в том случае, если поля «user», «val1» и «val2» отличаются от предыдущей записи? Мне все равно, проверяет ли он таблицу триггера («состояния» Home Assistant) или мою («здоровье»).

Я попытался добавить ограничения к моей таблице «работоспособности», но это не соответствует другим значениям, хранящимся в ней, например, значениям артериального давления, которые с большей вероятностью будут повторяться. Поэтому я ищу изменения в триггере.

Есть идеи?

С уважением.

1
`ЕСЛИ (ВЫБЕРИТЕ СЧЕТЧИК (*) ИЗ ЗДОРОВЬЯ ГДЕ пользователь = NEW.user И val1 = NEW.val1 И val2 = NEW.val2) = 0 THEN` Akina 6 лет назад 0
@ Акина: Спасибо! Работает отлично! Jan 6 лет назад 0

0 ответов на вопрос