我有以下问题。
我在接收连续数据流的 MySql 数据库上有一个表 INNODB。
该表具有复合索引datetime-deviceID
字段“数据”和字段“已发送”
我正在编写一个必须这样做的 PHP 脚本:
- 选择所有仍未发送的行 (sent=0)。(MySQL上的php查询)
- 将选定的列存储在 PHP 数组中。(php)
- 对 deviceID (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 检索从 SELECT 操作中选择的列或受 UPDATE 影响的列,我如何确定 select 的列与更新的列相同?