作为一名程序员,你真的了解SQL吗?

13次阅读

对于一名程序员而言,数据库是最基本的知识之一,但是很多开发者对于数据库的了解仅限于使用上面,对于其内部的很多定义和知识,并不是十分清楚,那么,我们就来看一看数据库的一些相关知识吧。

一、SQL标准有几个版本

SQL(Structure Query Language)结构化查询语言是数据库的核心语言,所有的结构化数据库都离不开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

2008年,ISO/IEC 9075:2008,SQL:2008

2011年,ISO/IEC 9075:2011,SQL:2011

2016年ISO又对SQL标准做了补充修订。

二、Catalog和Schema的区别是什么

很多人建了数据库之后,就只对表进行操作,对于数据库的一些结构一知半解,尤其是很多人其实不明白Schema到底是个啥意思。下面我们具体来看一看。

Catalog直译为产品目录或编目,包含所有数据库自有的Schema和用户自建的Schema。

Schema直译为模式,可以理解为表空间,所有的数据库对象(表、视图、字段等)都包含在Schema里。

所以对于一个很容易重名的字段,例如用户ID,他的完全限定名称就是catalog名.schema名.表名.用户ID。这样就保证了命名不会冲突。

在SQL标准的规定里面,Catalog包含Schema,还包含外部服务器信息、和外部数据封装信息。而实际上各大关系数据库厂商并没有严格按照标准来执行,而且相互之间有很大差异。

例如:

在MySQL里面,用server instance来取代catalog,作为数据库的集合。而database==schema==catalog,作为数据表空间。

在Oracle里面,server instance== database ==catalog,而Schema则是数据库里的表空间,与用户账户相关联。

在Postgresql里面,Server instance == db cluster是一系列数据库的集合,database==catalog,是db cluster中的一个独立数据库,schema则是database中的一个命名空间,可以让用户与其它用户的数据区别开来。在Postgresql里,对一个对象的完全限定是通过database.schema.object来实现的。

三、SQL语言包括几个类型

SQL语言大家都会写,但是其中分成几个部分,可能很多人就不是很清楚了。尤其是指针控制指令,可能一些人在自己的程序员生涯中压根就没接触下。下面我们具体来看一看SQL语言包括的几个类型吧。

1、数据查询语言(DQL: Data Query Language):例如select <字段> from <表> where <条件>

2、数据操纵语言(DML:Data Manipulation Language):例如Insert、Update、Delete

3、事务处理语言(DPL:Transaction Processing Language):例如BEGIN TRANSACTION、COMMIT和ROLLBACK

4、数据控制语言(DCL:Data Control Language):例如Grant、Revoke

5、数据定义语言(DDL:Data Definition Language):例如Create、Drop

6、指针控制语言(Cursor Control Language, CCL):例如DECLARE CURSOR、FETCH INTO和UPDATE WHERE CURRENT

作为一名程序员,你真的了解SQL吗?

四、SQL语言中有几种数据类型

数据类型大家都很清楚,但是在标准定义中的数据类型,尤其是Interval类型,可能很多人就不了解了。

SQL语言中包含三大类数据类型:预定义数据类型、构造数据类型和自定义数据类型。

其中预定义数据类型包括7种类型:数值、字符串、二进制串、布尔、日期、间隔、XML。

五、Limit关键字是所有数据库通用的吗

Limit关键字是很多人常用的,但是换了数据库,这个关键字还能正常使用吗?答案是否定的。

Limit关键字并不是所有数据库通用的,Sql server选择前n条就是select top n。

六、MySQL里面的utf8字符集是“UTF-8”吗?

很多初学者建数据库的时候,想当然就把字符集指定为utf8了,然后可能就会出现一些乱码问题,在中文互联网界,可能问题更容易出现,为什么呢?

事实上,MySQL里面的utf8编码并不是真正的UTF-8,而另外的utf8mb4才是真正的UTF-8编码,因此使用MySQL或MariaDB的时候,一定要把字符集设置成utf8mb4,否则可能会出现乱码问题。

为什么会出现这个问题吗?原因在于早期MySQL开发的时候,由于节省空间以及效率等问题,将utf8字符集限制为3个字节,而实际最新的UTF-8规范使用1到4个字节,这就导致MySQL的utf8字符集无法兼容4个字节的编码,最后在MySQL 5.5.3以后的版本中,发布了utf8mb4字符集来解决这个问题。所以对于使用者来讲,utf8字符集只用于兼容早期的数据库,而新开发者都应该使用utf8mb4字符集。

以上就是一些数据库的相关知识,大家之前都了解过吗?

活在信息时代的其它文章:

程序员必备技能之数据库的一点小事

好贴收藏:程序员必备技能之正则表达式

程序员的三重境界,看看你在哪一重

程序员不可不知的几种软件项目,看看你的项目属于哪一种?

大数据最主要的三个工程问题,弄懂之后年薪百万不是梦

从一条短信说起,谈谈软件从业人员的社会责任

普通人赚钱的四个层次,看看你在哪一层

正文完
 0
网站地图