问题描述
- select的时候就能开始排他的问题
-
用ADO操作sybase的表。其中有一张登陆表。原则上应该只有1条记录
但是两个人同时登陆的时候,因为没有主键,只有姓名所以同时2条数据被登陆进去了我的做法是
一开始select * from 表 holdlock
但是holdlock后两个人都有读的权限。
然后2个人都发现表里没数据,开始insert
insert的时候排他。一个人insert提交完之后另一个人insert
结果就变成了2条数据。有没有方法在一个人select的时候就把表给排他。另一个不能同时select
只有当一个人select,insert全操作完了,另一个人才开始select
解决方案
你的脚发痒了,你选择把脚剁掉,然后残废了,没法走路了,问如何能不要残废。这是多么荒谬的事情。
任何数据库的表,不同于excel和word中的表,都必须有一个主键,并且这个主键不要是任何和业务相关的字段(比如姓名),这是起码的常识。
你意识到最初的设计就有问题,你不去解决,而是越绕越复杂。
解决方案二:
你这样子做不是很好的解决方案。数据库在执行update、insert操作的时候本身就是加锁的,查询的时候如果强制性的加锁,比如加上 for update,则别人对表无法操作。
这样的解决方案应该由应用逻辑去处理,而不是直接使用数据库的“锁”来解决。
时间: 2024-10-27 01:57:05