认识 SQL

文章目录

1.简介

SQL(Structured Query Language,结构化查询语言)是一种用于管理和操作关系型数据库的标准化查询语言。它是一种特定域语言(DSL),用于定义数据库结构、插入、更新、删除数据以及查询数据等操作,并不局限于数据查询。

SQL 最初由 IBM 的 Donald D. Chamberlin 和 Raymond F. Boyce 在 1970 年代初开发,作为关系数据库管理系统(RDBMS)的查询语言。随后,SQL 在 1986 年成为了 ANSI(美国国家标准学会)和 ISO(国际标准化组织)的标准,并在数据库管理领域得到广泛应用。

SQL 被标准化后,仍在不断的发展和完善,至今经历了一系列修订,加入了大量新特性。虽然有这一标准的存在,但很多数据库的实现并没有完全遵循它,大多数 SQL 代码在移植到不同的数据库系统之前需要进行一些更改。

2.组成

关系数据库管理系统使用 SQL 来存储和管理数据,系统存储多个相互关联的数据库表,如常用的 Oracle、MySQL、MS SQL Server 等。 以下是此类系统的组成成分。

  • SQL 表

SQL 表是关系数据库的基本元素。 SQL 数据库表由行和列组成。 数据库工程师在多个数据库表之间创建关系以优化数据存储空间。

例如,数据库工程师为商店中的产品创建一个 SQL 表:

Product ID	Product Name	Color ID
0001		Mattress		Color 1
0002		Pillow			Color 2

然后数据库工程师将产品表链接到带有颜色 ID 的颜色表:

Color ID	Color Name
Color 1		Blue
Color 2		Red
  • SQL 语句

SQL 语句或 SQL 查询是关系数据库管理系统可以理解的有效指令。 软件开发人员使用不同的 SQL 语言元素构建 SQL 语句。 SQL语言元素是构成正确SQL语句的标识符、变量和搜索条件等组件。

例如,以下 SQL 语句使用 SQL INSERT 命令将价格为 499 美元的床垫品牌 A 存储到名为 mattress_table 的表中,其中列名称为brand_name 和 cost:

sql 复制代码
INSERT INTO mattress_table (brand_name, cost)
VALUES('A','499');
  • 存储过程

存储过程是存储在关系数据库中的一个或多个 SQL 语句的集合。 软件开发人员使用存储过程来提高效率和性能。 例如,他们可以创建一个存储过程来更新销售表,而不是在不同的应用程序中编写相同的 SQL 语句。

3.工作原理

结构化查询语言 (SQL) 的志聪过程需要经过几个软件组件,包括以下组件。

  • 解析器

解析器首先将 SQL 语句中的一些单词单词化,或用特殊符号替换。然后,解析器会检查语句是否存在以下情况:

  1. 正确性

解析器会验证 SQL 语句是否符合 SQL 语义或规则,以确保查询语句正确性。例如,解析器会检查 SQL 命令是否以分号结尾。如果缺少分号,解析器将返回错误。

  1. 授权

解析器还会验证运行查询的用户是否具有操作相应数据的必要授权。例如,只有管理员用户才有权删除数据。

  • 关系引擎

关系引擎或查询处理器会创建一个计划,以最有效的方式检索、写入或更新相应数据。例如,关系引擎会检查类似的查询,重用以前的数据操作方法,或创建新的方法。关系引擎以 SQL 语句的中间级表示形式(称为字节码)编写计划。关系数据库使用字节码高效地执行数据库搜索和修改。

  • 存储引擎

存储引擎或数据库引擎是指处理字节码并运行预期 SQL 语句的软件组件。存储引擎会读取并存储物理磁盘存储上的数据库文件中的数据。完成后,存储引擎会将结果返回给请求应用程序。

4.五种子语言

SQL 由多种类型的语句组成,这些语句可以被非正式地归类为子语言,主要分为 5 类。

  • DCL(Data Control Language)

DCL 数据控制语言,用于对数据库,数据表的访问角色和权限的控制等。

GRANT - 授权 
REVOKE - 撤销授权 
DENY - 拒绝授权
  • DDL(Data Definition Language)

DDL 数据定义语言用于定义数据库结构,用于定义数据库的结构和模式。DDL 包括创建、修改和删除数据库对象的命令,例如表、索引、视图等。

CREATE - 创建
ALTER - 修改
DROP - 删除
TRUNCATE - 截断
RENAME - 重命名
COMMENT - 注释
  • DML(Data Manipulation Language)

DML 数据操纵语言供用户对数据库中数据的操作,包括数据的增加、删除、更新,载入等操作。

UPDATE - 更新数据库表中的数据 
DELETE - 从数据库表中删除数据 
INSERT INTO - 向数据库表中插入数据
REPLACE INTO - 向数据库表中插入数据,如果存在先删除
LOAD - 从文件中导入数据到数据库表
  • DQL(Data Query Language)

DQL 数据查询语言用以从表中获得数据,确定数据怎样在应用程序给出。 SELECT 是 DQL(也是所有 SQL)用得最多的动词。常用的关键字有:

SELECT-从数据库表中获取数据 

SELECT 语句中常用关键字有:

FROM - 指定从哪个数据表或子查询中查询
WHERE - 指定查询条件
GROUP BY - 结合合计函数,根据一个或多个列对结果集进行分组
HAVING - 对分组后的结果集进行筛选
ORDER BY - 对结果集进行排序
LIMIT - 对结果集进行top限制输出
UNION - 结果集纵向联合
JOIN - 结果集横向拼接
  • TCL(Transaction Control Language)

TCL 事务控制语言用于控制事务的执行。

SQL事务是数据库管理系统中的一个重要概念,它是一系列数据库操作(如插入、更新、删除等)的逻辑单元,要么全部执行成功并永久保存,要么全部失败并回滚到操作前的状态,保证数据库的数据一致性和可靠性。

TCL 命令只能与 DML 命令一起使用,例如 INSERT、DELETE 和 UPDATE 等。

BEGIN TRANSACTION 或 START- 开始事务
SAVEPOINT - 在事务中设置保存点,可以回滚到此处
ROLLBACK - 回滚 
COMMIT - 提交
SET TRANSACTION -- 改变事务选项
SET CONSTRAINT - 启用或禁用外键约束

5.注释方式

SQL 注释是用来在 SQL 语句中添加对代码的解释说明。SQL 支持两种类型的注释符号。

单行注释:使用两个连续的减号(--)表示。减号后面的内容将被视为注释,直到该行结束。

sql 复制代码
SELECT column1, column2
FROM table
-- This is a single-line comment
WHERE condition;

注意,MySQL 也支持使用 # 符号进行单行注释。不过 # 并不是 SQL 标准规定的注释方式,并不是所有数据库都支持。

多行注释:使用/* 注释内容*/的格式表示。注释内容位于 /* 和 */ 之间,可以跨越多行。

sql 复制代码
SELECT column1, column2
FROM table
/* This is a
   multi-line comment */
WHERE condition;

6.字符串表示方式

在 SQL 标准中,字符串使用单引号(')来表示,而不是双引号(")。

但对于主流的数据库,都支持双引号表示字符串。比如 Oracle、MySQL 和 SQL Server 等。

如果字符串中包含单引号该如何表示呢?

在 SQL 中,如果要表示一个带有单引号的字符串有多种方式。

可以使用反斜杠(\)进行转移,也可以使用单引号进行转义,即使用两个单引号来表示一个单引号。

sql 复制代码
SELECT 'It\'s a beautiful day';
SELECT 'It''s a beautiful day';

因为 MySQL 支持使用双引号表示字符串,所以还可以使用双引号表示一个包含单引号的字符串。

sql 复制代码
SELECT "It's a beautiful day"

反之亦然,如果字符串中包含双引号,也可以使用上面三种方式来表示带有双引号的字符串。

至于使用单引号还是双引号表示字符串,我们应该首选单引号,因为这符合 SQL 标准,且是主流的做法。


参考文献

SQL - Wikipedia
What Is SQL (Structured Query Language)? - Amazon AWS

相关推荐
Sunyanhui12 小时前
牛客网 SQL36查找后排序
数据库·sql·mysql
Mitch3114 小时前
【漏洞复现】CVE-2021-45788 SQL Injection
sql·web安全·docker·prometheus·metersphere
网络安全King4 小时前
网络安全 - SQL Injection
sql·web安全·php
Stanford_11066 小时前
高级的SQL查询技巧有哪些?
sql·微信小程序·twitter·微信开放平台
wlyang6668 小时前
1. SQL常见笔试题目
数据库·sql
smilejingwei9 小时前
SQL,生成指定时间间隔内的事件次序号
数据库·sql·spl·esprocspl
张伯毅11 小时前
Flink SQL 支持 kafka 开启 kerberos 权限控制.
sql·flink·kafka
向阳121811 小时前
mybatis 动态 SQL
数据库·sql·mybatis
小黄人软件11 小时前
20241220流水的日报 mysql的between可以用于字符串 sql 所有老日期的,保留最新日期
数据库·sql·mysql
青莳吖11 小时前
Java通过Map实现与SQL中的group by相同的逻辑
java·开发语言·sql