SQL语言概况(4.1)
sql语言概况(4.1)
参考资料:
数据库原理及设计(第3版)
配套数据库为:microsoft sql server
参照ansi sql-92标准
4.1 sql语言概况
4.1.1 历史及标准简介
一切都源于关系型数据库之父——edgar frank codd 于1970年6月首次提出了关系数据模型。
之后嘛,肯定是经历了以下这个过程:
-
各学校、公司开始理论研究,看看这个玩意儿能不能给带来利益?!
-
诶?!好像可以带来利益诶……那我们开发成产品商化吧,再配套一个使用工具(语言)!
-
权威机构:麻了?!怎么发展的这么
蓬勃(五花八门)?!不得行,是时候我出场统一一下标准了! -
基于标准开发,再来点扩展,投放市场使用……
其它公司:诶?!好玩意儿……可是我们的开发应用要界面啊,能不能把这个嵌入到其他语言中使用?!
-
……
至此,我们来梳理一下真正的历史过程:
-
1974年boyce 和chamberlin提出sql
-
20世纪70年代中期,ibm公司在研制system r 的过程中,开发了世界上最早的sql语言
-
1979年,oracle公司最先提出了商用的sql语言
-
sql标准变迁史
- 1986年10月,ansi制订,sql-86
- 1989年,ansi改进,sql-89
- 1992年,ansi与iso合作改动完善,sql-92
- 1999年,增加面向对象特征扩展,提出sql:1999
- 2003年,sql:2003
- ……
可以说,命名就很有意思了,就是年份结尾嘛,但是1999年开始变成四位数字,具体原因我也是百度了一篇博客,放出来《sql标准简介》
还有一点,非正式的一些称呼:
- 第一代sql语言,sql1,sql-86 & sql-89
- 第二代sql语言,sql2,sql-92
- 第三代sql语言,sql3,sql:1999
其中,针对于sql-92来说,绝大多数rdbms产品不是完全支持的,那差异一般都会体现在sql命令的语法上面。
针对这个不完全支持,我们可以从两个方向上来看:
- sql-92中的某些功能,在实际rdbms中可能没有得到支持
- 实际rdbms也有可能出现该标准中没有的功能和特性
那么根据支持sql-92的程度,我们可以分为三种:
- 入门(entry)级:其功能特性接近sql-89
- 中间(intermediate)级:包含sql-92近一半的新特点
- 完全(full)版:完全支持
因此,所给的建议是:
- 使用具体的rdbms时,查阅产品的技术资料
- 增强sql代码的移植性,最好采用在sql标准中也推荐的功能
4.1.2 sql语言定义及特点
什么是sql语言?
- 是最流行的一种数据库语言
- 结构化查询语言(structured query language)
- 是rdbms支持的数据库语言
很多人会跟我有一样的疑问,为啥叫查询语言???
-
首先不要被这个名字误导了,并不是它只支持查询,它的功能还有很多,,比如数据模式定义、数据的“增、删、改”以及安全和事务控制功能。
所以说……一个好的名字还是很重要的……
-
具体原因:从操纵数据的角度来看,查询是最重要也是用的最多的操作(想想你们自己管理开发的时候,是不是动不动就要查询这个查询那个?!)
接下来,我们看看这个sql语言有哪些功能特点呢?
-
功能一体化。
说的有点玄乎,实际上就是,它作为数据库语言的一种,也是遵循数据库语言的划分,由3个子语言构成:
- ddl(data definition language)
- dml(data manipulation language)
- dcl(data control language)
各个自语言又有很多自己的功能……
-
语言非过程化。
之前我们说过,它的名字中有结构化,那什么是结构化,什么是过程化呢?
- 结构化是相对于过程化来说的
- 过程化的语言:需要用户在程序设计中指明程序“做什么”,还需要程序员按照一定的算法编写出“怎么做”的程序来。
- 结构化的预言(以rdbms为例):用户只需要定义“做什么”,rdbms系统内部会解决“怎么做”。
-
交互式与嵌入式使用。
- 交互式(interactive):用户直接在rdbms控制台上使用sql语言中的sql命令直接交互。
- 嵌入式(embedded):在过程化语言(宿主host语言)中使用。
-
标准化与易移植性。
之前,我们也说过,各个具体的rdbms产品中支持的sql语言情况是有所差异的,但是大多都能支持标准的大部分,因此,移植起来会相对容易。
4.1.3 使用说明
利用sql语言,可以完成关系模型的具体化,那我们之前知道,任何模型都包括3方面的内容:
- 数据结构
- 完整性约束
- 数据操纵
那么如何将这三部分具体化呢?
这由sql语言中的两个子语言承担:
- ddl完成数据结构和完整性约束
- dml完成数据操纵
之后,我将会分块对这两个子语言进行学习……
上一篇: .NETCore在析构函数(Finalize)在Linux下引起程序异常退出现象
下一篇: 接口