高并发MSSQL数据库,如何避免增加进来重复值? 高并发MSSQL数据库,在增加记录前,程序均先判断数据库是否存在了某个值,但是在这种情况下,总有重复的值被加进来,该如何解决? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你最起码要有个主键吧?没有主键怎么判断重复呢?可以考虑加一个Identity列 我没说清楚,应该不是插入记录,是更新记录,比如,update tab set a='1,2,3,4...',后面的'1,2,3,4...'是更新的值,不能有重复的,比如现在老被更新成类似'1,2,2,3,4...'等等的,就不对了,我举个例子而已,希望大家知道我的意思就行了。我在更新前都判断了,这个字段是否有这个的值了,但是还有被增加进来重复的。 这个在数据库里比较难实现,因为你需要锁定的是还不存在的值,而不是已经存在的记录。比如现在第一个会话里需要把某条记录的这个字段改为'111',而另一个会话中需要把另一条记录的这个字段也改成‘111’,由于是并发的更新操作,在更新时这2个会话,确实会分别锁定它们各自需要修改的那条记录,但是这2条记录的这个字段的值,就都改为了‘111’。所以如果需要update后,这个字段的值在整个表中不重复,那么需要考虑的就是如何顺序化分配update时的这个新的值'xxx',如果第一个会话需要update这个表里的一条记录,那么给他分配'111',而第二个会话也需要update这个表里的另一条记录,那么就给他分配成'222',这样才能使得不重复。所以像上面说的,如果在客户端做控制,就是在每次更新值时,需要更新的值,都有一个线程集中分配,这样才有可能使得update的值不重复 如果不在客户端控制,那么就在这个字段上建一个唯一索引:create unique index 索引名称 on 表名称(更新的这个字段) 大家还是理解错了。更新的时候,是这样,每次增加进来一个数值,比如原来是1,2,现在更新后可以是1,2,3,或者是1,2,4,但是不能是类似的1,2,2,或者1,2,3,3这样的,因为,2或3值中已经存在了。目前的情况是,老存在这样重复的,我更新前,先是select这个字段,看看是否存在了这个数值,存在就不增加到后面,否则就增加到后面,可是现在总是偶尔就增加进来个重复的。 declare @str varchar(20)set @str='3,'update TB set F=F+'3,'where charindex(','+@str,F)=0这样就会不重复了 我是SQL盲,求一SQL语句 SQl语句 如何实现下面要求 求sql语句 SQL Server怎样实现异地备份,超级菜鸟请详解 其实向"数据库技术"方向发展,到底有几个方向啊,各位前辈?我熟知的是dba 可以查询本机的IP和服务器名称的语句或者系统函数 紧急求助!请多指教! 我已经安装好了MSDE,但我不知道怎么使用? 简单急问题!截断变量小数位数! sql server不能启动服务了 请教一个日期计算sql----------多谢了! 谢谢:我想请教一个数据拆分的问题!
更新的时候,是这样,每次增加进来一个数值,比如原来是1,2,现在更新后可以是1,2,3,或者是1,2,4,但是不能是类似的1,2,2,或者1,2,3,3这样的,因为,2或3值中已经存在了。目前的情况是,老存在这样重复的,我更新前,先是select这个字段,看看是否存在了这个数值,存在就不增加到后面,否则就增加到后面,可是现在总是偶尔就增加进来个重复的。
set @str='3,'
update TB set F=F+'3,'
where charindex(','+@str,F)=0
这样就会不重复了