ITPub博客

首页 > IT职业 > IT职场 > 动态ip软件:MySQL高级特性—内部存储代码

动态ip软件:MySQL高级特性—内部存储代码

原创 IT职场 作者:芝麻小A 时间:2019-02-11 10:02:02 0 删除 编辑

MySQL允许通过触发器、存储过程、函数的形式来存储代码。从MySQL5.1开始,还可以在定时任务中存放代码,这个定时任务也被称为事件。存储过程和存储函数都被同城为存储程序。

这四种存储代码都使用特殊的sql语句扩展,它包含了很多过程处理语法,例如循环和条件分支等。不同类型的存储代码的主要却别在于其执行的上下文;也就是其输入和输出。存储过程和存储函数都可以接受参数然后返回值,但是触发器和事件却不行。

一般来说,存储代码是一种很好的共享和服用代码的方法。不过因为不同的关系数据库都有各自的语法规则,所以不同的数据库很难复用这些存储代码。

这里讲主要惯出存储代码的性能,而不是如何实现。如果打算学习如何编写存储过程,可以阅读由Guy Harrison和Steven  Feuerstein编写的MySQL Stored Procedure Programming(O`Reilly)。

有人吵到使用存储代码,也有人反对。这里我们列举下它的优缺点。

优点:

① 它在服务器内部执行,距离数据最近,另外在服务器上执行还可以节省带宽和网络延迟。

② 这是一种代码重用。可以方便的同一业务规则,保证某些行为总是一直,所以也可以为应用提供一定的安全性。

③ 它可以简化代码的维护和版本更新。

④ 它可以帮助提升安全,比如提供更细粒度的权限控制。应用程序也可以通过存储过程的接口访问那些没有权限的表。

⑤ 服务器端可以缓存存储过程的执行计划,这对于需要反复调用的过程,会大大降低消耗。

⑥ 因为是在服务器端部署的,所以备份、维护都可以在服务器端完成。所以存储程序的维护工作会很简单。并且没有外部依赖。

⑦ 它可以在应用开发和数据库开发人员之间更好的分工。

缺点:

① MySQL本身没有提供好用的开发和调试工具,所以编写MySQL的存储代码比其他的数据库更难。

② 它的效率比应用程序的代码会差些。例如它可以使用的函数非常有限,所以使用存储代码很难编写复杂的字符串维护和很复杂的处理逻辑。

③ 存储代码可能会给应用程序代码的负数带来额外的复杂性。因为需要额外部署MySQL内部的存储代码。

④  因为存储程序都部署在服务器内,所以可能有安全隐患。如果将非标准的加密功能放在存储程序中,那么若数据库被龚波,数据也就泄露了。但是若将加密函数放在应用程序代码中,那么攻击者必须同时攻破程序和数据库才能获得数据。

⑤ 存储过程会给数据库服务器增加额外的压力,而数据库服务器的扩展性相比应用服务器要差很多。

⑥ MySQL并没有什么选项可以控制存储程序的资源消耗,所以在存储过程中出现错误,可能会导致服务器崩溃。

⑦ 存储代码在MySQL中的实现有很多限制;执行计划缓存使链接级别的,游标的物化和临时表相同,在MySQL5.5以前,异常处理也很困难等等。

⑧ 调试MySQL的存储过程是一件很困难的事情。如果慢日志只是给出CALL  XYZ('A'),通常很难定位到底是什么导致的问题,这时不得不看看存储过程中的sql语句是如何编写的。

⑨ 它和基于语句的二进制日志赋值合作的不是很好。在基于语句的复制中,使用存储代码有很多的坑。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31561243/viewspace-2617498/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-11-07

  • 博文量
    22
  • 访问量
    9998