关于触发器与事务 选择哪个 请各位老师指点

问题描述

我现在写一套进销存系统比如仓库入库,库存表数量也会发生改变这个时候我可以定义一个事务,多条SQL语句执行当然也可以用触发器请问哪个更好点

解决方案

解决方案二:
事务不是回滚用的么,和触发器不一样吧,我也想看看答案
解决方案三:
事务,必须事务,妥妥的事务,坚决不用触发器
解决方案四:
事务吧、万一出错还能回滚。触发器貌似滚不回来,有可能导致数据错误。
解决方案五:
用事务,锁住库存表.否则可能出现多个用户同时操作,脏数据的问题.
解决方案六:
引用楼主maocheng82的回复:

我现在写一套进销存系统比如仓库入库,库存表数量也会发生改变这个时候我可以定义一个事务,多条SQL语句执行当然也可以用触发器请问哪个更好点

用事务多条sql语句,有一个执行失败,这个时候库存是要回滚滴,你用触发器这个不是给自己找麻烦嘛!
解决方案七:
二者没有对立的关系。当你写一条insert语句(并且假设你的应用程序也没有显式地执行BeginTransaction之类的语句),那么sqlserver会自动启动一个事务来执行这条insert语句。而这条语句所引起的触发器的执行,以及触发器中所有的数据更改语句,已经数据改变引起的其它触发器执行动作,以及触发器中调用的存储过程执行,等等等等,当然也还是在这个事务中的!所以触发器一定能会在某个事务中执行,要么就是sqlserver默认地自动地对单个insert语句而启动的事务,要么就是你显式地在代码中启动的事务。实际上,触发器跟事务没有直接关系。但是既然任何insert、update、delete语句都可能引起触发器执行,而这些语句肯定是在事务中执行的,那么触发器肯定也是在事务中执行的。它们之间没有对立的关系。
解决方案八:
我们之所以经常(明明有触发器可用也)不使用触发器,主要有两个原因:1.因为经常需要重构程序,那么将业务操作在自己的开发调试环境所支持的普通的编程环境中开发会更方便。因为不论使用什么关系数据库(或者根本不使用关系数据库),那么脱离了关系数据库的编程方式总是更加通用的。所以我们更习惯于把业务处理写在应用程序中,而往往会仅把数据库当作后备数据的地方(绝不用数据库系统编程)。2.这个原因其实更重要。对于专业开发者,比如说随便搞个电商系统之类的,都知道在c#中跑的核心技术的程序(特别是分布式的一些算法)的效率比存储过程高几十倍,而且大部分时候我们提高系统服务性能的最基本的做法就是避免访问到数据库系统(而使用缓存系统、内存数据库系统、甚至本地文件系统,等等)。对于一些刚刚学习开发小办公室内的OA程序的学生可能觉得“什么都用存储过程来写”非常新潮,甚至他的c#程序要取一下当前机器的本地时间他都可能调用数据库存储过程去取(确实有很多这类的学生)。但是一旦进入互联网公司,就知道必须该开始注重实用性了。
解决方案九:
关于“事务回滚”的问题。在触发器中如果抛出异常,事务自然也就回滚了。触发器代码不会影响事务的封锁和回滚的任何范围。关于“数据一致性”问题,事务中由于数据被改变而触发了触发器执行,那么触发器所访问和更改的数据自然也遵从事务的隔离原则,不会造成数据不一致性。比如说我们insert一条进货信息,触发器去查询库存、更改库存,那么自然这个0.1秒瞬间中相应的库存记录也会被加锁,而不是仅有插入的进货记录被加锁。只不过,我建议尽量不要使用触发器,也不要使用存储过程。这是为了更好地融入比较现代的互联网公司(而不是传统的进销存ERP之类的系统公司)。
解决方案十:
Quote: 引用8楼sp1234的回复:

关于“事务回滚”的问题。在触发器中如果抛出异常,事务自然也就回滚了。触发器代码不会影响事务的封锁和回滚的任何范围。quote]谢谢,关于脏数据本人理解的还是不是很深刻比如我在一个事务里有一条SQL语句,为了防止脏读,我写成updatetable1setsl='10000'WITH(HOLDLOCK)是不是在这个事务运行的过程中table1这个表被锁定了其他用户不能访问只有等这个事务运行完才解锁是这样理解吗谢谢
解决方案十一:
同意sp1234,最好是做到把数据库仅仅当作是一个带有索引(关系数据库)的存储设备使用。
解决方案十二:
另外要注意,在互联网公司中,并不是动不动就去整“数据库事务”这个概念的。实际上互联网公司把它当作一种“毒瘤”,互联网公司之所以可以在最近2、3年突然以每年几十倍的速度发展,主要原因也是跟抛弃了“强一致性”有关。不是说不考虑数据库事务,而是说要了解新型的大系统设计框架来重新设计业务流程。在这个流程中,无一例外地,那些动不动就用“数据库事务中”的概念来套用的,都被当作不合格的程序设计师的设计bug来废弃。比如说你用支付宝去买一件商品,这一个动作可能需要触发200个数据库相关的操作,那么它们都在一个事务中吗?如果要是这样去想,就不存在支付宝了!实际上可能有20个事务(而不是一个事务),而且更多的操作并不是立刻就iu读写数据库的(至少不是立刻就写数据库的),事务概念已经不是一个“八股文”的框框了,新式的分布式计算和业务处理流程设计才是互联网公司打败传统的公司的核心技术,只有掌握了比较现代的程序设计技术的工程师才能用极低的成本运营,以极高的速度推出创新业务。
解决方案十三:
学习
解决方案十四:
以后我也得弄进销存,关注学习下
解决方案十五:
引用4楼Z65443344的回复:
用事务,锁住库存表.否则可能出现多个用户同时操作,脏数据的问题.

锁住库存表是不是这样写update库存表setsl='10000'WITH(HOLDLOCK)
解决方案:
这几天我也正在也进销存软件。用的是事务,没有去考虑触发器。一般我用触发器是做数据同步时的分量同步,很有效果,执行效率也高。如果做多个运算的话,还是事务比较靠谱。
解决方案:
引用15楼song_scs的回复:

这几天我也正在也进销存软件。用的是事务,没有去考虑触发器。一般我用触发器是做数据同步时的分量同步,很有效果,执行效率也高。如果做多个运算的话,还是事务比较靠谱。

请问你是如何防止脏读的锁住库存表是不是这样写update库存表setsl='10000'WITH(HOLDLOCK)这样可以不在是事务里SQL语句用这样的写法

时间: 2024-07-28 22:25:32

关于触发器与事务 选择哪个 请各位老师指点的相关文章

第三方支付 手机端-第三方在线支付应该怎么选择,请各位给小第点建议

问题描述 第三方在线支付应该怎么选择,请各位给小第点建议 公司有一个项目,需要用到在线支付,主要是手机上的支付,但是由于第三方平台太多了, 希望给为大哥,给点建议,主要是手机端的支付,希望从安全和成本给小第指点,谢谢 解决方案 现在一般第三方支付都是用支付宝吧,我以前做过一个就是用的支付宝,安全而且现在大家都有支付宝钱包,不大清楚楼主主要是需要什么功能. 解决方案二: 国内的支付宝 微信支付等 国外的paypal 解决方案三: 用过联动优势,连连支付.现在想换成支付宝... 解决方案四: 说白了

c++ offer-有两份工作给了我OFFER,不知如何选择,请大神们给个看法

问题描述 有两份工作给了我OFFER,不知如何选择,请大神们给个看法 我是个刚转程序不久的人.一份是windows下的C/C++编程做游戏服务端的,一份是linux下的C/C++编程做银行业务的.想看下做哪种更有发展前景,或者说以后可以有更多工资.

SQL Server触发器和事务用法示例

本文实例讲述了SQL Server触发器和事务用法.分享给大家供大家参考,具体如下: 新增和删除触发器 alter trigger tri_TC on t_c for INSERT,delete as begin set XACT_ABORT ON declare @INSERTCOUNT int; declare @DELETECOUNT int; declare @UPDATECOUNT int; set @INSERTCOUNT = (select COUNT(*) from insert

SQL Server触发器和事务用法示例_MsSql

本文实例讲述了SQL Server触发器和事务用法.分享给大家供大家参考,具体如下: 新增和删除触发器 alter trigger tri_TC on t_c for INSERT,delete as begin set XACT_ABORT ON declare @INSERTCOUNT int; declare @DELETECOUNT int; declare @UPDATECOUNT int; set @INSERTCOUNT = (select COUNT(*) from insert

深圳的ITjob培训机构怎么样?请各位大侠指点

问题描述 想从事IT行业自学了几个月的Java好像还上不了手想找个培训的机构培训下Java,然后直接就工作!网上看了下深圳的ITjob培训,也看不来怎么样,不知道有哪位大侠去过的或者知道的,能不能给在迷途中的小弟指点一二,不胜感谢!小弟现在就在深圳,不知道怎么选择!请各位大侠帮帮忙...在线等!急急 解决方案 解决方案二:不太了解~~的飘过解决方案三:现在企业宁愿找应届生都不找培训的了~~楼主还是实地考察下吧~~解决方案四:我这几天一直在面试,北大青鸟.itJob.达内的都有,总体情况不是很好,

图片-今天打开eclipse,就出现这种情况,请大神指点!!!

问题描述 今天打开eclipse,就出现这种情况,请大神指点!!! 解决方案 首先,不建议安装到中文目录下.可能是这2种情况导致的: 1.环境变量没配置2.eclipse和jdk版本位数不一致要同是32位或者64位(注意32位机子只能使用32位的64位可以兼容使用32位和64位的) 解决办法:1.配置环境变量: 第一步:右键"我的电脑"点击"属性" 第二步:点击"高级系统设置"点击"环境变量(N)" 第三步: 在"系

导航-请大神指点!感激不尽!

问题描述 请大神指点!感激不尽! 如何能获取百度导航过程中的点的经纬度,比如,从上海到北京,我不只要知道上海和北京的经纬度,还要获取他们之间的一个地方的经纬度 解决方案 irprot问题请大神帮助请大神指教,困惑..... 解决方案二: 你有了两个点,就可以用简单的立体几何知识求出它经过的大弧方程,根据角距,可以得到途径的坐标.

android-关于Android发送短信的扩展问题【具体见内容】,请大神指点

问题描述 关于Android发送短信的扩展问题[具体见内容],请大神指点 是这样的,程序中发送短信功能已经实现了. 因为我发的是类似验证码的信息,要对方同意并把这个验证码回馈给我才算双方达成"协议",但是现在短信内容可以在 短信 应用中看到,就是说我可以直接拿到对方的验证码. 请问有没有方法让这条短信不显示在系统的短信应用中,或者显示出来的是加密后的文字呢?或者发完之后直接删除也行啊-- 求帮助~先谢过大家了~ 解决方案 md5或许能帮上你,这是一种哈希讲明文转换为密文的算法吧

线程-VC6 写windows服务问题,请高手帮忙指点一下

问题描述 VC6 写windows服务问题,请高手帮忙指点一下 UINT _MainThread(LPVOID lparam)//主线程 { cout<<"_MainThread Start!"< CString dspmsg; UINT timeID1 = 0; if (!m_pFSockServer->Create(gListenPort) ) { exitService(GetError(GetLastError())); return -1; } if