数据库是“按照数据结构来组织、存储和管理数据的仓库”,它是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。学习数据库技术必须先了解一些数据库的基本概念和术语,本小节将对数据库的基本知识进行讲解和介绍。
17.1.1使用数据库的必要性
信息时代,计算机已经深入人们的生活中,人们更多的借助于计算机保存越来越多的信息,而且各行各业区分非常清晰,每个行业都有自己行业特点,保存信息的形式就各不相同。除信息的保存外,人们需要有更简单的方式处理信息,这时人们使用了程序来完成自己的工作,出现了许多应用程序,如专门应用于财务的应用程序,当应用程序需要持久大量地存储数据时,很容易想到使用文件。应用程序可以根据需要设计文件格式,调用操作系统提供的文件操作来读写文件。
但是,多个应用往往需要使用同样的数据,这时每个程序都要处理文件格式的细节。这种重复是不必要的,重复的格式处理操作可以提取出来,当文件格式变化时,也不必修改每一个程序。这说明文件不便于编程,也不能实现数据的独立性。如果需要存储一部分冗余数据,则修改数据时容易造成数据不一致,而文件系统缺乏数据不一致性的监控机制。使用文件存储数据不支持并发访问,另外很难实现标准化,也不容易保证数据的安全。产生这些问题的原因可以归结为数据共享,共享的数据需要与应用分离,统一管理和支持并发访问。
为使各种应用程序都能高效、安全准确的使用和共享数据,就必须数据库技术保存数据。数据库技术不仅仅能够以更科学的方式保存数据,还提供了数据的查询、更新、删除等各操作方式。
17.1.2常用数据库
到目前为止,世界上的数据库产品数据库产品已多达上百种,本小节将简要的介绍行业内最常用的几种数据库。
一、Oracle数据库
Oracle数据库管理系统是由甲骨文(Oracle)公司开发的,在数据库领域一直处于领先地位。目前,Oracle数据库覆盖了大、中、小型计算机等几十种计算机型,成为世界上使用最广泛的关系型数据管理系统(由二维表及其之间的关系组成的一个数据库)之一。
Oracle数据库管理系统采用标准的SQL,并经过美国国家标准技术所(NIST)测试。与IBMSQL/DS、DB2、INGRES、IDMS/R等兼容,而且它可以在VMS、DOS、UNIX、Windows等操作系统下工作。不仅如此,Oracle数据库管理系统还具有良好的兼容性、可移植性和可连接性。
二、SQL Server数据库
SQLServer是由微软公司开发的一种关系型据库管理系统,它已广泛用于电子商务、银行、保险、电力等行业。SQLServer提供了对XML和Internet标准的支持,具有强大的、灵活的、基于Web的应用程序管理功能。而且界面友好、易于操作,深受广大用户的喜爱,但它只能在Windows平台上运行,并对操作系统的稳定性要求较高,因此很难处理日益增长的用户数量。
三、DB2数据库
DB2数据库是由IBM公司研制的一种关系型数据库管理系统,主要应用于OS/2、Windows等平台下,具有较好的可伸缩性,可支持从大型计算机到单用户环境。
DB2支持标准的SQL,并且提供了高层次的数据利用性、完整性、安全性和可恢复性,以及从小规模到大规模应用程序的执行能力,适合于海量数据的存储,但相对于其他数据库管理系统而言,DB2的操作比较复杂。
四、Sybase数据库
Sybase数据库由Sybase公司于1987年推出。Sybase主要有三种版本,一是UNIX操作系统下运行的版本,二是Novell Netware环境下运行的版本,三是Windows NT环境下运行的版本。对UNIX操作系统广泛应用的为SYBASE 10 及SYBASE 11 for SCO UNIX,因此Sybase数据库也是一种能够在多个平台使用的数据库产品。
五、MySQL数据库
MySQL数据库管理系统是由瑞典的MySQLAB公司开发的,但是几经辗转,现在是Oracle产品。它是以“客户/服务器”模式实现的,是一个多用户、多线程的小型数据库服务器。而且MySQL是开源数据的,任何人都可以获得该数据库的源代码并修正MySQL的缺陷。MySQL具有跨平台的特性,它不仅可以在Windows平台上使用,还可以在UNIX、Linux和MacOS等平台上使用。相对其他数据库而言,MySQL的使用更加方便、快捷,而且MySQL是免费的,运营成本低,因此,越来越多的公司开始使用MySQL。
17.1.3数据库基本概念
掌握数据库的基本概念对于学习数据库技术是非常必要的,本小节将讲解实际开发过程中常用的数据库概念。
一、信息、数据与数据处理
1、信息:信息是现实世界事物的存在方式或运动状态的反映。读者可以简单的把信息理解成是一种已经被加工为特定形式的数据。信息的主要特征是:信息的传递需要物质载体,信息的获取和传递要消费能量;信息可以感知;信息可以存储、压缩、加工、传递、共享、扩散、再生和增值。
2、数据:数据是对事实、概念或指令的一种特殊表达形式,可以用人工的方式或自动化的装置进行通信、翻译转换或者进行加工处理。它包括两类:一类是能参与数字运算的数值型数据;一类是不能参与数字运算的非数值型数据,如文字、图画、声音、活动图象等。
一般情况下将数据与信息作为一个概念而不加区分。
二、数据库、数据库管理系统
1、数据库:数据库是“DataBase”的翻译,它也简称“DB”。数据库是以一定的组织形式存放在计算机存储介质上的相互关联的数据的集合。通俗地说,也就是存储数据的“仓库”。只不过这个仓库是在计算机的存储设备如硬盘上,而且数据是按一定格式存放的,数据与数据之间存在关系。一个数据库应该具有具有最小的冗余度、具有数据独立性、实现数据共享、安全可靠、保密性能好的特点。
2、数据库管理系统:数据库管理系统是“DataBase Management System”的翻译,简称“DBMS”,是维护和管理数据库的软件,是数据库与用户之间的界面。作为数据库的核心软件,提供建立、操作、维护数据库的命令和方法。17.1.2小节介绍的Oracle、MySQL等都是数据库管理系统,实际上它们也可以被叫做“数据库产品”。实际上,在很多场合下数据库管理系统也常被人们简称为数据库,例如“MySQL数据库管理系统”也常被称为“MySQL数据库”。
三、表、行、列和字段
传统意义上的数据库大部分都属于关系型数据库,本章介绍的MySQL数据库就是一种典型的关系型数据库。对于关系型数据库而言,表是数据库对象,它们包含数据库中的所有数据。一个数据库由多个表组成,每个表中都存储一组相关的数据,数据库中的表与表之间可能存在关联。
表是一个由分别排成行和列的相关记录组成的集合。在表中,数据以行和列的形式存储,类似于电子表格。例如,一个表包含公司雇员的数据,每行代表一个雇员,每列都包含雇员的详细资料,如雇员编号、雇员姓名、职称,联系地址和家庭电话号码。每一列数据的名称被称为“字段”,例如雇员编号、雇员姓名都是字段。
四、完整性、主键、外键
数据库表中数据状态的正确性在专业上称为“完整性”,而如果数据库中存储有不正确的数据值,则称这种状态为“失去完整性”。例如,从理论上讲每个学生的学号都是独一无二的,而一个存储学生信息的数据表中出现了重复的学号,用专业术语表述就是“失去了完整性”。
完整性可以分为三种:实体完整性、引用完整性和域完整性。
实体完整性要求每一行数据都能与其他数据相互区分。例如有两个学生,他们的姓名、生日、性别、籍贯都完全相同,但把他们的信息存入数据库表中时就必须能够对这两条数据进行区分,否则就失去了实体完整性。
为了保证实体完整性,每个表里必须有一个列,数据库能够通过它来唯一地标识表中每一行,也就是说必须保证表中的任两个行都不会包含完全相同的信息。程序员可以通过设置主键来防止出现相同的行。所谓主键就是唯一地标识表中的记录的一个或一组列。例如为了区分每一个学生,可以向各个学生分配一个独一无二的学号,这样学号这个列就成为了主键。对一个数据库表而言,一旦某个列被设置为主键,这个列上的数据就不能相互重复,并且也不能为空。
数据库中多个表中的数据往往具有一定的关联性。例如有两个表分别是学生表和成绩表,这两个表中都有学号字段来唯一的标识一个学生,但成绩表中的学号不能是随意填写的,它必须来自于学生表。如果成绩表中的某个学号在学生表中找不到来源,这种情况称为“失去”了引用完整性。
为了防止失去引用完整性,程序员可以向成绩表设置“外键”。“外键”是一个或一组列,其中列的值与另外一个表中的主键或唯一键相匹配。两个表是通过外键联系起来的。换句话说,通过一个共同字段来连接两个表称为建立关系,而创建外键就是建立关系的手段。例如学生表中的学号是主键,而成绩表中的学号可以设置为外键,并指定这个外键的值来源于学生表中的学号列。当建立起这种主外键关系后,一旦成绩表中的学号列上出现了学生表中学号列中不存在的值,则数据库会给出提示并不允许这个学号出现在成绩表中。
字段也被称为“域”,程序员设计表时需要特别注意要添加到表中的字段。具体来说,设计者需要规划并决定各个字段数据的格式、类型、范围等等。例如一个字段表示人的身份证号码,那么按照国家规定,身份证号码必须是18位,如果这个字段上出现了一个16位的数字,那么这个身份证号码必然是错误的,专业上,把某个字段上的数据值出现格式、类型、范围的错误称为“失去了域完整性”。为防止出现失去域完整性的情况,程序员可以为某个域设置默认值,或添加触发器以检查写入该字段的数据值是否正确。
五、结构化查询语言
1974年,IBM的Ray Boyce和Don Chamberlin将Codd关系数据库的12条准则的数学定义以简单的关键字语法表现出来,里程碑式地提出了SQL(Structured Query Language)语言。它是一个综合的、通用的关系数据库语言,同时又是一种高度非过程化的语言,只要求用户指出做什么而不需要指出怎么做。SQL集成实现了数据库生命周期中的全部操作,并提供了与关系数据库进行交互的方法,它可以与标准的编程语言一起工作。SQL根据其功能不同可以分为以下五种:
- 数据定义语言DDL:用于创建、修改、删除数据库对象,例如创建数据库、创建数据表等
- 数据查询语言DQL:用于查询数据
- 数据操纵语言DML:用于对数据进行操作,例如对数据进行增加、删除、修改的操作
- 数据控制语言DCL:用于对权限的分配、回收等操作
- 事务控制语言TCL:用于快速原型开发、脚本编程、GUI和测试等
SQL语句的关键字不区分大小写,也就是说,create 和CREATE的作用完全一样,因此程序员在开发过程中用大写或小写形式编写SQL语句都不会有影响。
本文字版教程还配有更详细的视频讲解,小伙伴们可以点击这里观看。