【重学 MySQL】十二、SQL 语言的规则与规范
- 基本规则
- 注释
- 语法规则
- 命名规则
- 基本命名规则
- 具体命名规范
- 其他注意事项
- 数据导入指令
SQL(Structured Query Language,结构化查询语言)的规则与规范是确保SQL语句能够正确执行、提高代码可读性和可维护性的基础。
基本规则
-
语句结构:
- SQL语句可以写在一行或多行中,为了提高可读性,建议将各子句分行写,必要时使用缩进。
- 关键字不能被缩写也不能分行。
- 每条SQL命令通常以分号(;)结束,也可以在MySQL中使用\g或\G作为命令结束符(特别是在客户端工具中)。
-
标点符号:
- 必须保证所有的括号(())、单引号(')、双引号(")是成对结束的。
- 必须使用英文状态下的半角输入方式。字符串型和日期时间类型的数据必须使用单引号(')括起来。
- 列的别名尽量使用双引号(" "),且不建议省略
AS
关键字(尽管在某些数据库系统中可以省略)。
-
大小写规范:
- SQL关键字、函数名等通常不区分大小写(如
SELECT
和select
在大多数数据库系统中是等效的)。但是,为了保持代码的一致性和可读性,建议采用统一的书写规范。 - 在MySQL中,数据库名、表名、列名(或字段名)在Windows环境下是大小写不敏感的,而在Linux环境下是大小写敏感的。推荐的做法是将数据库名、表名、列名等小写,而将SQL关键字、函数名大写。
- SQL关键字、函数名等通常不区分大小写(如
-
命名规则:
- 数据库、表名不得超过一定字符数限制(如MySQL中通常为30个字符),变量名也有类似限制。
- 名称必须只能包含字母(A-Z, a-z)、数字(0-9)和下划线(_),且不能包含空格或特殊字符。
- 同一个数据库软件中,数据库名不能重名;同一个库中,表名不能重名;同一个表中,字段名不能重名。
- 字段名不应与保留字、数据库系统或常用方法冲突,若冲突可使用反引号(`)将字段名括起来。
注释
SQL支持单行注释和多行注释,以提高代码的可读性。
- 单行注释:
- 使用
#
(MySQL特有)或--
(后跟一个空格)进行注释。
- 使用
- 多行注释:
- 使用
/* 注释内容 */
进行注释。
- 使用
语法规则
SQL语言包含多种类型的语句,每种语句都有其特定的语法规则。例如:
- 数据定义语言(DDL):用于定义数据库的结构,如
CREATE TABLE
、ALTER TABLE
、DROP TABLE
等。 - 数据操纵语言(DML):用于对数据库中的数据进行增、删、改等操作,如
INSERT INTO
、UPDATE
、DELETE
等。 - 数据查询语言(DQL):用于从数据库中检索数据,主要是
SELECT
语句。 - 数据控制语言(DCL):用于定义数据库、表、字段的访问权限和安全级别,如
GRANT
、REVOKE
等。
在编写SQL语句时,需要遵循相应的语法规则,如SELECT
语句后面必须跟FROM
子句来指定查询的数据源,WHERE
子句用于指定查询条件,GROUP BY
子句用于对结果集进行分组等。
总之,SQL语言的规则与规范是确保SQL语句正确执行、提高代码质量的重要基础。在编写SQL语句时,应严格遵守这些规则和规范,以提高代码的可读性、可维护性和执行效率。
命名规则
SQL命名规则是数据库设计中至关重要的一部分,它有助于确保数据库对象(如表、列、视图等)的名称具有一致性、清晰性和可维护性。
基本命名规则
-
字符限制:
- 数据库名、表名、列名等对象名通常有一定的字符数限制,具体限制取决于数据库系统。例如,在MySQL中,数据库名和表名通常不超过64个字符,但为了统一规范、易于辨识以及减少传输量,推荐不超过30-32个字符。
- 名称必须只能包含字母(A-Z, a-z)、数字(0-9)和下划线(_),且通常不能以数字开头。
-
大小写敏感性:
- 在不同的数据库系统中,对象名的大小写敏感性可能有所不同。例如,MySQL在Windows环境下是大小写不敏感的,而在Linux环境下是大小写敏感的。因此,推荐采用统一的命名规范,如全部小写,以避免潜在的混淆。
-
避免使用保留字:
- 数据库系统保留了一系列的关键字(如
SELECT
、INSERT
等),这些关键字不能用作数据库对象的名称。如果确实需要使用类似保留字的名称,可以使用反引号(`)将其括起来。
- 数据库系统保留了一系列的关键字(如
-
避免使用特殊字符:
- 除了下划线(_)之外,应避免在数据库对象名称中使用其他特殊字符,如空格、点(.)、斜杠(/)等。
具体命名规范
-
数据库名:
- 应简洁明了,通常使用项目名或产品名作为数据库名。
- 避免使用特殊字符和下划线,除非必要。
-
表名:
- 应具有描述性,能够反映表中的数据内容。
- 采用单数形式,如
employee
而不是employees
。 - 如果表属于某个特定模块或系统,可以在表名前加上该模块或系统的缩写作为前缀。
- 布尔类型的字段可以使用
is_
作为前缀,后接动词过去分词,如is_active
。
-
列名:
- 应具有描述性,能够反映列中的数据内容。
- 避免使用数据类型作为列名的一部分,如
int_id
。 - 如果列名由多个单词组成,可以使用下划线(_)分隔,如
first_name
。 - 主键列通常命名为
id
或表名_id
(如employee_id
),以表示其唯一性。
-
索引名:
- 索引名应具有描述性,能够反映索引的用途。
- 非唯一索引通常按照
idx_字段名
的格式命名,唯一索引则按照uniq_字段名
的格式命名。
-
视图名:
- 视图名应以
view_
作为前缀,以区分于表名。 - 视图名应具有描述性,能够反映视图的功能。
- 视图名应以
-
存储过程、函数和触发器:
- 存储过程名通常以
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
命令的基本步骤:
-
登录到 MySQL:
首先,你需要通过命令行或终端登录到 MySQL 服务器。使用如下命令(根据你的实际用户名、密码和主机名进行替换):mysql -u 用户名 -p
输入命令后,系统会提示你输入密码。
-
选择数据库:
在导入数据之前,确保你已经选择了正确的数据库。使用USE
语句来选择数据库:USE 数据库名;
-
使用
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;
-
验证导入:
导入完成后,你可以通过查询数据库中的表来验证数据是否已成功导入。
请注意,使用 source
命令时,MySQL 会读取并执行 SQL 文件中的每一条 SQL 语句。因此,请确保你的 SQL 文件是安全的,不包含任何可能对数据库造成损害的语句。此外,对于非常大的 SQL 文件,导入过程可能需要一些时间,具体取决于你的服务器性能和数据量。