【重学 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 文件,导入过程可能需要一些时间,具体取决于你的服务器性能和数据量。

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

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

相关文章

【2024数模国赛赛题思路公开】国赛C题第三套思路丨无偿自提

C题参考思路 C题是一道优化问题,目的是根据题目所给的种植限制条件以及附件数据建立目标条件优化模型,优化种植策略,有利于方便田间管理,提高生产效益,减少各种不确定因素可能造成的种植风险。整个题目最重要的问题在…

Java框架第四课(对Spring的补充Spring web)

目录 一.Spring web的认识 (1)Spring Web概念 (2)Spring web的特点 (3)Springweb运行的流程 (4)Springweb运行的流程图 二.搭建Spring web 三.自定义处理器类搭建 (1)处理器类配置 (2)处理器类接受请求 (3)获得请求数据 四.拦截器 (1)关于拦截器: (2)拦截器的…

Axure中继器动态数据图表制作

在Axure RP中,中继器(Repeater)是一个非常强大的工具,它允许设计者动态地展示和交互数据,进而创建各种复杂的数据可视化图表,如柱状图、条形图、堆叠图、散点图和对比图。以下将详细介绍如何使用中继器来设…

持续集成与持续部署(CI/CD)的深入探讨

在现代软件开发中,持续集成(CI)和持续部署(CD)已成为不可或缺的实践。这些方法旨在加快软件交付的速度,同时提高软件的质量和稳定性。通过CI/CD,开发团队可以频繁地将代码更改集成到主分支&…

算法练习题14——leetcode84柱形图中最大的矩形(单调栈)

题目描述: 解题思路: 要解决这个问题,我们需要找到每个柱子可以扩展的最大左右边界,然后计算以每个柱子为高度的最大矩形面积。 具体步骤如下: 计算每个柱子左侧最近的比当前柱子矮的位置: 使用一个单调…

java后端保存的本地图片通过ip+端口直接访问

直接上代码吧 package com.ydx.emms.datapro.controller;import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.…

函数式接口实现策略模式

函数式接口实现策略模式 1.案例背景 我们在日常开发中,大多会写if、else if、else 这样的代码,但条件太多时,往往嵌套无数层if else,阅读性很差,比如如下案例,统计学生的数学课程的成绩: 90-100分&#…

idea添加本地环境执行模版

用Flink的环境执行时&#xff0c;因为最后会打包放服务器&#xff0c;所以有些jar包将不会打包上传&#xff0c;这些jar包用<scope>provided</scope>标记 所以这些jar包在本地运行时也会不提供&#xff0c;为了程序在本地能跑&#xff0c;我们每次执行是需手动添加…

JAVA-接口(一万四千字讲解)

目录 一、接口的概念 二、语法规则 三、接口使用 四、接口特性 五、实现多个接口 六、接口间的继承 七、接口使用实例 1.Comparable 2.写一个自己的sort 3.Comparator 八、类的克隆Clonable 1.Clonable接口 2.浅拷贝 3.深拷贝 九、抽象类和接口的区别 十、 Obje…

芯片时钟树评估的关键性能参数

前面有很多文章都介绍了PI性能的影响&#xff0c;也介绍了PSIJ对信号或时钟性能的影响&#xff0c;对于SOC设计&#xff0c;为了更好的理解电源完整性在芯片设计中的重要作用&#xff0c;对芯片的时钟树设计需要足够理解才能更好的明白电源完整性的影响。 时钟分布网络设计一直…

最基本的SELECT...FROM结构

第0种&#xff1a;最基本的查询语句 SELECT 字段名&#xff0c;字段名 FROM 表名 SELECT 1&#xff1b; SELECT 11,3*2&#xff1b; FROM SELECT 11,3*2 FROM DUAL&#xff1b;#dual&#xff1a;伪表 我们可以用它来保持一个平衡 这里我们的值不需要在任何一个表里&#xf…

9、类和对象

9.1 封装 9.1.1 封装的例子 class Student { public:string name;int age; public:void setName(string name_) {name name_;} }; int main() {Student s1;s1.setName("zhangsan");return 0; }类中的行为都叫做成员&#xff0c;例如成员属性&#xff0c;成员变量&…

飞速(FS)S5800-48T4S:如何使用MLAG?

MLAG&#xff08;多机箱链路聚合组&#xff09;可实现无缝故障转移并优化带宽利用率&#xff0c;从而增强网络冗余和提高可扩展性。它允许多台交换机作为一个统一实体运行&#xff0c;从而降低停机风险并确保网络运行不中断。飞速&#xff08;FS&#xff09;S5800-48T4S是一款支…

二维高斯函数的两种形式

第一种形式很常见 多元正态分布 多元正态分布&#xff08;Multivariate Normal Distribution&#xff09;&#xff0c;也称为多变量正态分布或多维正态分布&#xff0c;是统计学中一种重要的概率分布&#xff0c;用于描述多个随机变量的联合分布。 假设有 n n n 个随机变量…

【LabVIEW学习篇 - 18】:人机界面交互设计02

文章目录 错误处理函数简单错误处理器通用错误处理器清楚错误合并错误错误代码至错误簇转换查找第一个错误 鼠标指针 错误处理函数 在LabVIEW中&#xff0c;是通过错误输入簇和错误输出簇来传递错误信息&#xff0c;可以将底层错误信息传递到上层VI。设计人员需要对不同程度的…

2024 数学建模高教社杯 国赛(C题)| 农作物的种植策略 | 建模秘籍文章代码思路大全

铛铛&#xff01;小秘籍来咯&#xff01; 小秘籍团队独辟蹊径&#xff0c;运用等多目标规划等强大工具&#xff0c;构建了这一题的详细解答哦&#xff01; 为大家量身打造创新解决方案。小秘籍团队&#xff0c;始终引领着建模问题求解的风潮。 抓紧小秘籍&#xff0c;我们出发…

高并发内存池(一):项目介绍与定长内存池的实现

目录​​​​​​​ 项目介绍 池化技术 内存池 内存碎片 malloc工作原理 定长内存池 申请内存 释放内存 定位new VirtualAlloc函数 封装VirtualAlloc 定长内存池的最终代码 项目介绍 项目原型&#xff1a;goole的开源项目tcmalloc&#xff08;Thread-Caching Mal…

CIOE中国光博会&电巢科技即将联办“智能消费电子创新发展论坛”

在科技浪潮汹涌澎湃的当下&#xff0c;从通信领域的高速光传输&#xff0c;到消费电子中的高清显示与先进成像技术&#xff0c;光电技术的应用范围不断拓展且日益深化。而AIGC 凭借其丰富的内容供给与个性化反馈能力&#xff0c;正为新一代消费电子及智能穿戴产品开辟崭新的发展…

前端请求的路径baseURL怎么来的 ?nodejs解决cors问题的一种方法

背景&#xff1a;后端使用node.js搭建&#xff0c;用的是express 前端请求的路径baseURL怎么来的 &#xff1f; 前后端都在同一台电脑上运行&#xff0c;后端的域名就是localhost&#xff0c;如果使用的是http协议&#xff0c;后端监听的端口号为3000&#xff0c;那么前端请求…

S3C2440开发板:时钟,PWM定时器控制蜂鸣器发声

时钟 时钟和电源管理模块由三部分组成&#xff1a;时钟控制&#xff0c;USB 控制和电源控制。 S3C2440A 中的时钟控制逻辑可以产生必须的时钟信号&#xff0c;包括 CPU 的 FCLK&#xff0c;AHB 总线外设的 HCLK 以及 APB 总线外设的 PCLK。S3C2440A 包含两个锁相环&#xff08…