在C/S结构当中如何避免多用户同时插入同一条记录?
假设有多个用户都可以录入记录,但是记录不可重复(没有设在主键约束里)
一个用户刚刚插入一条记录,还没有提交,而另一个用户同时也插入这条记录
(他首先查询有没有这条记录,如果没有则插入),于是我们不期望出现事情出现了
(同一条记录在表里插入了两次),如何搞定?
我用Delphi的控件的事务(事务本身是不是有锁的机制?)试了一个简单的例子,好像不行,是不是该手动加锁?又该如何加?
谢谢了
假设有多个用户都可以录入记录,但是记录不可重复(没有设在主键约束里)
一个用户刚刚插入一条记录,还没有提交,而另一个用户同时也插入这条记录
(他首先查询有没有这条记录,如果没有则插入),于是我们不期望出现事情出现了
(同一条记录在表里插入了两次),如何搞定?
我用Delphi的控件的事务(事务本身是不是有锁的机制?)试了一个简单的例子,好像不行,是不是该手动加锁?又该如何加?
谢谢了
解决方案 »
- 关于数据更新的问题
- fileclose()与closefile()区别
- delphi兼职薪水问题
- 如何产生一个无重复数的随即数组?
- 请教一个“窗口”问题
- 怎样用SendMessage向窗口发送鼠标移动,点击等操做。
- 如何得到一个类的子类,如:TButtonControl类下有tbutton,TRadioButton等!
- adsl 申请了固定的IP地址,分公司全部上了宽带,老板用GRPS 移动上网 用SCKTSRVR.EXE这种方式进行连接远程可以访问吗?
- adoquery的问题
- 请问在Delphi中如何动态控制Excel中工具栏的显示,请指教。
- 关于用客户端clientdataset提交数据的几个难点问题, 高手请进,分不够可以再加
- 请问spinEdit组件在哪里?
数据库服务器的事务我正在试.....
未果
如果该记录已被其他用户修改,则会导致一个错误,提示在取得记录后,它已经被更新。作为一个开发人员,在设计客户程序时应该考虑到这一点,客户/服务器程序尤其要注意到这种情况,而在桌面数据库中就不会发生。
begin transaction
insert into date with (updlock tablock) (datetime) values ('2008-9-9')
如上,我为了查看锁的情况没有提交,现在表给锁定了,各种操作也不行了
怎么办?
>>(2)使用序列。或者通过数据库来实现序列管理。
到现在我还没明白序列指的是什么,能否明白一些?