上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.3.4 标准与实现
一方面,SQL是一种标准,不同厂商基于SQL标准实现了自己的数据库管理系统。这些数据库管理系统在一定程度上都兼容SQL标准,具有一定的可移植性。例如,所有的关系型数据库管理系统都使用SELECT语句表示数据的查询。
另一方面,所有数据库管理系统都实现了一些专有的语法和扩展功能,没有任何一种产品完全遵循标准。因此,一个数据库管理系统中支持的SQL代码在其他数据库管理系统中运行时可能需要进行修改。例如,Oracle和Microsoft SQL Server都实现了合并数据的MERGE语句,但是它们的语法略有不同。MySQL使用专有的INSERT…ON DUPLICATE KEY UPDATE语句执行数据合并操作,而PostgreSQL和SQLite则实现了专有的INSERT…ON CONFLICT DO UPDATE语句。
除SQL语句外,大部分关系型数据库管理系统还提供了过程语言(Procedural Language)扩展,支持类似于编程语言(Java、C++等)中的变量定义、控制流结构(if-else、while、for等)、游标(Cursor)以及异常处理等功能,可以在数据库服务器端实现编程。这些扩展功能通常使用专有的语法,也具有专门的名称,例如Oracle中的PL/SQL、Microsoft SQL Server中的T-SQL、PostgreSQL中的PL/pgSQL等。
正因为如此,本书除介绍标准的SQL语法外,还会比较5种主流关系型数据库管理系统中的具体实现和差异。标准SQL可以方便我们在不同数据库系统之间进行代码移植,而特定数据库系统中的专有语法和特性可能会简化一些功能的实现。