数据库排它操作(2)

WBOY
Lepaskan: 2016-06-07 16:10:27
asal
1187 orang telah melayarinya

续: 排它操作不仅仅 FOR UPDATE 就可以,它还需要一个更新标志。 举个例子: 要 更新数据表TABLE表,表中字段ID为主键。然后A进行了如下操作 SELECT ID FROM TABLE WHERE * FOR UPDATE UPDATE TABLE SET * WHERE ID=*; A先锁了符合条件的数据,然后进行了更

续:

排它操作不仅仅 FOR UPDATE 就可以,它还需要一个更新标志。

举个例子:

要 更新数据表TABLE表,表中字段ID为主键。然后A进行了如下操作

SELECT ID FROM TABLE WHERE * FOR UPDATE
Salin selepas log masuk

UPDATE TABLE SET * WHERE ID=*;
Salin selepas log masuk
A先锁了符合条件的数据,然后进行了更新操作,之后是COMMIT之类的。

问题来了:

TIME1时刻,A了解到数据库TABLE表ID=1的列不符合状况,他在TIME2时刻准备执行上面的操作进行修改; 但是B也查到了这个状况,却在TIME1.5的时刻完成了TABLE的更改;这时候A修改的就是B改过后的数据。

解决:

需要一个参照标志,假设为UPD字段。

A要修改表中ID=1的数据,需要先进行查询ID=1数据对于的UPD字段的值;

SELECT UPD FROM TABLE WHERE ID=1
Salin selepas log masuk

假设查找的UPD值为 vals=2014/11/14 1:04;

SELECT ID FROM TABLE WHERE ID=1 AND UPD=vals FOR UPDATE 
Salin selepas log masuk

之后进行更新操作就没有问题了。

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!