请问多线程数据库程序怎么保证线程安全 问题是这样子:多台电脑(或一台电脑中的多个线程)分别从服务器读取数据,并将数据修改后写回数据库。但如果在写入服务器时服务器内数据和本机读取时不一致,则写入操作被拒绝。这项功能怎么实现?比如:原数据为1,A机读取数据库,B机读取数据库,A机将数据库内容改为2成功,B机申请将数据改为3时发现数据已经被修改过,故修改申请被拒绝。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果是B/S形式的那可以通过在你说的表中添加一个SESSION_ID的标识,并添加一个字段表明目前的操作,比如“编辑”、“已保存”A申请对数据进行更改,首先查询SESSION_ID是否有值,有值的情况下,查询SESSION_ID是否过期(这个不涉及数据库操作了,请自行根据你的WEB服务器进行响应操作),如果已经过期,则把当前SESSION_ID修改为A的SESSION_ID,并把操作字段修改为“编辑”如果A编辑完并提交编辑修改,则把操作字段修改为“已保存”(或者直接把SESSION_ID清空)A编辑期间,如果B发起修改申请,则一样先查询是否有SESSION_ID,已存在,且SESSION_ID未过期,再查询操作字段是否为“编辑”,如果3者都满足的话,则返回提示,告诉B现在无法对该数据进行修改 这叫乐观锁定技术。SELECT ...OLD_VALUE=MODIFY_KEY....交互性操作....提交的时候BEGINUPDATE XXX SET MODIFY_KEY=NEW_VALUE WHERE ID=XXX AND MODIFY_KEY=OLD_VALUE-- 如果MODIFY_KEY被人修改, 这行UPDATE的 ROWCOUNT为零IF ROWCOUNT=0 THEN ROLLBACKELSE COMMITEND mysql远程连接数据库 导入远程sql文件,如何做? postgresql libpq问题 MySQL-涉及到PROCEDURE的中文乱码问题. MYSQL 字段值过滤 怎样创建 请教:关于MYSQL 一条删除数据库命令 求高手给个select语句,超难!!!!!!! 为什么我在mysql中不能建一个可以从任何机子都能登录的帐号 如何增加mysql的连接数据,和查看目前使用了多少连接数! mysql的子查询 postgresql:Cannot parallelize that UPDATE yet 求两张表的count的和的sql语句
那可以通过在你说的表中添加一个SESSION_ID的标识,并添加一个字段表明目前的操作,比如“编辑”、“已保存”
A申请对数据进行更改,首先查询SESSION_ID是否有值,有值的情况下,查询SESSION_ID是否过期(这个不涉及数据库操作了,请自行根据你的WEB服务器进行响应操作),如果已经过期,则把当前SESSION_ID修改为A的SESSION_ID,并把操作字段修改为“编辑”
如果A编辑完并提交编辑修改,则把操作字段修改为“已保存”(或者直接把SESSION_ID清空)
A编辑期间,如果B发起修改申请,则一样先查询是否有SESSION_ID,已存在,且SESSION_ID未过期,再查询操作字段是否为“编辑”,如果3者都满足的话,则返回提示,告诉B现在无法对该数据进行修改
OLD_VALUE=MODIFY_KEY
....
交互性操作
....提交的时候
BEGIN
UPDATE XXX SET MODIFY_KEY=NEW_VALUE WHERE ID=XXX AND MODIFY_KEY=OLD_VALUE
-- 如果MODIFY_KEY被人修改, 这行UPDATE的 ROWCOUNT为零
IF ROWCOUNT=0 THEN
ROLLBACK
ELSE
COMMIT
END