MySql数据库SQL编写规范注意事项

MySQL数据库SQL编写规范对于提高代码可读性、增强代码维护性、优化查询性能、减少错误发生、促进标准化和团队协作以及提升开发效率等方面都具有重要意义。因此,在开发过程中应严格遵守SQL编写规范,以确保代码的质量和效率。

以下是 MySQL 数据库 SQL 编写的核心规范和最佳实践,涵盖可读性、性能、安全性和可维护性等方面:


一、命名规范

  1. 表名
    • 全小写,下划线分隔,明确表用途(如 user_account, order_detail)。
    • 避免保留字(如 desc, group),可通过反引号转义但不推荐。
  2. 字段名
    • 全小写,下划线分隔,避免冗余前缀(如 user_name,而非 tbl_user_name)。
  3. 索引名
    • 统一格式:idx_表名_字段(如 idx_user_email)或 uniq_表名_字段(唯一索引)。
  4. 主键
    • 建议命名为 id,类型为 BIGINT UNSIGNED AUTO_INCREMENT

二、SQL 编写规范

  1. 代码格式

    • 关键字大写(如 SELECT, WHERE),表名/字段名小写,缩进对齐:
      SELECT u.user_id, o.order_amount
      FROM user u
      INNER JOIN order o ON u.user_id = o.user_id
      WHERE u.status = 1AND o.create_time > '2023-01-01';
      
  2. 避免隐式操作

    • 显式指定字段别名(如 COUNT(*) AS total)。
    • 禁用隐式类型转换(如 WHERE id = '100',若 id 是整型应写 WHERE id = 100)。
  3. 事务控制

    • 明确事务边界,避免长事务:
      START TRANSACTION;
      -- 业务操作
      UPDATE account SET balance = balance - 100 WHERE user_id = 1;
      UPDATE account SET balance = balance + 100 WHERE user_id = 2;
      COMMIT;
      
  4. 注释

    • 复杂逻辑添加注释(如 -- 统计活跃用户,排除测试账号)。
  5. 语句结尾

    • SQL语句应以分号(;)结尾。

三、性能与安全规范

  1. 查询优化

    • 禁止 SELECT *,明确列出所需字段。
    • 分页查询使用 LIMIT,避免 OFFSET 过大(可改用游标分页)。
  2. 防 SQL 注入

    • 使用预编译(Prepared Statements)替代字符串拼接:
      -- 错误方式
      "SELECT * FROM user WHERE name = '" + name + "'";-- 正确方式(使用占位符)
      PREPARE stmt FROM 'SELECT * FROM user WHERE name = ?';
      EXECUTE stmt USING @name;
      
  3. 索引使用

    • 避免在 WHERE 子句中对索引字段进行函数操作(如 WHERE DATE(create_time) = '2023-01-01')。
    • 复合索引遵循最左前缀原则。
  4. 避免不必要的排序

    • 除非必要,否则应避免使用ORDER BY子句进行排序,以减少性能开销。
  5. 限制返回字段

    • 使用SELECT语句时,应明确指定所需的列名,而不是使用“*”替代所有列名。
  6. 避免大事务操作

    • 大事务操作可能导致系统资源的长时间占用,降低系统并发能力。因此,应尽量避免大事务操作,或在事务中尽量短的时间内完成操作并提交。

四、其他注意事项

  1. JOIN 使用
    • 优先 INNER JOIN,明确关联条件,避免笛卡尔积。
    • 替代方案:能用单表查询解决的,避免多表 JOIN。
  2. 分区表
    • 仅对超大表(如日志表)按时间或哈希分区,需评估查询是否命中分区。
  3. 避免过度使用
    • 存储过程/触发器:除非必要,优先业务层实现逻辑。
    • 视图:避免多层嵌套视图导致性能问题。
  4. 适当使用临时表和游标
  • 虽然临时表和游标在某些情况下很有用,但它们也会增加系统的开销。因此,应谨慎使用,并在可能的情况下寻找基于集的解决方案来替代它们。
  1. 避免硬编码
  • 在SQL语句中,应避免使用硬编码的值。相反,应使用变量绑定来实现SQL语句的共享和重用。
  1. 定期维护索引
  • 索引可以提高查询效率,但也会占用系统资源。因此,应定期维护索引,如重建或优化索引,以确保其始终处于最佳状态。

五、数据定义与操作

  1. DDL语句
    • 在创建或删除数据库、表等对象时,应使用正确的DDL语句。例如,使用CREATE语句创建数据库和表;使用ALTER语句修改数据库和表的结构;使用DROP语句删除数据库和表等对象。
  2. DML语句
    • 在插入、删除或修改数据时,应使用正确的DML语句。例如,使用INSERT语句插入数据;使用DELETE语句删除数据;使用UPDATE语句修改数据。

六、工具与自动化

  1. SQL 审核
    • 使用工具(如 SonarQube、美团 SQLAdvisor)检查潜在问题。
  2. 版本控制
    • 所有 SQL 变更通过迁移脚本(Migration Script)管理(如 Flyway、Liquibase)。
  3. Explain 分析
    • 对复杂查询必用 EXPLAIN 检查执行计划,关注 typekeyrows 列。

七、示例对比

错误写法
select * from user where status = 1 and createtime > 20230101;
-- 问题:SELECT *、createtime 未格式化日期、无索引优化
规范写法
SELECT user_id, username, email
FROM user
WHERE status = 1AND create_time > '2023-01-01 00:00:00'
ORDER BY user_id DESC
LIMIT 10;

八、总结

  • 核心原则:代码清晰 > 性能优化 > 灵活扩展。
  • 团队协作:通过 Code Review 和规范文档统一风格。
  • 持续优化:结合慢查询日志(slow_query_log)定期分析高频低效 SQL。

遵循以上规范可显著提升 SQL的可维护性和执行效率,降低故障风险。养成良好的SQL编写习惯可以提高开发效率。规范的代码结构使得代码更易于编写、调试和测试。开发人员可以更快地理解和修改代码,从而缩短开发周期,提高项目交付速度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/69457.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jenkins 使用教程:从入门到精通

在软件开发的复杂流程中,持续集成与持续交付(CI/CD)是提升开发效率和保障软件质量的核心实践。Jenkins 作为一款备受欢迎的开源自动化服务器,在 CI/CD 流程中发挥着举足轻重的作用。本文将深入、详细地介绍 Jenkins 的使用方法&am…

通过k8s请求selfsubjectrulesreviews查询权限

当前是通过kubelet进行查询 curl --cacert /etc/kubernetes/pki/ca.crt \ --cert /var/lib/kubelet/pki/kubelet-client-current.pem \ --key /var/lib/kubelet/pki/kubelet-client-current.pem \ -d - \ -H "Content-Type: application/json" \ -H Accept: applicat…

C语言基础系列【3】VSCode使用

前面我们提到过VSCode有多么的好用,本文主要介绍如何使用VSCode编译运行C语言代码。 安装 首先去官网(https://code.visualstudio.com/)下载安装包,点击Download for Windows 获取安装包后,一路点击Next就可以。 配…

windows安装WSL完整指南

本文首先介绍WSL,然后一步一步安装WSL及Ubuntu系统,最后讲解如何在两个系统之间访问和共享文件信息。通过学习该完整指南,能帮助你快速安装WSL,解决安装和使用过程中的常见问题。 理解WSL(Windows Subsystem for Linux…

doris:MySQL 兼容性

Doris 高度兼容 MySQL 语法,支持标准 SQL。但是 Doris 与 MySQL 还是有很多不同的地方,下面给出了它们的差异点介绍。 数据类型​ 数字类型​ 类型MySQLDorisBoolean- 支持 - 范围:0 代表 false,1 代表 true- 支持 - 关键字&am…

【LeetCode 刷题】贪心算法(4)-区间问题

此博客为《代码随想录》贪心算法章节的学习笔记,主要内容为贪心算法区间问题的相关题目解析。 文章目录 55. 跳跃游戏45. 跳跃游戏 II452. 用最少数量的箭引爆气球435. 无重叠区间763. 划分字母区间56. 合并区间 55. 跳跃游戏 题目链接 class Solution:def canJu…

苹果公司宣布正式开源 Xcode 引擎 Swift Build145

2025 年 2 月 1 日,苹果公司宣布正式开源 Xcode 引擎 Swift Build145。 Swift 是苹果公司于 2014 年推出的一种开源编程语言,用于开发 iOS、iPadOS、macOS、watchOS 和 tvOS 等平台的应用程序。 发展历程 诞生:2014 年,苹果在全球…

PID 算法简介(C语言)

一、简介: PID是比例、积分、微分三个环节的组合,用来进行反馈控制。每个部分都有对应的系数,也就是Kp、Ki、Kd。PID 算法实现这三个部分的计算,然后综合起来得到控制输出。 二、PID控制器结构体: PID控制器结构体:包含PID参数(Kp, Ki, Kd);存储积分项和上一次误差;…

123,【7】 buuctf web [极客大挑战 2019]Secret File

进入靶场 太熟悉了,有种回家的感觉 查看源代码,发现一个紫色文件 点下看看 点secret 信息被隐藏了 要么源代码,要么抓包 源代码没有,抓包 自己点击时只能看到1和3处的文件,点击1后直接跳转3,根本不出…

HTTP协议学习大纲

第一阶段:HTTP基础概念 互联网与Web基础 理解Web工作原理:客户端-服务器模型URL与URI的结构及区别端口、协议、域名概念 HTTP协议概览 HTTP的作用与特点(无状态、无连接、可扩展)HTTP协议版本演进(0.9 → 1.0 → 1.1 …

Formality:时序变换(五)(寄存器复制)

相关阅读 Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482 一、引言 时序变换在Design Compiler的首次综合和增量综合中都可能发生,它们包括:时钟门控(Clock Gating)、寄存器合并(Register Merging)、…

我使用deepseek高效学习-分析外文网站Cron定时执行任务

最近在spring框架中 设置定时任务,有的末尾是星号有的是问号,有的是6位,有的是7位。就这个机会总结下cron表达式的使用,综合源代码中的crontab地址翻译分析,结合最近超爆的deepseek 提高学习效率,归纳总结出…

BurpSuite抓包与HTTP基础

文章目录 前言一、BurpSuite1.BurpSuite简介2.BurpSuite安装教程(1)BurpSuite安装与激活(2)安装 https 证书 3.BurpSuite使用4.BurpSuite资料 二、图解HTTP1.HTTP基础知识2.HTTP客户端请求消息3.HTTP服务端响应消息4.HTTP部分请求方法理解5.HTTPS与HTTP 总结 前言 在网络安全和…

华为交换机堆叠配置

一、CSS堆叠集群配置(框式交换机) 1、通过集群卡连接方式组建集群 [SwitchA] set css mode css-card \\配置集群卡连接方式 [SwitchA] set css id 1 \\配置成员交换机的集群ID(缺省值为1) [SwitchA] set css priority 100 \\配…

google 多模态aistudio Stream Realtime体验

参考: https://aistudio.google.com/live 使用gemini多模态能力,支持语音图像文字输入输出,实时交互体验 支持语音实时交互、摄像头加语音、屏幕视频语音 摄像头 屏幕共享

(文末提供数据集下载)ML.NET库学习001:基于PCA的信用卡异常检查之样本处理与训练

文章目录 (文末提供数据集下载)ML.NET库学习001:基于PCA的信用卡异常检查之样本处理与训练目标项目概述代码结构概述1. **主要类和文件**2. **命名空间和使用指令**3. **数据类 (TransactionObservation)**4. **主程序入口 (Main 方法)**5. **数据预处理 (DataPrepr…

基于GA-BP遗传算法优化神经网络+NSGAII多目标优化算法的工艺参数优化、工程设计优化!

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.GA-BP遗传算法优化神经网络NSGAII多目标优化算法,工艺参数优化、工程设计优化!(Matlab完整源码和数据) 多目标优化是指在优化问题中同时考虑多个目标的优化过程。在多…

1、http介绍

一、HTTP 和 HTTPS 简介 HTTP(HyperText Transfer Protocol) 用途:用于网页数据传输(不加密)。协议特性:以明文形式传输数据,默认端口 80,无身份验证和完整性保护。典型场景&#xf…

电商行业的新篇章:3D和AR技术助力销售转化率提升!

3D模型在电商行业的应用十分广泛,其影响深远且意义重大。以下是关于3D模型在电商行业应用的具体分析: 一、提升消费者购物体验与决策效率 三维呈现:通过3D技术,商品可以在电商平台上以三维形式呈现,消费者可以720旋转…

书籍《新能源汽车动力电池安全管理算法设计》和《动力电池管理系统核心算法》脑图笔记

目录 一、阅读背景二、《新能源汽车动力电池安全管理算法设计》脑图笔记三、《动力电池管理系统核心算法》脑图笔记四、后记参考学习 一、阅读背景 如今身处新能源动力电池行业,欲对动力电池相关算法做一些了解,通过查找相关电子书app,最后找…