数据库排它操作(2)
程序员文章站
2022-05-20 12:59:02
...
续: 排它操作不仅仅 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
UPDATE TABLE SET * WHERE ID=*;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
假设查找的UPD值为 vals=2014/11/14 1:04;
SELECT ID FROM TABLE WHERE ID=1 AND UPD=vals FOR UPDATE
之后进行更新操作就没有问题了。
推荐阅读
-
PHP4 与 MySQL 数据库操作函数详解(2)_MySQL
-
yii2 数据库插入操作怎么传入一个数组
-
MySQL学习笔记2:数据库的基本操作(创建删除查看)
-
数据库中经常用到的操作和管理数据库的语句总结第1/2页
-
数据库中经常用到的操作和管理数据库的语句总结第1/2页
-
PHP_MySQL教程-第二天while循环与数据库操作第1/2页
-
YII2数据库操作出现类似Database Exception – yii\db\Exception SQLSTATE[HY000] [2002] No such file or director
-
EasyASP v1.5发布(包含数据库操作类,原clsDbCtrl.asp)第1/2页
-
YII2框架中操作数据库的方式实例分析
-
db2数据库常用操作命令大全