【重学 MySQL】十二、SQL 语言的规则与规范

【重学 MySQL】十二、SQL 语言的规则与规范

  • 基本规则
  • 注释
  • 语法规则
  • 命名规则
    • 基本命名规则
    • 具体命名规范
    • 其他注意事项
  • 数据导入指令

在这里插入图片描述

SQL(Structured Query Language,结构化查询语言)的规则与规范是确保SQL语句能够正确执行、提高代码可读性和可维护性的基础。

基本规则

  1. 语句结构

    • SQL语句可以写在一行或多行中,为了提高可读性,建议将各子句分行写,必要时使用缩进。
    • 关键字不能被缩写也不能分行。
    • 每条SQL命令通常以分号(;)结束,也可以在MySQL中使用\g或\G作为命令结束符(特别是在客户端工具中)。
  2. 标点符号

    • 必须保证所有的括号(())、单引号(')、双引号(")是成对结束的。
    • 必须使用英文状态下的半角输入方式。字符串型和日期时间类型的数据必须使用单引号(')括起来。
    • 列的别名尽量使用双引号(" "),且不建议省略AS关键字(尽管在某些数据库系统中可以省略)。
  3. 大小写规范

    • SQL关键字、函数名等通常不区分大小写(如SELECTselect在大多数数据库系统中是等效的)。但是,为了保持代码的一致性和可读性,建议采用统一的书写规范。
    • 在MySQL中,数据库名、表名、列名(或字段名)在Windows环境下是大小写不敏感的,而在Linux环境下是大小写敏感的。推荐的做法是将数据库名、表名、列名等小写,而将SQL关键字、函数名大写。
  4. 命名规则

    • 数据库、表名不得超过一定字符数限制(如MySQL中通常为30个字符),变量名也有类似限制。
    • 名称必须只能包含字母(A-Z, a-z)、数字(0-9)和下划线(_),且不能包含空格或特殊字符。
    • 同一个数据库软件中,数据库名不能重名;同一个库中,表名不能重名;同一个表中,字段名不能重名。
    • 字段名不应与保留字、数据库系统或常用方法冲突,若冲突可使用反引号(`)将字段名括起来。

注释

SQL支持单行注释和多行注释,以提高代码的可读性。

  • 单行注释
    • 使用#(MySQL特有)或--(后跟一个空格)进行注释。
  • 多行注释
    • 使用/* 注释内容 */进行注释。

语法规则

SQL语言包含多种类型的语句,每种语句都有其特定的语法规则。例如:

  • 数据定义语言(DDL):用于定义数据库的结构,如CREATE TABLEALTER TABLEDROP TABLE等。
  • 数据操纵语言(DML):用于对数据库中的数据进行增、删、改等操作,如INSERT INTOUPDATEDELETE等。
  • 数据查询语言(DQL):用于从数据库中检索数据,主要是SELECT语句。
  • 数据控制语言(DCL):用于定义数据库、表、字段的访问权限和安全级别,如GRANTREVOKE等。

在编写SQL语句时,需要遵循相应的语法规则,如SELECT语句后面必须跟FROM子句来指定查询的数据源,WHERE子句用于指定查询条件,GROUP BY子句用于对结果集进行分组等。

总之,SQL语言的规则与规范是确保SQL语句正确执行、提高代码质量的重要基础。在编写SQL语句时,应严格遵守这些规则和规范,以提高代码的可读性、可维护性和执行效率。

命名规则

SQL命名规则是数据库设计中至关重要的一部分,它有助于确保数据库对象(如表、列、视图等)的名称具有一致性、清晰性和可维护性。

基本命名规则

  1. 字符限制

    • 数据库名、表名、列名等对象名通常有一定的字符数限制,具体限制取决于数据库系统。例如,在MySQL中,数据库名和表名通常不超过64个字符,但为了统一规范、易于辨识以及减少传输量,推荐不超过30-32个字符。
    • 名称必须只能包含字母(A-Z, a-z)、数字(0-9)和下划线(_),且通常不能以数字开头。
  2. 大小写敏感性

    • 在不同的数据库系统中,对象名的大小写敏感性可能有所不同。例如,MySQL在Windows环境下是大小写不敏感的,而在Linux环境下是大小写敏感的。因此,推荐采用统一的命名规范,如全部小写,以避免潜在的混淆。
  3. 避免使用保留字

    • 数据库系统保留了一系列的关键字(如SELECTINSERT等),这些关键字不能用作数据库对象的名称。如果确实需要使用类似保留字的名称,可以使用反引号(`)将其括起来。
  4. 避免使用特殊字符

    • 除了下划线(_)之外,应避免在数据库对象名称中使用其他特殊字符,如空格、点(.)、斜杠(/)等。

具体命名规范

  1. 数据库名

    • 应简洁明了,通常使用项目名或产品名作为数据库名。
    • 避免使用特殊字符和下划线,除非必要。
  2. 表名

    • 应具有描述性,能够反映表中的数据内容。
    • 采用单数形式,如employee而不是employees
    • 如果表属于某个特定模块或系统,可以在表名前加上该模块或系统的缩写作为前缀。
    • 布尔类型的字段可以使用is_作为前缀,后接动词过去分词,如is_active
  3. 列名

    • 应具有描述性,能够反映列中的数据内容。
    • 避免使用数据类型作为列名的一部分,如int_id
    • 如果列名由多个单词组成,可以使用下划线(_)分隔,如first_name
    • 主键列通常命名为id表名_id(如employee_id),以表示其唯一性。
  4. 索引名

    • 索引名应具有描述性,能够反映索引的用途。
    • 非唯一索引通常按照idx_字段名的格式命名,唯一索引则按照uniq_字段名的格式命名。
  5. 视图名

    • 视图名应以view_作为前缀,以区分于表名。
    • 视图名应具有描述性,能够反映视图的功能。
  6. 存储过程、函数和触发器

    • 存储过程名通常以sp_usp_等作为前缀。
    • 函数名通常以fn_作为前缀。
    • 触发器名可以根据其操作类型(如Insert、Delete、Update)和表名来命名,如tr_employee_i表示在employee表上执行的Insert触发器。

其他注意事项

  • 命名一致性:在整个数据库中,应保持命名的一致性。例如,如果某个表名采用了驼峰命名法(CamelCase),那么其他表名也应采用相同的命名法。
  • 简洁性:名称应尽可能简洁,避免使用冗长的名称。但是,简洁性不应以牺牲描述性为代价。
  • 可读性:名称应具有良好的可读性,以便于其他开发人员理解和维护。

综上所述,SQL命名规则是确保数据库对象名称一致性、清晰性和可维护性的重要手段。在设计和命名数据库对象时,应遵循上述规则和建议。

数据导入指令

在 MySQL 中,source 命令是一个非常有用的指令,它允许你从文件中读取并执行 SQL 语句。这个命令通常用于导入数据库结构(如表定义)或数据到 MySQL 数据库中。

要使用 source 命令,你需要首先登录到 MySQL 命令行界面(CLI)或使用 MySQL 的客户端工具,如 MySQL Workbench、phpMyAdmin(尽管在 phpMyAdmin 中不直接使用 source 命令,但可以通过类似的界面上传并执行 SQL 文件)。

以下是在 MySQL 命令行界面中使用 source 命令的基本步骤:

  1. 登录到 MySQL
    首先,你需要通过命令行或终端登录到 MySQL 服务器。使用如下命令(根据你的实际用户名、密码和主机名进行替换):

    mysql -u 用户名 -p
    

    输入命令后,系统会提示你输入密码。

  2. 选择数据库
    在导入数据之前,确保你已经选择了正确的数据库。使用 USE 语句来选择数据库:

    USE 数据库名;
    
  3. 使用 source 命令导入数据
    现在,你可以使用 source 命令来导入 SQL 文件中的数据了。在 MySQL 命令行中,执行如下命令(将 文件路径 替换为你的 SQL 文件的实际路径):

    source 文件路径;
    

    注意:在 Windows 系统中,文件路径可能需要使用双反斜杠(\\)或单斜杠(/)作为路径分隔符,而在 Unix/Linux/macOS 系统中,通常使用单斜杠(/)。

    例如,在 Unix/Linux/macOS 系统中,如果你的 SQL 文件位于 /home/user/data/import.sql,则命令将是:

    source /home/user/data/import.sql;
    

    而在 Windows 系统中,如果文件位于 C:\Users\User\Documents\data\import.sql,则命令可能是(取决于你的命令行解释器):

    source C:\\Users\\User\\Documents\\data\\import.sql;
    

    source C:/Users/User/Documents/data/import.sql;
    
  4. 验证导入
    导入完成后,你可以通过查询数据库中的表来验证数据是否已成功导入。

请注意,使用 source 命令时,MySQL 会读取并执行 SQL 文件中的每一条 SQL 语句。因此,请确保你的 SQL 文件是安全的,不包含任何可能对数据库造成损害的语句。此外,对于非常大的 SQL 文件,导入过程可能需要一些时间,具体取决于你的服务器性能和数据量。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构C //线性表ADT结构及相关函数

数据结构(C语言版)严蔚敏 吴伟民 线性表ADT结构及相关函数 环境:Linux Ubuntu(云服务器) 工具:vim 代码块(头文件,函数文件,主文件) list.h头文件 /****…

11大排序的原理讲解和Python源码剖析

排序算法 【谁教你这么剪的 | 11大排序的原理讲解和Python源码剖析】 https://www.bilibili.com/video/BV1Zs4y1X7mN/?share_sourcecopy_web&vd_sourceed4a51d52f6e5c9a2cb7def6fa64ad6a 稳定:如果a原本在b前面,而ab,排序之后a仍然在b…

金士顿NV2 2TB假固态硬盘抢救记,RL6577/RTS5765DL量产工具,RTS5765DL+B47R扩容开卡修复

之前因为很长时间不买固态硬盘,没注意到NVME的固态盘也有了假货和扩容盘,花200多块买了个2TB的金士顿NV2固态硬盘,我原本以为NV1的假货最多是用黑片冒充正片,结果没想到NV2居然有扩容的。后来发现是扩容盘的时候,已经过…

亿发进销存一体化解决方案:数据互联互通,优化企业全局管理-下

亿发软件凭借对产品、市场、业务的深入理解,在进销存基础上进行了延伸,推出多终端、一体化的“进销存管理系统”多元产品矩阵。在技术上实现电脑端、手机端、PDA端、零售端、商家版以及小程序商城的多终端无缝对接,保障企业业务的连贯性和效率…

Win10安装.net FrameWork3.5失败解决方法

win10安装.net FrameWork3.5失败解决方法 已经好久没有来投稿了,实在最近业务缠身,忙的焦头烂额(呵~多么伟大的牛马) 但最近开发使用windows11实在是拉胯的不行,升级完就后悔,所以就一怒之下,重装了win10 可是,好家伙,我重装完遇到一个问题,就是在使用.Net Framework3.5,按照Mi…

Zynq7020 SDK 初学篇(4)- PL 端 GPIO

1.开发背景 基于 PS 端 GPIO 的基础上,如何调用 PL 端 GPIO 的输入输出 2.开发需求 PL 端按键控制 PL 端 LED 3.开发环境 Zynq7020 Vivado2017.4 4.实现步骤 4.1 设计配置 这里设置 PIO 数量 3 个 由于 PL 端不像 PS 端一样绑定 GPIO,所以需要对上面…

C++:拷贝构造函数、赋值运算符重载

目录 一、拷贝构造函数 拷贝构造的特点 二、赋值运算符重载 2.1 运算符重载 2.2 赋值运算符重载 赋值运算符重载的特点 一、拷贝构造函数 如果一个构造函数的第一个参数是自身类类型的引用,且任何额外的参数都有默认值,则此构造函数也叫做拷贝构造…

【Python篇】matplotlib超详细教程-由入门到精通(上篇)

文章目录 第一部分:基础概念与简单绘图1.1 matplotlib 简介1.2 创建第一个折线图1.3 图表的基本组成元素 第二部分:图表样式与修饰2.1 修改图表样式2.2 添加图例2.3 调整坐标轴与刻度 第三部分:绘制不同类型的图表3.1 散点图 (Scatter Plot)3…

JVM 调优篇2 jvm的内存结构以及堆栈参数设置与查看

一 jvm的内存模型 2.1 jvm内存模型概览 二 实操案例 2.1 设置和查看栈大小 1.代码 /*** 演示栈中的异常:StackOverflowError** author shkstart* create 2020 下午 9:08** 设置栈的大小: -Xss (-XX:ThreadStackSize)** -XX:PrintFlagsFinal*/ public class S…

关于ansible自动化运维工具

成长路上不孤单😊【14后,C爱好者,持续分享所学,如有需要欢迎收藏转发😊😊😊😊😊😊😊!!!!&#xff…

Android SystemUI组件(05)状态栏-系统状态图标显示管理

该系列文章总纲链接:专题分纲目录 Android SystemUI组件 本章关键点总结 & 说明: 说明:本章节持续迭代之前章节的思维导图,主要关注下方 SystemBars分析中状态栏中的部分-系统状态图标显示&管理 即可。 1 系统状态图标显…

Error when attempting to add data source to Azure OpenAI api

题意:尝试向 Azure OpenAI API 添加数据源时出现错误 问题背景: My code is working for a call to Azure OpenAI when I dont have a datasource added. However, when I do add my datasource with the following parameters I get an error: 当我没…

Dubbo精要

1、为什么需要 Dubbo? 分布式系统中的服务调用和协调问题:在分布式系统中,服务之间的相互依赖会导致复杂的通信和协调问题。Dubbo提供了高效的服务调用和自动注册、发现等功能,使得构建分布式应用程序更加容易。服务治理和服务调…

LeetCode 热题 100 回顾5

干货分享,感谢您的阅读!原文见:LeetCode 热题 100 回顾_力code热题100-CSDN博客 一、哈希部分 1.两数之和 (简单) 题目描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标…

CentOS Stream 8中安装和使用 Docker

docker安装包-CSDN博客 〇、常用的docker命令 docker的作用: 快速进行软件的安装,便于软件环境的维护 docker的镜像: 压缩了指定软件的安装包的文件。使用镜像文件创建容器 docker的容器: 容器可以理解为就是一台小电脑。安装的linux系统&am…

C++入门基础篇

引言 说到编程语言常常听到的就是C语言C Java 。C语言是面向过程的,C是和Java是面向对象的,那么什么是面向对象呢?什么又是面向过程呢?C是什么?封装、继承、多态是什么?且听我絮絮叨叨。 C入门基础 1.命名…

SpringBoot OAuth2自定义登陆/授权页

背景 5 月份的时候,我实践并整理了一篇博客:SpringBoot搭建OAuth2,该博客完成之后,很长一段时间里我都有种意犹未尽的感觉。诚然,我把OAuth2搭起来了,各种场景的用例也跑通了,甚至源码也看了&am…

《花100块做个摸鱼小网站! 》第六篇—将小网站部署到云服务器上

⭐️基础链接导航⭐️ 服务器 → ☁️ 阿里云活动地址 看样例 → 🐟 摸鱼小网站地址 学代码 → 💻 源码库地址 一、前言 到这一篇我们终于把环境搭好,也做好了几个热搜小组件,为了让我们方便展示成果或者方便自己摸鱼&#xff0c…

2024最新!Facebook手机版和网页版改名教程!

Facebook作为全球最大的社交平台之一,允许用户自定义名字和昵称。在Facebook更新姓名可以帮助您更好的展现账号形象。本文将为您提供详细的步骤指导,帮助您在手机APP和网页版上轻松完成Facebook改名操作。 Facebook手机版改名 打开Facebook APP并登录账号…

DataGridView用法合集【精品】

目录 1.当前的单元格属性取得、变更 2.DataGridView编辑属性 3.DataGridView最下面一列新追加行非表示 4.判断当前选中行是否为新追加的行 5. DataGridView删除行可否设定 6. DataGridView行列不表示和删除 7. DataGridView行列宽度高度设置为不能编辑 8. DataGridView行…