【小资说库】第3期 你拿什么指使DBMS干活——SQL介绍
在第1期中了解了什么是DBMS ,第2期中聊过数据库的发展历史后,这一期我们来聊一聊,你拿什么指使DBMS干活。
日常生活中,我们相互交流,使用的是彼此都能听得懂的语言。
那我们要让DBMS干活,使用什么语言来让DBMS明白我们需要他干什么呢?是的,是结构化查询语言SQL(Structured Query Language)。
SQL,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
SQL是高级的非过程化编程语言,它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,即只需要发出“做什么”的命令,“怎么做”无需使用者考虑。具有完全不同底层结构的数据库系统,可以支持相同的SQL作为数据输入与管理的接口。SQL语句可以嵌套,这使它具有极大的灵活性和强大的功能。
1986年10月,美国国家标准协会对SQL进行规范后,以此作为关系式数据库管理系统的标准语言(ANSI X3. 135-1986),1987年得到国际标准组织的支持下成为国际标准。不过各种通行的数据库系统在其实践过程中都对SQL规范作了某些改编和扩充。所以,实际上不同数据库系统之间的SQL不能完全相互通用。(编者注:各数据库厂商都会提供SQL参考手册对其所支持的SQL语法进行介绍)。
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(SQL4)
2011年,ISO/IEC 9075:200N,SQL:2011(SQL5)
发展简史背后的故事:
在1970年代初,由IBM公司San Jose,California研究实验室的埃德加·科德发表将数据组成表格的应用原则(Codd's Relational Algebra)。1974年,同一实验室的D.D.Chamberlin和R.F. Boyce对Codd's Relational Algebra在研制关系数据库管理系统System R中,研制出一套规范语言-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。
1986年10月,美国ANSI采用SQL作为关系数据库管理系统的标准语言(ANSI X3. 135-1986),后为国际标准化组织(ISO)采纳为国际标准。
1989年,美国ANSI采纳在ANSI X3.135-1989报告中定义的关系数据库管理系统的SQL标准语言,称为ANSI SQL 89,该标准替代ANSI X3.135-1986版本。且标准为下列组织所采纳:国际标准化组织(ISO),为ISO 9075-1989报告“Database Language SQL With Integrity Enhancement”美国联邦政府,发布在The Federal Information Processing Standard Publication(FIPS PUB)127
21世纪初期主要的关系数据库管理系统支持某些形式的SQL,大部分数据库打算遵守ANSI SQL89标准。
细心的读者不难发现,从SQL:1999开始,标准简称中的短横线(-)被换成了冒号(:),而且标准制定的年份也改用四位数字了。前一个修改的原因是ISO标准习惯上采用冒号,ANSI标准则一直采用短横线。后一个修改的原因是标准的命名也遇到了2000年问题。
SQL86大概只有几十页,SQL92正文大约有500页,而SQL99则超过了1000页。可以看出,从SQL99开始,SQL标准的个头就非常庞大了,内容包罗万象,已经没有人能够掌握标准的所有内容了。以SQL:2003为例,它包括以下9个部分(中间编号空缺是曾经被占用,之后被废弃的标准造成的):
ISO/IEC9075-1: Framework (SQL/Framework)
ISO/IEC 9075-2: Foundation (SQL/Foundation)
ISO/IEC 9075-3: Call Level Interface (SQL/CLI)
ISO/IEC 9075-4: Persistent Stored Modules (SQL/PSM)
ISO/IEC 9075-9: Management of External Data (SQL/MED)
ISO/IEC 9075-10: Object Language Bindings (SQL/OLB)
ISO/IEC 9075-11: Information and Definition Schemas (SQL/Schemata)
ISO/IEC 9075-13: Java Routines and Types Using the Java Programming Language(SQL/JRT)
ISO/IEC 9075-14: XML-Related Specifications (SQL/XML)
负责具体制定工作的是ISO和IEC联合成立的一个技术委员会JTC1/SC32。正因为关系数据库市场非常成熟,竞争不够激烈,标准本身变得过于庞大等原因,SQL3制定的周期很长,制定期间也存在很多争议。例如文章《Is SQL a Real Standard Anymore?》对SQL标准化进程提出了置疑。
如果要了解标准的内容,比较推荐的方法是泛读SQL92(因为它涉及了SQL最基础和最核心的一些内容),然后增量式的阅读其他标准。标准在每次更新的时候,委员会的成员们都为大家提供比较好的介绍文档。例如针对最新的SQL:2011,SIGMODRecord上就有很不错的介绍:http://www.sigmod.org/publications/sigmod-record/1203/pdfs/10.industry.zemke.pdf
最后再简要介绍一下SQL标准的符合程度。绝大多数人提起SQL标准,涉及的内容其实是SQL92里头最基本或者说最核心的一部分。SQL92本身是分级的,包括入门级、过度级、中间级和完全级。为了验证具体的产品对标准的遵从程度,NIST还曾经专门发起了一个项目,来做标准符合程度的测试集合:http://itl.nist.gov/div897/ctg/sql_form.htm。不过,SQL标准包含的内容实在太多了,而且有很多特性对新的SQL产品而言也越来越不重要了。从SQL99之后,标准中符合程度的定义就不再分级,而是改成了核心兼容性和特性兼容性;也没有机构来推出权威的SQL标准符合程度的测试认证了。
本帖相关参考:
https://baike.baidu.com/item/%E7%BB%93%E6%9E%84%E5%8C%96%E6%9F%A5%E8%AF%A2%E8%AF%AD%E8%A8%80/10450182?fr=aladdin
https://blog.csdn.net/lengye7/article/details/80606489
前期链接:
- 点赞
- 收藏
- 关注作者
评论(0)