面向十一级 (CBSE) 的信息学实践 / MySQL 简介
注意: 基于 MySQL 简介章节 和 MySQL 图书 初始化。数据存储在关系数据库中,存储在一个或多个表中。
注意: 基于 SQL 维基教科书。
SQL 是 结构化查询语言 的首字母缩略词,它是一种用于从数据库中请求数据、向数据库中的表格添加、更新或删除数据的语言,或者用于操作数据库的元数据。
SQL 通常被发音为其名称中的三个字母,例如 ess-cue-ell,或者在某些人的用法中,发音为 sequel。
SQL 是一种声明式语言,其中期望的结果或操作在没有完成任务的具体细节的情况下给出。执行 SQL 命令所需的步骤由 SQL 数据库透明地处理。有时 SQL 被描述为 非过程化,因为过程化语言通常需要指定操作的细节,例如打开和关闭表格、加载和搜索索引、或者刷新缓冲区并将数据写入文件系统。因此,SQL 被认为是设计在比过程化语言更高的概念操作级别,因为更低级别的逻辑和物理操作没有被指定,而是由执行 SQL 的 SQL 引擎或服务器进程决定。
指令以命令的形式给出,命令由特定的 SQL 命令以及适用于该命令的附加参数和操作数组成。检索名为 Customers 的表格的所有行和列的最简单示例是
SELECT * FROM Customers; |
在 SELECT 命令后面的星号 (*) 是一个通配符,指的是表格中的所有列。SQL 假设要检索整个记录集,除非你提供条件逻辑来将结果限制为子集,子集使用 WHERE 子句添加。以下是名为 Customers 的表格的一些典型的 SQL 示例,该表格有三个列:CustomerID、LastName 和 FirstName。
SELECT LastName, FirstName FROM Customers WHERE CustomerID=99; 返回 CustomerID 值为 99 的客户的姓氏和名字。通常情况下,这将返回一行(如果存在),因为像 CustomerID 这样的值将被定义为主键,它唯一地标识一个客户,并且不能有其他行使用相同的值进行标识。 |
SELECT LastName, FirstName FROM Customers ORDER BY LastName, FirstName; 返回所有客户的姓氏和名字的按字母顺序排序的列表。 |
INSERT INTO Customers (CustomerID, LastName, FirstName) Values (1, "Doe", "John"); 创建一个 CustomerID 为 1 的行,用于 John Doe。 |
UPDATE Customers SET FirstName="Johnny" WHERE CustomerID=1; 将 John Doe 的名字更改为 Johnny。 |
DELETE Customers WHERE CustomerID=1; 删除 CustomerID 为 1 的行。 |
一般情况下,SQL 不区分大小写,并忽略多余的空格字符,除了字母数字字符串的内容。大写字母通常用于 SQL 命令作为一种风格问题,但这并不是一种普遍的约定。
某些数据库支持 存储过程,其中 SQL 嵌入在另一种过程化语言中,以操作服务器上的数据或表格,以执行比仅 SQL 允许的更复杂的操作,并且不一定要从服务器返回数据。这些过程化语言通常是 SQL 服务器供应商专有的。例如,Oracle 使用自己的语言 PL/SQL,而 Microsoft SQL Server 使用 T-SQL。这些过程化语言在设计和功能上相似,但使用不同的语法,这些语法不可互操作。
SQL 也可以嵌入到其他语言中,使用 SQL 模块、库或预编译器,这些模块、库或预编译器提供函数来打开与 SQL 服务器的通信路径,以发送命令并检索结果。由于执行 SQL 命令是对主机语言外部由 SQL 服务器执行的有用服务,因此整个处理过程被分成两个层级:客户端层和服务器层。用于提供客户端和服务器之间连接的模块和库通常被称为 中间件,特别是在允许从客户端使用一个接口连接到来自不同供应商的各种服务器时。ODBC、JDBC、OLEDB 是常见的中间件库,在许多其他特定于各种客户端主机操作系统和编程模型的库中。SQL 的使用已经如此普遍,以至于在应用程序语言中找不到不支持 SQL 的情况将是不寻常的。
SQL 命令及其修饰符基于官方 SQL 标准以及每个数据库供应商实施的该标准的某些扩展。通常情况下,命令被分组到以下类别中
- 数据定义语言 ( DDL )
- CREATE - 用于创建新表格、表格视图或数据库中的其他对象。
- ALTER - 用于修改现有的数据库对象,例如表格。
- DROP - 用于删除整个表格、表格视图或数据库中的其他对象。
- 数据控制语言 ( DCL )
- GRANT - 用于授予某人权限。
- REVOKE - 用于收回授予某人的权限。
- 数据操作语言 ( DML )
- INSERT - 用于创建记录。
- UPDATE - 用于更改某些记录。
- DELETE - 用于删除某些记录。
- 数据查询语言 ( DQL )
- SELECT - 用于从一个或多个表格中检索某些记录。
- 自由软件 - 根据 GPL 版本 2 许可证发布(尽管可以从 Sun Microsystems 购买不同的许可证,见下文)
- 成本 - 免费!
- 支持 - 在线教程、论坛、邮件列表 (lists.mysql.com)、付费支持合同。
- 速度 - 可用数据库中最快的数据库之一。
- 功能 - 支持大多数 ANSI SQL 命令。
- 易用性 - 减少培训/再培训的需要。
- 可移植性 - 轻松地从 Excel 和其他数据库导入/导出。
- 可扩展性 - 适用于小型数据库和大型数据库,这些数据库包含数十亿条记录和数千兆字节的数据,分布在数十万个表格中。
- 协作 - 选择性地授予或撤销用户的权限。
MySQL 在 双重许可 模式下提供。
- 在 GNU 通用公共许可证版本 2(“或更高版本”在 2007 年之前的版本中允许)下:这是一个自由(如自由)的版权软件许可证,允许你在你的应用程序中将 MySQL 用于商业和非商业目的,只要你的应用程序在 GNU GPL 下发布。还有一个“FLOSS 异常”,它本质上允许非 GPL 但免费的应用程序(如 PHP 编程语言,在 PHP 许可证下)连接到 MySQL 服务器。该异常列出了一组免费和开源软件许可证,除了 GNU GPL,这些许可证还可以用于你的依赖 MySQL 的免费应用程序。
- 一个所谓的“商业”[1],付费许可证,即 MySQL 授予你将 MySQL 与你自己的组织外部分发的非 FLOSS 应用程序集成的权利。[2]
MySQL 是自由软件,因此存在一些分支和非官方构建,这些分支和构建提供了来自社区的贡献。
2008 年,Sun Microsystems 收购了 MySQL。收购后,开发流程发生了改变。该团队开始以较低的频率发布新的 MySQL 版本,因此新代码的测试较少。来自社区的贡献也减少了。
2009 年,MySQL 创始人 Monty Widenius 离开了公司,创建了一家名为 The Monty Program 的新公司。他启动了一个名为 MariaDB 的新分支。MariaDB 的目标是
- 导入所有将添加到主 MySQL 分支中的新代码,并对其进行增强以使其更加稳定;
- 清理 MySQL 代码;
- 添加来自社区的贡献(新的插件、新功能);
- 开发 Maria 存储引擎;
- 为服务器添加新功能。
目前还没有这个分支的公开版本。它的许可证将是 GNU GPLv2(继承自 MySQL)。
2008 年,MySQL 首席架构师 Brian Aker 离开了项目,开始了一个名为 Drizzle 的新分支。Sun Microsystems 为该项目提供资金。它的特点是
- 在这个分支中,只有很小一部分 MySQL 代码得以保留,其余部分被删除:Drizzle 服务器中只实现了基本功能;
- 保留的代码已清理;
- Drizzle 是模块化的:许多功能是或可以作为插件实现;
- 该软件针对多 CPU 和多核 64 位机器进行了优化;
- 仅支持 GNU/Linux 和 UNIX 系统。
目前还没有这个分支的公开版本。它的主要许可证将是 GNU GPLv2(继承自 MySQL),但只要有可能,就会使用 BSD 许可证。
OurDelta - Builds for MySQL 是另一个分支。它基于 MySQL 主分支,并添加了一些由社区贡献的补丁。一些补丁也将被 MariaDB 使用。