触发器为什么要慎用?

南窗客斯黄 2012-06-04 10:36:45
触发器具有强大的约束能力,为什么我们老师还说尽量少用,能不用则不用?过度使用会有什么不好的后果吗?请解释得通俗一点,我是一个初学者,太专业化的术语搞不懂,谢谢啦。
...全文
1591 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
小麻雀NG 2014-11-11
  • 打赏
  • 举报
回复
触发器来实现功能比较隐蔽(对于新手+管理比较差的项目来说尤其如此)。比较差的项目最多有个表结构说明,触发器,存贮过程等其他数据库对象根本没体现在文档。项目的代码你能看懂,但少了那个触发器或存储过程就会业务不完整。所以会造成新人理解到的处理流程是不完整的,有时不小心删除了触发器,后果很严重,会导致存储过程业务不完整
南窗客斯黄 2012-06-05
  • 打赏
  • 举报
回复
谢谢各位大侠啦。。。
發糞塗牆 2012-06-05
  • 打赏
  • 举报
回复
触发器的作业主要是保证数据的一致性和某些安全性。
你想想,如果有个触发器,对于每个数据插入,要更新另外一个表。
一旦你插入的数据有百万、千万甚至更多,那么就要调用百万、千万次的触发器。你幻想以下就知道开销了。
同时,就如bean_sql说的,在数据库的过程中,触发器也容易导致一些无法想象的后果。所以要慎用。
cat545 2012-06-05
  • 打赏
  • 举报
回复
大家说的都很好了,我就学习学习吧。
hiboys 2012-06-05
  • 打赏
  • 举报
回复
呀,没看到7楼大牛的回复。我画蛇添足了
hiboys 2012-06-05
  • 打赏
  • 举报
回复
我给出使用触发器的建议有如下几个
(1)触发器来实现功能比较隐蔽(对于新手+管理比较差的项目来说尤其如此)。比较差的项目最多有个表结构说明,触发器,存贮过程等其他数据库对象根本没体现在文档。项目的代码你能看懂,但少了那个触发器或存储过程就会业务不完整。所以会造成新人理解到的处理流程是不完整的。
(2) 业务功能避免使用触发器,但也有较适合的地儿用。比如:做业务数据日志跟踪功能。某一业务表数据一变化
我们需要在日志表做记录。这个情况较适合用,但必要时得考虑上面大家提到的性能问题
(3) 触发器约束功能的话,其实也没必要。它确实可以完成复杂约束,但业务规则放到代码业务模块处理更正常些。数据的简单格式检测可以靠字段类型、长度、default not null 等完成
昵称被占用了 2012-06-05
  • 打赏
  • 举报
回复
个人意见:
1、实际触发器对性能有影响是误解,如果业务要求需要多表操作,而且是事务性的,那不用触发器也只能是个事务操作,本质上事务的大小和工作量是一样的,都是由业务决定的。
2、我也支持触发器慎用,主要原因是合理的触发器编写对设计者和编写者的要求很高,必须比较全面的分析相关业务,同时全面了解触发器工作原理。也就是说写出的触发器要求在业务上考虑全面,在技术上作到最好,才能不影响业务和性能。
3、触发器确实不容易被注意,给后期维护带来困难。
xiangaylian 2012-06-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
性能与维护
[/Quote]
++
4楼的回答言简意赅了!
1.性能,会对大数据量操作构成影响,2#说得很明确了;
2.维护,在数据因为触发器报错引起问题时,需要花时间去维护,在不知有触发器的前提下,将很难查找原因。
koumingjie 2012-06-05
  • 打赏
  • 举报
回复
性能与维护
bean_sql 2012-06-04
  • 打赏
  • 举报
回复
Copy...
那是从性能上考虑的, 触发器对表的每一行都会处理一个事务, 长时间的增删改操作,小数据量没啥问题 ,数据多了就得要优化了
假如你是多人使用的﹐触发器最好少用﹐因为﹐如果两个人同时触发了触发程序
那如何办?
假如没有应用服务器,那么DB服务器的负担将加重.
假如要进行数据库的迁移,比方说从SQL Server的数据库迁移到Oracle的话.
那么大量的触发器和存储过程将给你带来很多的麻烦.
因为各个DBMS的语法及处理方式皆不同.
pt1314917 2012-06-04
  • 打赏
  • 举报
回复
主要还是不好被跟踪,也不容易被注意到。
特别在团队项目开发中,如果你接手别人的项目,对项目或者业务不是很清楚的情况下,如果之前的系统触发器比较多。没有注意到,而忽略的话。会给熟悉系统增加很大的难度。。。
目录 SQL Server维护 1 适用人员: 2 一、 SQL Server安装 4 SQL 2000安装 4 检查SQL Server 2000版本 20 SQL 2005 安装 20 SQL 2005配置 32 检查SQL Server2005版本 34 SQL 2008(包括 SQL 2008R2)安装 35 SQL 2008配置 45 检查SQL Server 2008版本 45 Windows 2008中安装SQL 2008 46 常见问题 49 安装过程中提示有文件或进程挂起 49 使用windows账号可以登录,可是sa没法登陆 49 本地能连接上,其他电脑不能连接 52 安装过程中提示性能计数器错误 52 二、 SQL Server卸载 54 SQL 2000卸载 54 SQL 2005 卸载 55 SQL 2008卸载 56 三、 更改SQL Server排序规则 56 SQL 2000 排序规则修改 56 SQL 2005 排序规则修改 58 SQL 2008 排序规则修改 58 四、 备份与还原数据库 59 SQL 2000备份数据库 59 SQL 2000还原数据库 62 SQL 2005/2008 备份数据库 65 SQL 2005/2008 还原数据库 68 五、 附加与分离数据库 74 SQL 2000附加数据库 75 SQL 2000分离数据库 76 SQL 2005/2008附加数据库 77 SQL 2005/2008分离数据库 81 六、 建立维护计划为服务器加速 83 SQL 2000中建立维护计划优化系统 83 SQL 2005或SQL 2008种建立维护计划优化系统 88 1、自行创建维护计划 88 2、运用维护计划向导创建维护计划 91 3、各维护计划任务选项的说明 101 4、手动删除维护计划 107 七、 启用AWE或者3GB为服务器加速 108 判断采用AWE还是3GB 108 AWE方式确定SQL Server占用的内存大小 108 3GB开启方式 108 在SQL 2000 中开启AWE 111 在SQL 2005或SQL 2008中开启AWE 113 八、 日志清除 116 各版本数据库清除语句 116 SQL 2000、SQL 2005清除语句 116 SQL 2008清除语句 116 通过重建数据库彻底解决问题(还没实践过,慎用) 116 九、 索引维护 117 SQL 2000索引维护 117 SQL 2005/2008索引维护 121 十、 触发器管理 125 触发器查询语句 125 触发器管理语句 126 触发器管理工具 126 十一、 利用SQL Server导入导出数据 127 SQL 2000数据导入导出 127 SQL 2005/2008数据导入导出 133 十二、 SQL跟踪器的使用 144 易飞6.0特殊设置 144 SQL 2000跟踪器的使用 145 SQL 2005/2008跟踪器的使用 150 十三、 数据库异常检测以及简单修复 154 1. SQL Server数据库为什么易损坏呢? 154 2 预防措施 154 3. 其他的一些常用的修复命令 154 1. DBCC CHECKDB 154 2. DBCC CHECKTABLE 155 4.数据库日志损坏的修复 155 5. 数据库质疑的一般处理 156 6.还原数据库到指定时间点 156
作  者:钱慎一,张素智 编 出 版 社:中国水利水电出版社 ISBN:9787508468303 出版时间:2009-09-01 版  次:1 页  数:468 装  帧:平装 开  本:16开 所属分类:图书 > 计算机与互联网 > 数据库 目录 前言 第1章 Oracle数据库概述 1.1 Oracle数据库产品结构及组成 1.1.1 企业版 1.1.2 标准版 1.1.3 标准版 1.1.4 个人版 1.2 数据库基本术语 1.2.1 数据库 1.2.2 数据库管理系统 1.2.3 数据库系统 1.2.4 数据库模式 1.2.5 数据模型 1.2.6 数据完整性约束 1.2.7 联机事务处理和联机分析处理 1.2.8 数据仓库 1.3 Oracle基本术语 1.3.1 数据字典 1.3.2 数据文件 1.3.3 控制文件 1.3.4 日志文件 1.3.5 表空间 1.3.6 段 1.3.7 区 1.3.8 数据块 1.4 Oracle 11g的新特性 1.4.1 数据库管理部分 1.4.2 PL/SQL部分 1.4.3 其他部分 第2章 Oracle在Windows平台上的安装与配置 2.1 Oracle通用安装器 2.2 Oracle数据库软件的安装 2.3 Oracle数据库软件的卸载 2.3.1 停止所有的Oracle服务 2.3.2 用OUI卸载所有的Oracle组件 2.3.3 手动删除Oracle遗留的成分 2.4 Oracle的应用结构 2.4.1 单磁盘独立主机结构 2.4..2 多磁盘独立主机结构 2.4.3 多数据库独立主机结构 2.4.4 C/S结构 2.4.5 分布式结构 2.5 Oracle网络与防火墙 2.5.1 Oracle网络服务 2.5.2 配置Oracle网络环境 2.5.3 Oracle防火墙 第3章 SQL语言基础 3.1 SQL概述 3.1.1 SQL语言的功能 3.1.2 SQL的特点 3.1.3 SQL语句的编写规则 3.2 数据定义 3.2.1 CREATE 3.2.2 DROP 3.2.3 ALTER 3.3 数据查询 3.3.1 简单查询 3.3.2 WHERE子句 3.3.3 ORDER BY子句 3.3.4 GROUPBY子句 3.3.5 HAVING子句 3.3.6 多表连接查询 3.3.7 集合操作 3.3.8 子查询 3.4 数据操纵 3.4.1 INSERT语句 3.4.2 UPDATE语句 3.4.3 DELETE语句 3.4.4 TRLINCATE语句 3.5 数据控制 3.5.1 GRANT语句 3.5.2 REVOKE语句 3.6 Oracle常用函数 3.6.1 字符类函数 3.6.2 数字类函数 3.6.3 日期类函数 3.6.4 转换类函数 3.6.5 聚集类函数 第4章 Oracle PL/SQL语言及编程 4.1 PL/SQL简介 4.1.1 PL/SQL的基本结构 4.1.2 PUSQL注释 4.1.3 PL/SQL字符集 4.1.4 PL/SQL数据类型 4.1.5 PIJSQL变量和常量 4.1.6 PL/SQL语句控制结构 4.1.7 PL/SQL表达式 4.2 PL/SQL的游标 4.2.1 基本原理 4.2.2 显式游标 4.2.3 隐式游标 4.2.4 游标属性 4.2.5 游标变量 4.3 过程 4.3.1 创建过程 4.3.2 调用过程 4.3.3 删除过程 4.3.4 过程的参数类型及传递 4.4 函数 4.4.1 创建函数 4.4.2 调用函数 4.4.3 删除函数 4.5 程序包 4.5.1 基本原理 4.5.2 创建包 4.5.3 调用包 4.5.4 删除包 4.6 触发器 4.6.1 触发器的基本原理 4.6.2 创建触发器 4.6.3 执行触发器 4.6.4 删除触发器 第5章 熟悉SQL*Plus-Oracle数据库环境 5.1 进入和退出SQL*Plus环境 5.1.1 启动SQL*Plus 5.1.2 创建SQL*Plus快捷方式 5.1.3 退出SQL*Plus环境 5.2 SQL*Plus编辑器的编辑命令 5.2.1 编辑命令 5.2.2 保存命令 5.2.3 加入注释 5.2.4 运行命令 5.2.5 编写交互命令 5.2.6 使用绑定变量 5.2.7 跟踪语句 5.3 设置SQL*Plus环境 5.3.1 SHOW命令 5.3.2 SET命令 5.4 SQL*Plus环境介绍 5.4.1 存储SQL*Plus环境 5.4.2 假脱机输出 5.4.3 联机帮助 5.5 使用SQL*Plus格式化查询结果 5.5.1 格式化列 5.5.2 定义页与报告的标题和维数 5.5.3 存储和打印结果 第6章 Oracle的基本操作 6.1 Oracle的启动与关闭 6.1.1 启动Oracle数据库 6.1.2 关闭Oracle数据库 6.2 表的创建与改进 6.2.1 表的基本概念 6.2.2 表结构设计 6.2.3 表的创建 6.2.4 修改表结构 6.3 索引 6.3.1 索引的概念 6.3.2 创建索引 6.3.3 删除索引 6.4 视图 6.4.1 视图的概念 6.4.2 创建视图 6.4.3 视图更改 6.4.4 删除视图 6.5 数据操纵与数据查询 6.5.1 复制原表插入记录 6.5.2 使用视图 6.5.3 使用PL/SQL语言 6.5.4 数据查询 第7章 Oracle数据库管理操作 7.1 学会使用视图 7.1.1 增加安全性 7.1.2 隐藏数据的复杂性 7.1.3 实现命名简洁性和易读性 7.1.4 实现更改灵活性 7.2 实现记录的唯一性 7.2.1 用键实现 7.2.2 创建唯一索引 7.2.3 使用序列实现 7.3 实现数据的完整性 7.3.1 域完整性 7.3.2 实体完整性 7.3.3 引用完整性 7.3.4 存储过程检查 7.3.5 使用触发器 7.4 避免更改引起的大量改动 7.4.1 使用视图 7.4.2 使用同义名 7.4.3 使用光标 第8章 数据库用户管理 8.1 授予权限 8.1.1 直接授权 8.1.2 授权角色 8.1.3 使用OEM的“安全管理”创建 角色 8.1.4 使用ALTERUSER语句修改 用户的默认角色 8.1.5 使用SET ROLE控制角色使用 8.2 回收权限 8.2.1 逐一回收 8.2.2 删除角色 8.2.3 删除数据库对象 8.2.4 删除用户 8.3 不同用户权限管理 8.4 管理对数据库对象的访问 8.4.1 使用用户口令 8.4.2 使用权限控制 8.4.3 使用数据库链接 8.4.4 使用配置文件 第9章 数据库空间管理 9.1 建立数据库时的空间设计 9.1.1 指定system表空间初值 9.1.2 设置其他表空间初值 9.2 在空间充足时的管理 9.2.1 使用数据字典动态监视 9.2.2 向表空间增加数据文件 9.3 解决空间不足的方法 9.3.1 增加数据文件大小 9.3.2 创建新表空间 9.3.3 动态增加表空间 9.3.4 三种方法的区别与比较 9.4 合理利用存储空间 9.4.1 采用正确的数据类型 9.4.2 存储参数的正确设置 9.4.3 定期回收无用表空间 9.4.4 归档历史表空间 第10章 备份与恢复机制 10.1 备份与恢复的方法 10.2 使用数据泵进行逻辑备份和恢复 10.2.1 使用expdp导出数据 10.2.2 使用impdp导入数据 10.3 使用OEM中进行备份与恢复 10.3.1 通过导出文件来备份 10.3.2 通过导入来恢复 10.4 脱机备份与恢复 10.4.1 脱机备份 10.4.2 脱机恢复 10.5 联机备份与恢复 10.5.1 归档日志模式的设置 10.5.2 创建恢复目录所用的表空间 10.5.3 创建RMAN用户并授权 10.5.4 创建恢复目录 10.5.5 注册目标数据库 10.5.6 使用RMAN程序进行备份 10.5.7 使用RMAN程序进行恢复 10.6 自动备份与恢复 10.6.1 闪回数据库 10.6.2 闪回表 10.6.3 闪回回收站 10.6.4 闪回查询 10.6.5 闪回版本查询 10.6.6 闪回事务查询 10.7 几种备份与恢复方法的比较 第11章 控制文件及日志文件的管理 11.1 控制文件 11.1.1 控制文件概述 11.1.2 多路复用控制文件 11.1.3 控制文件的创建 11.1.4 控制文件的备份与恢复 11.1.5 控制文件的查询与删除 11.1.6 OEM中控制文件的管理 11.2 日志文件 11.2.1 日志文件及存储策略 11.2.2 增加日志组和日志成员 11.2.3 设置日志自动存档功能 11.2.4 监视日志工作 第12章 数据库控制 12.1 用事务控制操作 12.1.1 什么是事务 12.1.2 设置事务 12.1.3 事务提交 12.1.4 事务回滚 12.1.5 设置回退点 12.2 用锁控制并发存取 12.2.1 为何加锁 12.2.2 加锁的方法 第13章 Oracle数据库的安全管理 13.1 Oracle数据库安全性概述 13.1.1 Oracle 11g的安全性体系 13.1.2 Oracle 11g的安全性机制 13.2 用户管理 13.2.1 创建用户 13.2.2 修改用户 13.2.3 删除用户信息 13.2.4 查询用户 13.3 虚拟专用数据库 13.3.1 基于行的VPD 13.3.2 基于列的VPD 13.4 透明数据加密(’FDE) 13.4.1 创建Oracle钱夹 13.4.2 加密表 13.4.3 加密表空间 13.5 对备份进行加密 13.5.1 透明加密模式 13.5.2 基于密码的加密模式 13.5.3 混合加密模式 第14章 留言板系统 14.1 系统概述 14.1.1 留言板系统的应用背景 14.1.2 留言板系统的总体需求 14.1.3 留言板系统的功能分析 14.1.4 留言板系统的设计思路 14.2 系统功能模块设计 14.2.1 系统框架 14.2.2 系统功能模块划分 14.3 数据库设计 14.3.1 数据库需求分析 14.3.2 数据库概念结构设计 14.3.3 数据库逻辑结构设计 14.3.4 数据库表的创建 14.3.5 数据库的连接 14.4 系统主要功能模块的设计与实现 14.4.1 用户登录模块 14.4.2 添加留言模块 14.4.3 回复留言模块 14.4.4 访问留言人主页 14.4.5 删除留言 14.4.6 修改密码 14.5 本章小结 第15章 新闻发布系统 15.1 系统概述 15.1.1 新闻发布系统的应用背景 15.1.2 新闻发布系统的总体需求 15.1.3 新闻发布系统的功能分析 15.1.4 新闻发布系统的设计思路 15.2 系统功能模块设计 15.3 数据库设计 15.3.1 数据库需求分析 15.3.2 数据库概念结构设计 15.3.3 数据库逻辑结构设计 15.3.4 数据库表的创建 15.3.5 数据库的连接 15.4 网站总体框架 15.4.1 文件布局 15.4.2 网站首页的运行结果 15.5 系统后台主要功能模块的设计与实现 15.5.1 登录模块设计 15.5.2 管理员维护模块设计 15.5.3 新闻管理模块设计 15.6 系统前台主要功能模块的设计与实现 15.6.1 今日新闻的显示 15.6.2 查找新闻 15.6.3 查看新闻人物和投票 15.7 本章小结 附录A 0racle 11g词汇集锦 附录B 0facle 11g选件概述

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧