关于两个程序并发更改一个表(100分)

  • 主题发起人 主题发起人 charlyisme
  • 开始时间 开始时间
C

charlyisme

Unregistered / Unconfirmed
GUEST, unregistred user!
关于两个程序并发更改一个表
两个程序在同一时间要改动同一个表(主要是update),这样做可能导致数据的不一致性。
这里要求在不允许改动库的结构下解决这个问题。(程序中用query.add(sqltxt)的方法
来操作这个表,以前学DB时知道如果采用事务方式操作更改数据库,会自动加锁,
不知道这里采用单sql语句会不会自动加锁。)采用SqlServer2K,Delphi5,
希望采用锁表或者事务操作等比较高级的数据库方式来解决这个问题,
但是不知道有什么方法,怎么实现,各有什么优点,请大侠详解,谢谢!
 
保持多表数据更新的一致性需要用事务,单表就没必要啦,无论采用什么方式修改数据,瞬间加锁是肯定的
用query(update table set ....)方式是一种选择,不需考虑数据锁,系统会自动处理好它的
 
宏观上是并发的而已
 
可能是意思没有表达清楚。
两个程序都是select *回来然后处理并update。
系统会自动在第一个程序select*回来之后锁住这个表吗(我没有用事务,而是单个SQL语句)
 
SELECT 语句系统不会自动加锁,需添加人工锁
 
SELECT语句本身不会形成锁,但是query(select...)在有主存表的环境下或在配合dbgird的使用中就不一定啦。
 
请问,怎么“添加人工锁”?
 
所谓“人工锁”就是模拟自动锁的运行方式,有行锁和表锁两种方式
行锁:在数据表中添加一个锁标志字段
表锁:新建一个锁表,记录表ID和锁状态
在更新数据时,先检测锁标志,如没加锁,则先加锁,更新完毕,释放锁;如已加锁,则放弃更新或等待锁释放
 
关于“人工锁”,能否用代码举个例子?谢谢!
 
后退
顶部