Я собираю показания с нескольких тысяч датчиков и сохраняю их в базе данных MySQL. Есть несколько сотен вставок в секунду. Чтобы улучшить производительность вставки, я сохраняю значения изначально в буферной таблице MEMORY. Раз в минуту я запускаю хранимую процедуру, которая перемещает вставленные строки из буфера памяти в постоянную таблицу.
В основном я хотел бы сделать следующее в моей хранимой процедуре, чтобы переместить строки из временного буфера:
INSERT INTO data SELECT * FROM data_buffer;
DELETE FROM data_buffer;
К сожалению, предыдущий не может быть использован, потому что процессы сбора данных вставляют дополнительные строки в «data_buffer» между INSERT и DELETE выше. Таким образом, эти строки будут удалены без вставки в таблицу «data».
Как сделать атомарную операцию или сделать оператор DELETE, чтобы удалить только те строки, которые были ВЫБРАНЫ и ВСТАВЛЕНЫ в предыдущем операторе?
Я бы предпочел сделать это стандартным способом, который работает на разных движках базы данных, если это возможно.
Я бы предпочел не добавлять дополнительные столбцы "id" из-за снижения производительности и требований к хранилищу.
Хотелось бы, чтобы в стандартном SQL или чем-то подобном был оператор SELECT_AND_DELETE или MOVE ...