Как создать триггер mysql на новую строку? - PullRequest
1 голос
/ 25 октября 2019

У меня есть большая таблица с accountID, deviceID, отметкой времени в качестве первичных ключей и множеством полей с разными типами данных. Таблица очень активна, новые 50–80 строк добавляются каждую секунду сервером JAVA, который получает данные из Интернета.

Теперь мне нужно клонировать несколько новых строк, когда новая строка с определенным accountID и deviceIDвставьте и измените поле accountID на клоне новым.

Я новичок с триггерами MySQL. Может ли курок выстрелить сам? Мне не нужен сам триггер, но поскольку клонированный ряд будет добавлен к той же таблице, возможно, это может произойти, подумал.

1 Ответ

0 голосов
/ 25 октября 2019

Вы не можете сделать это внутри триггера, потому что триггер не может выполнять запросы к таблице, по которой он был запущен.

Одним из решений будет создание хранимой процедуры, которую ваше приложение будет вызывать, когда это необходимовставить данные. Затем процедура вставит две записи.

Что-то вроде:

DELIMITER $$

CREATE PROCEDURE my_insert_proc(
    IN p_accountID INT, 
    IN p_deviceID INT, 
    IN p_timestamp DATETIME,
    IN p_col1 VARCHAR(20),
    IN p_col2 VARCHAR(50)
)
BEGIN
    DECLARE p_accountID_new INT;

    -- "regular" insert
    INSERT INTO mytable(accountID, deviceID, timestamp, col1, col2) 
        VALUES(p_accountID, p_deviceID, p_timestamp, p_col1, p_col2);

    SET p_accountID_new = ... -- whatever you need
    -- "clone" insert
    INSERT INTO mytable(accountID, deviceID, timestamp, col1, col2) 
        VALUES(p_accountID_new, p_deviceID, p_timestamp, p_col1, p_col2);
END
$$

DELIMITER ;

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

...