50分求一简单的触发器
表A
字段
ID NAME CREATTIAME UPDATETIME
有多个管理员
假设有两个管理员在同时操作一条记录
当一个管理员操作该记录后
另一个管理员再操作该记录时会提示不能操作
就时两个管理员在操作该记录时取得了同一个UPDATETIME
当UPDATE该记录时
会比较现在该记录的UPDATIME
如果和开始取得的不同
则不能UPDATE
这样当一个管理员先UPDATE了该记录
那另一个管理员再UPDATE时UPDATETIME就和他开始时候取得的不同
求一触发器实现
问题点数:50、回复次数:4Top
1 楼qiaozhiwei(乔)回复于 2006-03-14 14:11:06 得分 15
不需要这么复杂吧,update本来就会产生锁的Top
2 楼flczlxy(幸福的耗子)回复于 2006-03-15 01:08:48 得分 15
楼上的说得没错~
我给你补充和解释一下~
"锁"可以防止在同时访问相同资源的用户之间出现破坏性的交互操作
"锁"分为"行级锁"和"表级锁"
当一个用户进行insert,update,select...for update等时候自动获得"行级锁"
当用户进行提交(commit)或者回退(rollback)等操作的时候,"锁"将被释放
"表级锁"又分为"共享锁","公象更新锁","排他锁"等
"共享锁":只允许其他用户进行查询操作,并且多用户可以在同一张上面加上此锁
加锁方法:lock table <表名> in share mode;
"共享更新锁":允许其他用户同时查询,插入和更新未被锁定的行
加锁方法:lock table <表名> in share update mode;
"排他锁":只允许其他用户进行查询操作,同一时间只允许一个用户在表上加此锁
加锁方法:lock table <表名> in exclusive mode;
理解了以上含义,相信你就明白了.
在一个用户更新表的时候ORACLE会自动给表上加上行级锁,
其他用户在此用户提交或者回退操作以前是不能操作此表的~
所以也就不必要去专门创建触发器去防止多用户的更新操作了!
前几天上课学到的,希望对你有帮助.
^^Top
3 楼tony_zhaoyun(越向上 越向下)回复于 2006-03-15 10:02:39 得分 0
我的意思时指两个用户要更新的内容一样
但互相不知道
出现的情况是两个用户同时得到了旧数据
当一个用户已经更新并提交后
另一个用户在没有刷新时并不知道
又一次提交了相同的数据
第二个用户的操作是在第一个用户操作执行完毕以后Top
4 楼hxshaou(晓子)回复于 2006-03-21 10:50:17 得分 20
如果第二个用户提交了相同的数据,你在表里最好建立一个主键。这样就不会出错了。
还有你可以用权限控制。第一个用记操作时不允许第二个用户操作。用程序控制。Top




