Heim > Datenbank > MySQL-Tutorial > 数据库排它操作(2)

数据库排它操作(2)

WBOY
Freigeben: 2016-06-07 16:10:27
Original
1223 Leute haben es durchsucht

续: 排它操作不仅仅 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
Nach dem Login kopieren

UPDATE TABLE SET * WHERE ID=*;
Nach dem Login kopieren
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
Nach dem Login kopieren

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

SELECT ID FROM TABLE WHERE ID=1 AND UPD=vals FOR UPDATE 
Nach dem Login kopieren

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

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage