MySQL存储程序开发最佳实践

本文提供了MySQL存储程序开发的最佳实践,包括开发流程、编码风格、变量管理、条件逻辑、循环处理、异常处理等方面的内容,旨在帮助开发者提升存储程序的质量和性能。
MySQL存储程序开发最佳实践

[b]1,开发流程[/b]
[code]
1,写代码之前设立标准和指南
2,遇到一个问题30分钟不能解决之后寻求帮助
3,相互review代码
4,利用独立的测试人员进行测试
5,使用代码版本控制
[/code]

[b]2,编码风格和惯例[/b]
[code]
1,使用一致的、可读性强的代码风格
2,使用有逻辑意义的、一致的命名规范
3,使用block和loop labels作为自我诠释文档
4,复杂的表达式使用括号
5,使用纵向的代码排列来强调纵向关系
6,注释代码简明扼要并且只写“增值”信息
[/code]

[b]3,变量[/b]
[code]
1,使用一致的而且有意义的变量命名风格
2,避免在内部block里覆盖变量声明
3,使用function来替代复杂的表达式
4,移除不用的变量和代码
5,不要假设表达式的结果为TRUE或FALSE,它可能为NULL
6,尽量少使用用户变量作为全局数据
7,在strict mode下创建存储程序来避免非法的数据赋值
[/code]

[b]4,条件逻辑[/b]
[code]
1,对互斥的条件语句使用ELSEIF
2,只使用IF...ELSEIF来测试单独的、简单的条件
3,确保CASE语句能够包含所有的情况,或者构建一个Handler来捕获没有匹配的情况
4,不要混合使用CASE和IF
[/code]

[b]5,循环处理[/b]
[code]
1,确保循环会终结
2,在循环的终结条件里显式的声明所有条件,不要在内部使用LEAVE或RETURN
3,在简单的循环里使用一个单独的LEAVE
4,使用一个简单的循环来避免循环必需的冗余代码
[/code]

[b]6,异常处理[/b]
[code]
1,处理不可避免但又能够预期的异常
2,使用named condition来提高代码可读性
3,在异常处理时使用一致的SQLSTATE或MySQL error code,不要混合使用
4,避免使用全局的SQLEXCEPTION Handler,除非MySQL实现了SIGNAL和SQLCODE特性
[/code]

[b]7,存储程序里的SQL[/b]
[code]
1,显式使用START TRANSACTION语句来打开事务
2,不要让事务“悬空”,要负责结束事务
3,避免使用savepoint,它们让程序逻辑变模糊,并降低程序效率
4,使用合适的锁策略
5,保持事务简短
6,在完成cursor循环之后一定要设置NOT FOUND变量
7,当需要更新记录时使用SELECT FOR UPDATE
8,避免在可能用在SQL里的function里引入SQL语句,嵌套查询会严重消耗性能
[/code]

[b]8,动态SQL[/b]
[code]
1,在动态SQL字符串里使用绑定而不是连接变量值,这样可以避免SQL注入
2,小心检查任何可能用于构建动态SQL的参数值
3,考虑为执行动态SQL的存储过程添加INVOKER权限
[/code]

[b]9,程序构建[/b]
[code]
1,封装业务逻辑和方程到准确命名的function里
2,使用function和procedure模板来标准化模块
3,使用模块化来限制程序代码50-60行
4,避免程序的副作用
5,避免条件和循环的深层嵌套
6,限制执行部分只有一个单独的RETURN语句
7,使用存储程序来实现对多个trigger公用的代码
[/code]

[b]10,性能[/b]
[code]
1,专注于SQL调优来提高存储程序性能
2,为你的程序小心创建最好的索引集
3,避免意外的全表扫描
4,优化必要的全表扫描
5,避免将计算消耗过大的逻辑放在存储程序里
6,将循环中不变的表达式移出循环
7,优化条件结构
8,将匹配率较大的条件放在IF和CASE语句的前面
[/code]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值