一个关于SQL SERVER并发的菜鸟级问题(100)

  • 主题发起人 victorfjb
  • 开始时间
V

victorfjb

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在有一个表有两个字段,如下:mytable:name varchar(10)used tinyint,默认值为0,标识未使用我的问题是:现在该表有N条记录,客户端需要从该表中读取出一条记录,将name写入到某个硬件设备,如果写入成功则更新used字段为1。现在有M(M<N)个客户端执行同样的操作,客户端如何处理才能避免同一个name写入两台不同的设备?
 
选写入used 写入前做检查,是否是1如是查,则返回不写不成功,如果写成功则返回Name然后更新硬件,如更新不成功,则将used写入0,这只是简单的lock.
 
我倒,没看懂你说的意思
 
采用事务1.提高事务级别2.把读取与写入设备,写入数据库放在同一事务中
 
读取name后即更新used为1,然后写入设备,如果设备写入失败,再将此name相应的used更新为0
 
得用锁吧,锁定正在操作的记录
 
应该再键一个表table2name carchar(10) PRIMARY KEY NOT Null1.当需要“将name写入到某个硬件设备”前,先查查table2有没有相应的name,如果有则表示有另一进程正在“将name写入到某个硬件设备”2.在table2中插入相应的name,如果操作失败也表明有另一进程正在“将name写入到某个硬件设备”(因为在table2表中name是主键所以不会重复插入)3.若table2插入成功,则“将name写入到某个硬件设备”,并把mytable表的相应used置为14.将table2的相应name删除
 
顶部