#mysql #datetime #triggers
Вопрос:
У меня есть таблица с именем three_current. эти таблицы вставляются с 3 новыми строками каждые 1 минуту из другого приложения, поэтому таблицы продолжают увеличиваться в строках. Эти три новые строки всегда имеют номер канала 350, 351 и 352. Я хочу, чтобы триггер вставлял каждую из этих трех строк в три отдельные таблицы, чтобы каждая таблица содержала данные с одинаковым номером канала.
Таблицы three_current как таковые:
таблица трехточечных потоков
дата и время | номер канала | Ценность | Статус |
---|---|---|---|
01/06/2021 22:45:00 | 350 | 100 | 1 |
01/06/2021 22:45:00 | 351 | 120 | 1 |
01/06/2021 22:45:00 | 352 | 110 | 1 |
01/06/2021 22:46:00 | 350 | 95 | 1 |
01/06/2021 22:46:00 | 351 | 105 | 1 |
01/06/2021 22:46:00 | 352 | 150 | 1 |
01/06/2021 22:47:00 | 350 | 195 | 1 |
01/06/2021 22:47:00 | 351 | 205 | 1 |
01/06/2021 22:47:00 | 352 | 250 | 1 |
У меня также есть три другие таблицы с именами red_current, yellow_current и blue_current. Я безуспешно пытаюсь создать триггер для обновления этих трех таблиц на основе номера канала таблицы three_current, чтобы
таблица red_current будет
дата и время | номер канала | Ценность | Статус |
---|---|---|---|
01/06/2021 22:45:00 | 350 | 100 | 1 |
01/06/2021 22:46:00 | 350 | 95 | 1 |
01/06/2021 22:47:00 | 350 | 195 | 1 |
таблица yellow_current будет
дата и время | номер канала | Ценность | Статус |
---|---|---|---|
01/06/2021 22:45:00 | 351 | 120 | 1 |
01/06/2021 22:46:00 | 351 | 105 | 1 |
01/06/2021 22:47:00 | 351 | 205 | 1 |
таблица blue_current будет
дата и время | номер канала | Ценность | Статус |
---|---|---|---|
01/06/2021 22:45:00 | 352 | 110 | 1 |
01/06/2021 22:46:00 | 352 | 150 | 1 |
01/06/2021 22:47:00 | 352 | 250 | 1 |
Но что я получаю после выполнения своего кода, так это то, что таблицы red_current, yellow_current и blue_current вставляются со строками, в которых номер канала равен 350. Это означает, что правильна только таблица red_current, в то время как две другие таблицы являются дубликатами таблицы red_current. (Я чувствую, что мой код может выполняться только для первой строки каждого обновления, полученного таблицей three_current, и это строка с номером канала 350).
Мой код выглядит следующим образом:
DELIMITER //
CREATE TRIGGER `add` AFTER INSERT ON `three_current`
FOR EACH ROW
BEGIN
DECLARE new_datetime datetime ; -- choose the datatypes
DECLARE new_channel_number int; --
DECLARE new_value double; --
DECLARE new_status smallint; --
SET new_datetime = new.datetime ;
SET new_channel_number = new.channel_number ;
SET new_value = new.value ;
SET new_status = new.status;
INSERT INTO red_current (datetime, channel_number, value, status)
SELECT new.datetime, new.channel_number , new.value, new.status
FROM three_current WHERE channel_number = '350'
ON DUPLICATE KEY UPDATE status = new.status;
INSERT INTO yellow_current (datetime, channel_number, value, status)
SELECT new.datetime, new.channel_number , new.value, new.status
FROM three_current WHERE channel_number = '351'
ON DUPLICATE KEY UPDATE status = new.status;
INSERT INTO blue_current (datetime, channel_number, value, status)
SELECT new.datetime, new.channel_number , new.value, new.status
FROM three_current WHERE channel_number = '352'
ON DUPLICATE KEY UPDATE status = new.status ;
END
//
DELIMITER ;
Комментарии:
1. MySQL <> SQL Server. Пожалуйста, в будущем избегайте несвязанных тегов.
2. Вы забыли объяснить, с какой проблемой вы сталкиваетесь из-за того, что у вас есть…