У меня есть большая таблица с идентификатором учетной записи, идентификатором устройства, отметкой времени в качестве первичных ключей и множеством полей с разными типами данных. Таблица очень активна, новые от 50 до 80 строк добавляются каждую секунду сервером JAVA, который получает данные из Интернета.
Теперь мне нужно клонировать несколько новых строк при вставке новой строки с определенным идентификатором учетной записи и идентификатором устройства и изменить поле идентификатора учетной записи на клоне на новое.
Я новичок в триггерах MySQL. Может ли спусковой крючок выстрелить сам? «Мне не нужен сам триггер, но поскольку клонированная строка будет добавлена в ту же таблицу, возможно, это произойдет», - подумал я.
1 ответ
Вы не можете сделать это внутри триггера, потому что триггер не может выполнять запросы к таблице, для которой он был запущен.
Одним из решений может быть создание хранимой процедуры, которую ваше приложение будет вызывать, когда ему нужно вставить данные. Затем процедура вставит две записи.
Так что-то вроде:
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 ;
Это предполагает, что в таблице есть два дополнительных столбца после столбцов первичного ключа. Вы можете адаптировать это в соответствии со структурой вашей таблицы.
Похожие вопросы
Новые вопросы
mysql
MySQL - это бесплатная система управления реляционными базами данных с открытым исходным кодом (RDBMS), использующая язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. Д. Это разные БД, которые все используют свои собственные диалекты SQL для управления данными.