我google到triggle和存储过程的缺点如下:
1、可移植性是存储过程和触发器最大的缺点。
2、占用服务器端太多的资源,对服务器造成很大的压力
3、不能做DDL。
4、触发器排错困难,而且数据容易造成不一致,后期维护不方便。
最后一点“触发器排错困难,而且数据容易造成不一致,后期维护不方便”,如何照成数据不一致?
关于trigger的错误处理机制,我查阅了mysql手册。以下是mysql手册的说明:
在触发程序的执行过程中,MySQL处理错误的方式如下:
· 如果BEFORE触发程序失败,不执行相应行上的操作。
· 仅当BEFORE触发程序(如果有的话)和行操作均已成功执行,才执行AFTER触发程序。
· 如果在BEFORE或AFTER触发程序的执行过程中出现错误,将导致调用触发程序的整个语句的失败。
· 对于事务性表,如果触发程序失败(以及由此导致的整个语句的失败),该语句所执行的所有更改将回滚。对于非事务性表,不能执行这类回滚,因而,即使语句失败,失败之前所作的任何更改依然有效。
我想:最有可能照成数据不一致的情况,就是“对于非事务性表,不能执行这类回滚,因而,即使语句失败,失败之前所作的任何更改依然有效。”
trigger错误会导致非事务性表不能回滚吗?非事务性表原先就不会回滚。
难道我想错了?
欢迎高手解惑。
1、可移植性是存储过程和触发器最大的缺点。
2、占用服务器端太多的资源,对服务器造成很大的压力
3、不能做DDL。
4、触发器排错困难,而且数据容易造成不一致,后期维护不方便。
最后一点“触发器排错困难,而且数据容易造成不一致,后期维护不方便”,如何照成数据不一致?
关于trigger的错误处理机制,我查阅了mysql手册。以下是mysql手册的说明:
在触发程序的执行过程中,MySQL处理错误的方式如下:
· 如果BEFORE触发程序失败,不执行相应行上的操作。
· 仅当BEFORE触发程序(如果有的话)和行操作均已成功执行,才执行AFTER触发程序。
· 如果在BEFORE或AFTER触发程序的执行过程中出现错误,将导致调用触发程序的整个语句的失败。
· 对于事务性表,如果触发程序失败(以及由此导致的整个语句的失败),该语句所执行的所有更改将回滚。对于非事务性表,不能执行这类回滚,因而,即使语句失败,失败之前所作的任何更改依然有效。
我想:最有可能照成数据不一致的情况,就是“对于非事务性表,不能执行这类回滚,因而,即使语句失败,失败之前所作的任何更改依然有效。”
trigger错误会导致非事务性表不能回滚吗?非事务性表原先就不会回滚。
难道我想错了?
欢迎高手解惑。
解决方案 »
- mysql 修改my.ini问题
- 如何实现点击按钮后,从MYSQL数据库导出XLS文件并提示下载另存
- 请帮我优化一下mysql的慢查询
- 表查询问题? help me!
- 怎样将dat文件导入到mysql中
- 我的mysql服务器怎么在win XP下不能启动啊,哪位知道?很奇怪的问题!(内空)
- 为什么我在代码里开了事务后,再调用mysql的存储过程,存储过程并不在我开启的事务里执行?
- 【视频】20部经典Mysql视频下载地址分享
- 在weblogic下,能不能配置mysql的jdbc驱动做Connection Pools
- 麻烦大家帮忙看看,oracle过程转mysql
- Sybase转Mysql的问题,求大神!!
- mysql数据表合并问题,有交集,需要自动更名,可支付酬劳以示感谢!
2. TRIIGER中,或者一个事务中,如果操作到了非事务表,则当整个事务回滚的时候,对非事务表所做的更新不会被UNDO。
在非事务性表里,比如你插入A的时候,触发器再动作插入B,但是在插B之前,插A之后,停电了。那么B插入失败,A插入成功。这样就会造成用户自定义完整性失败。