我的项目中有多个程序(独立的主函数程序)对sql server中的表进行查询和插入操作,然后总是导致死锁,有没有什么办法解决这个问题,或者说是否有方法能在在项目执行插入或者查询操作时先判定什么状态然后再决定是否插入。谢谢大家了
并发去操纵一张表,会产生表锁或行锁,以下几种方案可以尝试
1.查询语句from后的表名加with(nolock),即select * from table with(nolock),也许会产生脏数据
2.对数据库或表做读写分离
3.使用Redis、memcache之类的缓存,读数据时通过缓存,写数据时通过数据库
本质上应该还是代码写的不合理,或者是架构设计不合理。
插入的时候可以查一下触发器的用法,至于查询,不知道你想做什么。
就是比如查询用户信息,然后另一个程序或多个程序进行了插入,此时产生循环等待
开事务了吧?
没有啊,我就是普通的try..catch中进行数据库操作,可能因为多个程序操作一个表然后产生了循环等待情况
这种一般做读写分离比较合适,这样就不会有死锁了
不过表都是在一张啊,这个比较纠结
使用读写分离redis集群缓存
【滑稽】要不要试试 NoLock
比如 select xx from TableName with(nolock)
nolock还有兄弟。可以去自己百度。(逃
insert也是这样么。这样会不会对数据表有危险。
@Boblim: insert 不用。sql语句如果能把表玩坏,你可以告微软去了。
查询语句中表后面加 with nolock