结构化查询语言(Structured Query Language)简称 SQL,是一种有特殊目的的编程语言。和当下流行的其他关系数据库一样,所有程序和用户都可以使用 SQL 来访问 OceanBase 数据库中的数据。即便有一些平台、工具允许用户直接通过接口或界面的方式访问数据库,但这些平台、工具底层实际上依旧是使用 SQL 来访问数据库。
SQL 的历史
1970 年 6 月,IBM 公司 San Jose,California 实验室的 E. F. Codd 博士在 ACM(Association for Computing Machinery)期刊上发表了论文《大型共享数据银行的关系模型》(A Relational Model of Data for Large Shared Data Banks)并首次提出了关系模型的概念。
1974 年,同实验室的 D.D.Chamberlin 和 R.F.Boyce 在 IBM 公司研制的关系数据库系统 SystemR 中,研制出了一套规范语言 SEQUEL(Structured English QUEry Language),并在 1976 年 11 月的 IBM Journal of R&D 上公布了新版本的 SQL(称为 SEQUEL/2,1980年改名为 SQL)。
1979 年,Oracle 公司首先提供商用的 SQL,同时 IBM 公司在 DB2 和 SQL/DS 数据库系统中也实现了 SQL。
时至今日,SQL 已经成为了关系数据库管理系统(Relational Database Management System:RDBMS)的标准语言。
SQL 的标准
1986 年 10 月,美国国家标准协会 ANSI 采用 SQL 作为关系数据库管理系统的标准语言,并命名为 ANSI X3. 135-1986,后来国际标准化组织(ISO)也采纳 SQL 作为国际标准。
1989 年,ANSI 采纳并使用了在 ANSI X3.135-1989 报告中定义的 SQL 标准语言,并称之为 ANSI SQL 89,该标准替代了之前的 ANSI X3.135-1986 版本。
下面是 SQL 发展的简要历史:
- 1986年,ANSI X3.135-1986,ISO/IEC 9075:1986,SQL-86。
- 1989年,ANSI X3.135-1989,ISO/IEC 9075:1989,SQL-89。
- 1992年,ANSI X3.135-1992,ISO/IEC 9075:1992,SQL-92(SQL2)。
- 1999年,ISO/IEC 9075:1999,SQL:1999(SQL3)。
- 2003年,ISO/IEC 9075:2003,SQL:2003。
- 2008年,ISO/IEC 9075:2008,SQL:2008。
- 2011年,ISO/IEC 9075:2011,SQL:2011。
现在,绝大多数被提及的 SQL 标准,其中涉及的内容其实都是 SQL 92 里最基本、最核心的一部分。OceanBase 目前也遵循的是 SQL 92 标准。
SQL 的运行
SQL 是用来访问关系数据库,如 OceanBase、Oracle 和 MySQL 的接口,所有的 SQL 语句都是对数据库的指令。
通常,SQL 可以分为 5 个部分:
- 数据查询语言 DQL(Data Query Language):也称为数据检索语言,用以从表中获得数据,并描述怎样将数据返回给程序输出。DQL 并不改变数据库中存储的数据内容。
- 数据操作语言 DML(Data Manipulation Language):用以改变数据库中存储的数据内容,即增加、修改和删除数据。
- 事务控制语言 TCL(Transaction Control Language):保证数据库的完整性、一致性,在同一个事务中的 DML 语句要么同时成功,要么同时失败。
- 数据控制语句 DCL(Data Control Language):对数据访问权限控制的命令。可以控制特定账号对特定数据库资源的访问权限。
- 数据定义语言 DDL(Data Definition Language):对数据库中资源进行定义、修改和删除,如新建表和删除表等。
SQL 的移植性
SQL 是访问数据库的标准语言,所有的主要关系数据库都支持 SQL,因此所有用 SQL 编写的程序都是可移植的。通常进行少量的修改就可以从一个关系数据库移植到另一个关系数据库上。
词汇惯例
- 粗体 表示与操作或以文本或词汇表定义的术语相关联的图形用户界面元素。
- 保留字、关键字、标识符和参数中的大小写不敏感。为方便阅读与识别,这些字会以大写形式书写。
- 在不同的编程环境中,SQL 语句终止方式不同。本文档中以分号 “;” 来标识一个 SQL 的结尾。
行内代码
表示文档中引用的代码。- 为了突出重要信息,本文档会加粗“说明”、“注意”和“重要”等文字。
- 本文档中可选参数文本用方括号括起,如 [-n, -quiet]。