在mysql中运行更新查询后返回更新的值

时间:2014-09-22 08:30:58

标签: php mysql sql codeigniter

对不起,如果这个问题看似奇怪而愚蠢,但我需要知道它是否可能或是什么。

所以 我有以下查询更新请求表中的请求记录的状态。

$updateQ = "UPDATE requests SET status = status+1 WHERE rid = '$rid'";
if($this->db->query($updateQ))
    return $this->db->select('status')->from('requests')->where('rid', $rid)->get()->row('status');

我想知道在执行查询后是否可以立即获取更新的状态字段的值而不运行其他选择查询。

2 个答案:

答案 0 :(得分:2)

不,你不能。我不明白,为什么你担心它。我猜,rid是你的主键。因此,SELECT之后应该如此之快,以至于你几乎不会注意到它。

答案 1 :(得分:2)

您应该使用SELECT FOR UPDATE(对于mySQL)或类似的东西来更新和选择最后一个值来实现原子性。

SELECT counter_field FROM child_codes FOR UPDATE;
UPDATE child_codes SET counter_field = counter_field + 1;

或使用LAST_INSERT_ID()如果您希望获得更新的最后插入ID。

UPDATE counters
SET value = LAST_INSERT_ID(value) + 1
WHERE id = 1;

然后

SELECT LAST_INSERT_ID();

通读select-update-single-statement-race-condition

谢谢, ķ