问题描述
目前有个表,里面sysid是唯一的,但是:这个sysid不是自增的,并且,此字段是不允许修改成自增的。现在有N多人,要从这个表里取sysid最大,然后insertinto到表里数据。有人手快,有人手慢,但是当有两个或者更多人同时获取到同样的最大sysid+1后,insertinto执行一条后,剩下的就不会执行了。请问这种情况怎么解决??我写了一个sql语句,大家看看能不能解决。declare@idint;select@id=max(ID)+1from表;insertinto表(ID,其他字段)values(@id,"+其他字段值+")谢谢大家。
解决方案
解决方案二:
你在新增时对那个表进行表锁不就行了?
解决方案三:
引用1楼starfd的回复:
你在新增时对那个表进行表锁不就行了?
同意,使用数据库锁。你搜索一下“数据库锁机制”就知道是怎么的了。
解决方案四:
我是通过建立一个UID不重复字段,通过返回这个字段,就不会混淆用户间的数据
解决方案五:
通常是写个额外的服务,用来计数当要插入id前,先向这个服务请求一个
解决方案六:
表锁?还不会,哈。我试试。还有没有其他方法??
解决方案七:
或者将你这段sql写成事务,通过事务锁来保证同一时间只能有一段selectmax执行
时间: 2024-11-10 07:04:18