20条sql书写规范好习惯让你受益一生.docx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《20条sql书写规范好习惯让你受益一生.docx》由用户(tanweifu)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 20 sql 书写 规范 习惯 受益 一生
- 资源描述:
-
1、MySQL 中,21 个写 SQL 的好习惯每一个好习惯都是一笔财富,本文分 SQL 后悔药、SQL 性能优化、SQL 规范优雅三个方向,分享写 SQL 的 21 个好习惯。1. 写完 SQL 先 explain 查看执行计划。【SQL 性能优化】日常开发写 SQL 的时候,尽量养成这个好习惯呀:写完 SQL 后,用 explain 分析一下,尤其注意走不走索引。explainselectuserid,name,agefromuserwhereuserid=10086orage=18;2. 操作 delete 或者 update 语句,加个 limit。【SQL 后悔药】在执行删除或者更新语句
2、时,尽量加上 limit,以下面的这条 SQL 为例吧:deletefromeuserwhereage30limit200;因为加了 limit 主要有这些好处: 降低写错 SQL 的代价, 你在命令行执行这个 SQL 的时候,如果不加 limit,执行的时候一个不小心手抖,可能数据全删掉了,如果删错了呢?加了 limit 200,就不一样了。删错也只是丢失 200 条数据,可以通过 binlog 日志快速恢复的。 SQL 效率很可能更高,你在 SQL 行中,加了 limit 1,如果第一条就命中目标 return, 没有 limit 的话,还会继续执行扫描表。 避免了长事务,delete 执
3、行时,如果 age 加了索引,MySQL 会将所有相关的行加写锁和间隙锁,所有执行相关行会被锁住,如果删除数量大,会直接影响相关业务无法使用。 数据量大的话,容易把 CPU 打满,如果你删除数据量很大时,不加 limit 限制一下记录数,容易把 CPU 打满,导致越删越慢的。3. 设计表的时候,所有表和字段都添加相应的注释。【SQL 规范优雅】这个好习惯一定要养成啦,设计数据库表的时候,所有表和字段都添加相应的注释,后面更容易维护。正例:CREATETABLEaccount(idint(11)NOTNULLAUTO_INCREMENTCOMMENT主键Id,namevarchar(255)DE
4、FAULTNULLCOMMENT账户名,balanceint(11)DEFAULTNULLCOMMENT余额,create_timedatetimeNOTNULLCOMMENT创建时间,update_timedatetimeNOTNULLONUPDATECURRENT_TIMESTAMPCOMMENT更新时间,PRIMARYKEY(id),KEYidx_name(name)USINGBTREE)ENGINE=InnoDBAUTO_INCREMENT=1570068DEFAULTCHARSET=utf8ROW_FORMAT=REDUNDANTCOMMENT=账户表;反例:CREATETABLEa
5、ccount(idint(11)NOTNULLAUTO_INCREMENT,namevarchar(255)DEFAULTNULL,balanceint(11)DEFAULTNULL,create_timedatetimeNOTNULL,update_timedatetimeNOTNULLONUPDATECURRENT_TIMESTAMP,PRIMARYKEY(id),KEYidx_name(name)USINGBTREE)ENGINE=InnoDBAUTO_INCREMENT=1570068DEFAULTCHARSET=utf8;4. SQL 书写格式,关键字大小保持一致,使用缩进。【SQL
6、 规范优雅】正例:SELECTstu.name,sum(stu.score)FROMStudentstuWHEREstu.classNo=1班GROUPBYstu.name反例:SELECTstu.name,sum(stu.score)fromStudentstuWHEREstu.classNo=1班groupbystu.name.显然,统一关键字大小写一致,使用缩进对齐,会使你的 SQL 看起来更优雅5. INSERT 语句标明对应的字段名称。【SQL 规范优雅】反例:insertintoStudentvalues(666,捡田螺的小男孩,100);正例:insertintoStudent(
7、student_id,name,score)values(666,捡田螺的小男孩,100);6. 变更 SQL 操作先在测试环境执行,写明详细的操作步骤以及回滚方案,并在上生产前 review。【SQL 后悔药】 变更 SQL 操作先在测试环境测试,避免有语法错误就放到生产上了。 变更SQL操作需要写明详细操作步骤,尤其有依赖关系的时候,如:先修改表结构再补充对应的数据。 变更SQL操作要有回滚方案,并在上生产前,review 对应变更 SQL。7. 设计数据库表的时候,加上三个字段:主键、create_time、update_time。【SQL 规范优雅】反例:CREATETABLEacco
8、unt(namevarchar(255)DEFAULTNULLCOMMENT账户名,balanceint(11)DEFAULTNULLCOMMENT余额,)ENGINE=InnoDBAUTO_INCREMENT=1570068DEFAULTCHARSET=utf8ROW_FORMAT=REDUNDANTCOMMENT=账户表;正例:CREATETABLEaccount(idint(11)NOTNULLAUTO_INCREMENTCOMMENT主键Id,namevarchar(255)DEFAULTNULLCOMMENT账户名,balanceint(11)DEFAULTNULLCOMMENT余额
展开阅读全文