一、数据库大致经历了以下几个阶段:
1.人工管理阶段;
2.文件系统阶段;
3.数据库系统阶段;
数据库系统有一下几个特点:
1)数据结构化
2)数据独立性高
指的是应用程序与磁盘存储数据之间的相互独立;
3)数据共享性高,冗余度低;
4)统一的数据控制;
其中包括了数据安全性(用口令检查用户的合法身份)、数据的完整性(指的是数据的正确性、有效性和兼容性)、数据库并发控制、数据库恢复。
4.高级数据库技术发展阶段;
1)分布式数据库系统;
2)面向对象数据库系统;
二、数据库的基本概念
1.数据(Data)
2.数据库(DataBase,DB)
数据库是长期存储在计算机内、有组织的、可共享的数据集合;
3.数据库管理系统(DataBaseManagementSystem,DBMS)
4.数据库系统(DataBaseSystem,DBS)
三、数据模型
1.数据模型:一组描述数据库的概念;
数据模型均由以下三部分组成:数据结构、数据操作和数据约束条件;
(1)数据结构:用于描述系统的静态特性
(2)数据操作:用于描述系统的动态特性
(3)数据约束条件:一组完整性规则的集合
2.实体联系模型
3.常用的数据模型:
1)层次模型;
是用树形结构来表示实体及实体间的联系;而基于层次模型的描述可以看出,只能解决一对多的实体联系,不能直接表达多对多联系的复杂结构;
2)网状模型;
3)关系模型;
4)面向对象模型;
四、数据库系统结构
数据库的体系结构由三级构成:内部级、概念级和外部级。
五、数据模型
数据模型由以下三部分组成:数据结构、数据操作和数据约束条件;
1)数据结构:用于描述系统的静态特性;
2)数据操作:用于描述系统的动态特性;
3)数据约束条件:一组完整性规则的集合;
六、常用数据库管理软件
1.SQLServer;
2.Oracle数据库;
包括Oraclette数据库服务器和客户端;
3.DB2数据库
IBM公司研制的一种关系型数据库系统;
4.MySQL数据库
小型关系型数据库管理系统,开发者为瑞典MySQLAB公司
5.Access数据库
微软公司推出的基于Windows的桌面关系数据库管理系统(RDBMS),是office系列软件之一;
七、数据库开发概述
1.数据库系统访问技术;
数据库服务的主流标准接口主要有ODBC、OLEDB、ADO、JDBC.
1)开放数据库连接(OpenDatabaseConnecitivity,ODBC)
ODBC是一种重要的访问数据库的应用程序编程接口(API)它的核心就是基于标准的SQL语句,因此,数据库必须支持SQL语句;
其有个重要的优点就是以统一的方式处理所有的数据库;
2)OLEDB
OLEDB是Microsoft公司提供的关于数据库系统级程序的接口(System-LevelProgrammingInterface),是微软公司数据库访问的基础。OLEDB对象本身是COM(组件对象模型)。
3)动态数据对象(ADO)
ADO(ActiveDataObjects)是一种简单的对象模型,可以被开发者用来处理任何OLEDB数据,可以由脚本语言或高级语言调用;
4)Java数据库连接(JDBC)
JDBC(JavaDatabaseConnectivity)是Java应用中访问表类型数据源的应用编程接口,这些数据源包括基于SQL的数据库、存储在电子数据表单中的数据或存储在文件中的数据。
2.网络数据库系统编程技术
1)通用网关结构(CGI)编程
通用网关结构(CommonGatewayInterface,CGI)是一种通信标准,它的任务是接受客户端的请求,经过辨认和处理,生成HTML文档并重新传回到客户端;它的弱点是速度慢和安全性差;
2)动态服务器页面(ASP)
动态服务器页面(ActiveServerPages,ASP)是Mircrosoft公司推出的一种取代CGI的技术,是一种真正简便易学,功能强大的服务器编程技术;
3)JAVA服务器页面(JSP)
JAVA服务器页面(JavaserverPages,JSP)是Sun公司倡导、许多公司参与建立的发布的一种动态网页技术标准;
八、结构化查询语言(StructuredQueryLanguage,SQL)
1.SQL的特点:
SQL功能丰富,语言简洁,集数据查询、数据操纵、数据定义和数据控制功能于一体;
(1)综合统一;
(2)高度非过程化;
(3)可移植性;
(4)以同一种语法结构提供两种使用方式;
(5)易学易用;
2.数据定义语言(DataDescriptionLanguage,DDL)
常见的DDL语句包括CREATE,ALTER,DROP等。
CREATE语句
1)创建数据库
CREATEDATABASEdatabase_name;
例如创建物流信息数据库
CREATEDATABASESI(LogisticsInformation)
2)创建表
在向数据库输入数据之前,必须县创建表;格式如下
CREATETABLELogistics;
建表时需要给出数据的数据类型及与该表完整性约束条件;
CHAR(n)
完整性约束条件
在设计建立一个数据库需要以下6个步骤:
step1.需求分析;而在这一阶段最常用的是SA结构化分析法和表达用户需求的数据字典和DFD数据流图;
step2.概念结构设计;而此阶段最主要的环节是画出E—R图;
step3.逻辑结构设计;
step4.数据库物理设计;
step5.数据库实施和维护;
step6.数据的载入;是个很复杂的阶段,可以手工输入,也可以转录,但是需要反复的校验;
下面就以一个图书馆信息管理来举例按照以下步骤创建一个简单的数据库的流程;
需求分析:来分析下图书馆信息管理通过这个名字大家就可以知道一般用来查询图书信息,借阅者信息;经过仔细分析之后列出以下信息
读者信息:卡号,姓名,性别,身份证号,头像等;
书信息:状态,编号,位置等;
概念设计:E-R图如下
注:而作为联系的图书库存量本身也是有属性的;
先建立一个Reader(读者)表
CREATETABLEReader(IdINTPRIMARYKEY,CardNumVARCHAR(50),FullNameNVARCHAR(50),GenderCHAR(2),IdentityCardVARCHAR(20),AvatarIMAGE);执行完以上代码之后会自动生成一个数据为空的表如下其中CardNum为主键。
依次建立所需“Book”(书)表其中设置主键为:
CREATETABLEBook(IdINTPRIMARYKEY,ContentIdINT,[Status]NVARCHAR(50),PositionNVARCHAR(200));建立“Content”(书目)表
CREATETABLEContent(IdINTPRIMARYKEY,ISBNVARCHAR(20),AuthorNVARCHAR(50),TitleNVARCHAR(50),PublishingNVARCHAR(50),PublishTimeDATETIME,CategoryNVARCHAR(50));建立“BorrowingInformation”(借阅信息)表
CREATETABLEBorrowingInformation(BookIdINT,ReaderIdINT,BorrowingTimeDATETIME,ReturnTimeDATETIME,IfReturnBIT,PRIMARYKEY(BookId,ReaderId,BorrowingTime));逻辑结构设计:E-R图转换为关系模型
3.创建视图
视图只存在定义,而不是存在真正的数据。其有5个优点:
a.视图可以简化用户操作;
b.视图使用户能以多种角度看待同一数据;
c.视图对重构数据库提供了一定的逻辑独立性;
d.视图能够对机密数据提供安全保护;
e.适当的利用视图可以清晰的表达查询;
创建视图的基本格式:
CREATEVIEWnameASSELECTnameFROMname
[WITHCHECKOPTION];
创建"必修"课程的视图
CREATEVIEWRequiredCoursesASSELECT*FROMCourseWHERECourseType='必修'4.创建索引
基本格式如下:
CREATEINDEXindex_nameONtable-name;
根据Student表为Name列创建一个名为Student_name的索引:
CREATEINDEXStudent_nameONStudent(Name);5.创建存储过程
CREATEPROCEDUREprocedure_name@parameter_nameASSQL_statements;
存储过程中支持输入和输出两个参数并可以返回一个整数值用以进行状态检测。
例如创建一带输入和输出的存储过程(创建一个Number的存储过程):
CREATEPROCEDURENumber@depCHAR(20),--用来存储用户输入的院系的值(变量以@开头)@numINTOUT--用来存储SELECT语句的结果并输出给用户(变量以@开头)ASSET@num=(SELECTCOUNT(StudentID)FROMStudentWHEREDepartment=@dep);6.触发器
是一种特殊类的存储过程,一般在运行插入、删除、更新时自动运行。
其语法格式如下:
CREATETRIGGERtrigger_nameONtable-nameFOR{INSERT,UPDATE,DELETE}ASSQL-statements;
例创建一个简单的触发器,当更新Student表示显示一条信息:
CREATETRIGGERUpdONStudentFORUPDATE
AS
PRINT'Student已经被修改!'
7.创建用户和角色
其格式如下:
CREATEUSERuser_name;用户对自己建立的表和视图拥有全部的操作权限。
CREATEROLErole_name;角色是允许用户在数据库中执行特定功能的一个或一组权限。
二)修改表
其格式如下:
ALTERTABLEtable_nameADDcolumn_name/DROP(完整性约束名)/MODIFYcolumn_name;
例向Course表中添加一个新列“Teacher”,其数据类型为CHAR型。
ALTERTABLECourseADDTeacherCHAR(10);不论表中是否有数据,新增加的列一律为空值;
修改Course表中Teacher列的数据类型为VARCHAR型
ALTERTABLECourseMODIFYTeacherVARCHAR(10);
DROP语句是用来删除数据库、表、视图、索引、存储过程和触发器。
a.删除数据库
DROPDATABASEdatabase_name;可以彻底删除数据库的数据和它在磁盘上的物理结构。
例删除SI数据库
DROPDATABASESI;
b.删除数据表
DROPTABLEtable_name;可以从数据库中删除数据表。
例删除Student表
DROPTABLEStudent;
c.删除视图
DROPVIEWview_name;
d.删除索引
DROPINDEXindex_name;
e.删除存储过程
DROPPROCEDUREprocedure_name;
f.删除触发器
DROPTRIGGERtrigger_name;
九、数据操作语言(DataManipulationLanguage,DML)
(1)、INSERT语句
顾名思义大家都知道这是向数据库中插入数据,其包含两种写法:一插入一条记录,用INSERTVALUES;二插入子查询的结果,用INSERTSELECT;
其基本语法如下:
INSERTINTO表的名字(col1,col2....)VALUES(value1,value2,value3....)
实例:向“student表中”插入学生信息元组(‘、、、、、、’)
INSERTINTOStudent(StudentID,Name,Gender,Birthday,Origin,Department)VALUES('090202','王玲','女','1986-03-4','重庆','音乐系')介绍另外一种基本语法如下:
INSERTINTO表的名字(col1,col2....)SELSCTcol1,col2....FROM表的名字WHERE插入查询结果的新表
实例:把Student表中中文系学生的信息插入到CDIS表;
CREATETABLECDIS(StudentIDCHAR(10)PRIMARYKEY,NameCHAR(20),GenderCHAR(2),);INSERTINTOCDIS(StudentID,Name,Gender)SELECTStudentID,Name,GenderFROMStudentWHEREDepartment='中文系';(2)、SELECT语句
数据库的查询是数据库的核心操作,所以现在要深一步讲解;
其基本语法格式如下:
SELECT[DISTINCT|ALL]解释为每一个获得数据语句的开始,修正字DISTINCT可以去掉重复行;ALL是默认返回全部数据;*通ALL相同;
FROM表1|视图解释为从一个表中或视图中;
WHERE内容解释为语句限制返回的行必须满足限定的条件;
GROUPBY内容HAVING条件解释为讲所有列名相同的行组织在一起,而HAVING必须在GROUPBY实行,来限制选择组的满足条件;
ORDERBY内容;解释为通过指定列来对内容进行排序;
实例如下:单表查询
A查询学生的全部信息:
SELECT*FROMStudent;SELECT*FROMGrade;成绩表SELECT*FROMCourse;课程表其显示结果如下:
成绩表全部信息显示如下:
课程表显示如下:
B查询学生的学号、姓名和籍贯;
SELECTStudentID,Name,OriginFROMStudent;其显示结果如下:
C查询有哪些院系;
D查询经贸系的学生信息;
SELECT*FROMStudentWHEREDepartment='经贸系';也可以写成WHEREDepartmentIN('经贸系');其显示结果如下:
E查询成绩大于70分的学生的学号,查询结果按学号升序排列;
F查询成绩在50-70之间学生的学号;
G查找名叫“郭靖”学生的信息;
以下两张结果均为LIKE扩展而来;
H查询没有成绩的学生;
J查询“中文系”是“上海”的学生信息;
K查询选修了06号课程并且考试成绩为空的学生数量;
常用聚集函数如下表:
L查询选修了3门课的学生的学号
M查询考试不及格的学生的学号,姓名,课程和成绩;
注:连接多表查询需要用表名.列名的格式来加以区分;
N嵌套查询查询05号课程的不及格的学生的学号和姓名。
十一、集合查询:
SELECT语句的查询结果是元组的集合,所以对列数相同且数据类型也相同多的SELECT语句的结果可以进行集合操作。
包含了三个并(UNION)、交(INTERSECT)、差(EXCEPT)
O查询信息系和音乐系的学生信息
十二、UPDATE语句;
其基本格式如下:
UPDATEtable_nameSETcolun_name=value1colun_name2.....
WHERE控制语句;
P将04号课程改为必修;
十三、DELETE删除语句
注:只能删除一条语句,而不是删除表,如果删除表需要用DROPTABLE.
DELETEFROMtable_name
WHERE控制语句
Q删除张华的学生信息;
W把查询Student表的权限授予所有用户;
GRANTSELECTONStudentTOPUBLIC;运行成功之后就授予所有用户权限。
其基本定义格式如下:
GRANT什么样的权限
ON表名或者被授予权限的对象
TO用户名字PUBLIC;
还有另外一种形式为:
GRANTrole
TOuser_name
WITHADMINOPTION;
最后一句红色字母表示获得权限的角色或用户还可以把这种权限在授予其他的角色;
X把角色Y授予用户张
GRANTYTO张;Y收回所有用户对Grade表的查询权限。
REVOKESELECTONGradeTOPUBLIC;上述命令执行完毕;
而BEGINTRANSACTION(开始运行的)、COMMIT、ROLLBACK(表示回滚)语句是SQL中定义事务的语句;其事务具有四个特性:原子性、一致性、隔离性、持续性。