У меня есть следующая проблема.Обновить группу строк, предварительно выбранных с помощью MYSQL и PHP
У меня есть таблица INNODB в базе данных MySql, которая получает непрерывный поток данных.
Таблица имеет составной индекс datetime-deviceID
поле «данные» и поле «отравлены»
Я работаю над сценарием в PHP, что нужно сделать, чтобы:
- Выбрать все строки которые еще не отправлены (отправлено = 0). (php-запрос в MySQL)
- Сохраните выбранные столбцы в массиве PHP. (php)
- Сделайте преобразование на идентификаторе устройства (php)
- Отправьте строки с уникальной вставкой в другую базу данных.
- Обновление с одной операцией все ранее выбранные строки (пункт 1) и обновить поле посланной от 0 до 1.
Моя проблема находится на точке 4, я не могу рисковать, что дополнительные данные прибывают между пункты 1 и 4, это приведет к потере данных, поскольку они никогда не будут отправляться в таблицу приемников.
Для того, чтобы я предположил, что нужно заблокировать стол до точки 1, пока все процедуры не закончатся, но я немного новичок в транзакции, и мне нужна помощь.
Я ищу этот код для достижения моих потребностей - правильно ли я?
START TRANSACTION;
SELECT value FROM table WHERE sended = 0 FOR UPDATE;
UPDATE table SET sended = 1 WHERE sended = 0;
COMMIT;
Смогу ли я в состоянии получить с помощью PHP столбцы выбранной формы операции выбора, или тот, на которые влияют на UPDATE и как я могу быть уверен, что столбец из выбора те же обновления?
Я предлагаю вам добавить поле auto_increment в эту таблицу, поэтому на 4-м этапе вы можете установить 'update table set sended = 1 где ID в (...) и sended = 0' –
@IlyaBursov Вы должны сделать ответ. Это не нужно автоматически увеличивать, но предложение IN - это путь. – Crashspeeder