数码控科技猎奇Iphone动漫星座游戏电竞lolcosplay王者荣耀攻略allcnewsBLOGNEWSBLOGASKBLOGBLOGZSK全部技术问答问答技术问答it问答代码软件新闻开发博客电脑/网络手机/数码笔记本电脑互联网操作系统软件硬件编程开发360产品资源分享电脑知识文档中心IT全部全部分类全部分类技术牛文全部分类教程最新网页制作cms教程平面设计媒体动画操作系统网站运营网络安全服务器教程数据库工具网络安全软件教学vbscript正则表达式javascript批处理更多»编程更新教程更新游戏更新allitnewsJava新闻网络医疗信息化安全创业站长电商科技访谈域名会议专栏创业动态融资创投创业学院 / 产品经理创业公司人物访谈营销开发数据库服务器系统虚拟化云计算嵌入式移动开发作业作业1常见软件all电脑网络手机数码生活游戏体育运动明星影音休闲爱好文化艺术社会民生教育科学医疗健康金融管理情感社交地区其他电脑互联网软件硬件编程开发360相关产品手机平板其他电子产品摄影器材360硬件通讯智能设备购物时尚生活常识美容塑身服装服饰出行旅游交通汽车购房置业家居装修美食烹饪单机电脑游戏网页游戏电视游戏桌游棋牌游戏手机游戏小游戏掌机游戏客户端游戏集体游戏其他游戏体育赛事篮球足球其他运动球类运动赛车健身运动运动用品影视娱乐人物音乐动漫摄影摄像收藏宠物幽默搞笑起名花鸟鱼虫茶艺彩票星座占卜书画美术舞蹈小说图书器乐声乐小品相声戏剧戏曲手工艺品历史话题时事政治就业职场军事国防节日风俗法律法规宗教礼仪礼节自然灾害360维权社会人物升学入学人文社科外语资格考试公务员留学出国家庭教育学习方法语文物理生物工程学农业数学化学健康知识心理健康孕育早教内科外科妇产科儿科皮肤科五官科男科整形中医药品传染科其他疾病医院两性肿瘤科创业投资企业管理财务税务银行股票金融理财基金债券保险贸易商务文书国民经济爱情婚姻家庭烦恼北京上海重庆天津黑龙江吉林辽宁河北内蒙古山西陕西宁夏甘肃青海新疆西藏四川贵州云南河南湖北湖南山东江苏浙江安徽江西福建广东广西海南香港澳门台湾海外地区

怎样锁住一个表不被查询和修改-CSDN论坛

来源:互联网  责任编辑:小易  时间:2018/1/16 15:54:58
本网有用户碰到这样的问题:怎样锁住一个表不被查询和修改-CSDN论坛,具体问题如下:

本帖最后由 aierda 于 2017-01-04 19:07:23 编辑

本网根据需求用户需求,为用户寻得以下其他网友提供的解决方法,方法仅供参考,具体如下:

解决方案1:

最好从设计层面 就避开这样的设计,如果某个属性需要实时更新建议进内存(比如内存数据库,就是应对此类问题的)

解决方案2:

串行式事务,加排他锁查询。

解决方案3:

对此表的访问进行封装,对读写操作增加锁机制。

解决方案4:

稍微封装下,加个islocked属性怎样。

解决方案5:

引用 2 楼 closurer 的回复:
串行式事务,加排他锁查询。

大哥,有没有具体的例子参考的呢

解决方案6:

引用 5 楼 aierda 的回复:
Quote: 引用 2 楼 closurer 的回复:

串行式事务,加排他锁查询。

大哥,有没有具体的例子参考的呢


http://bbs.csdn.net/topics/392073650

我在这里写了一个开头,迟点会写解决方法。

解决方案7:

引用 5 楼 aierda 的回复:
Quote: 引用 2 楼 closurer 的回复:

串行式事务,加排他锁查询。

大哥,有没有具体的例子参考的呢


SQL Server 会对你的应用程序的每一个独立的会话的每一条 sql 语句默认产生一个 Transaction。你的程序实际上假设有2条以上的语句,你就需要显示地创建一个 DbTeansaction。

如果没有这个概念,就会出现非常简单的理解错误。例如 #6 楼举得例子中,在 delay 的时候(外层)并没有事务,所以例子是错误的!

解决方案8:

你就需要显示地创建一个 DbTeansaction   -->   你就需要显示地创建一个 DbTransaction


你应该先看看如何在应用程序执行多条sql语句的时候,放到一个事务中。

这么简单的事务概念,如果你不知道在多条语句外边有一个事务,还怎么奢谈事务的“锁”呢?

解决方案9:

如果一个表是频繁修改的, 即使能做到, 你所谓的实时根本没有任何意义。

你看的那一瞬间, 数据早就变化了。 

但你所谓的锁住, 实际给这个表的修改、查询制造了非常多的堵塞、死锁的机率, 效率下降的不是一点点, 制造的混乱后果也许你都没有办法处理——在生产环境不能停机、重启的情况下。

解决方案10:

给连接数据库的用户添加权限呗,限制其只能操作某些表,别说你是程序连接数据库的,程序连接数据库也要制定一个身份把,比如sa

解决方案11:

动态变化还直接存数据库?
直接用缓存数据库缓存,定时更新到数据库

解决方案12:

我不是很清楚你的应用场景,看你的描述,你好像需要一个很高级别的锁。

表级的锁,最高级别的隔离这样做:

一、串行化事务:


set transaction isolation level serializable


二、对整个表加排它锁

select * from table1 with(tablock, xlock)


这样对性能是有较大的影响的,你要确定在你的例子中是否真的需要这样做。

参考:
http://blog.csdn.net/closurer/article/details/54291241

解决方案13:

引用 7 楼 sp1234 的回复:
Quote: 引用 5 楼 aierda 的回复:

Quote: 引用 2 楼 closurer 的回复:

串行式事务,加排他锁查询。

大哥,有没有具体的例子参考的呢


SQL Server 会对你的应用程序的每一个独立的会话的每一条 sql 语句默认产生一个 Transaction。你的程序实际上假设有2条以上的语句,你就需要显示地创建一个 DbTeansaction。

如果没有这个概念,就会出现非常简单的理解错误。例如 #6 楼举得例子中,在 delay 的时候(外层)并没有事务,所以例子是错误的!


是的,事务的开始和提交,是必须要加的。

只是加了事务之后,锁也要加,查询语句默认放置的共享锁,有些情况下是不能满足需求的。


  • 本文相关:
  • 站长必读,如何真正写好一篇原创文章
  • 互联网之路细嗅蔷薇 资深站长分享掘金之道
  • 企业站的站长的工作重心究竟有哪些
  • 浅析:行业门户网站的一些盈利模式
  • 3000IP的企业网站每天订单不到30个的苦恼
  • 网站想内外兼修?先学习提高网站可用性的6大原则
  • 浅谈网页设计中的简约之美
  • 网页改版实战:日本设计师如何彻底优化旅游网站?
  • 网页改版实战!日本设计师如何彻底优化招聘网站?
  • 2015年值得关注的21个网页设计趋势
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved