数据库中的基本概念

原文

在同一个数据集合中,不同的选择条件对应了不同的输出结果,数据库就是这样一种按数据结构来组织、存储和管理数据的仓库。程序或用户可以通过它来进行数据的访问与修改,它是数据存储的灵魂。

数据管理经历了人工管理、文件系统到数据库系统3个阶段。数据库是具有逻辑关系和确定意义的数据结合,它能克服传统文件组织所产生的一系列问题,数据冗余小,由于关系型数据库管理系统对于信息查询具有很大的灵活性,并且设计简单,所以已经被广泛使用在了实际的系统开发中。

关系数据库系统与文件数据库系统区别

关系数据库(relational database)是一个被组织成一组正式描述的表格的数据项的集合,这些表格中的数据能以不同的方式被存取或重新召集而不需要重新组织数据库表格,它对应于一个关系模型中的所有关系的集合。例如,教师、学生、课程这些关系以及关系间的联系就组成了一个教务系统。文件数据库系统是对文件的操作,包括存储、查询等。

关系数据库系统与文件数据库系统的区别如下:
(1)关系数据库系统的主要特征是数据的结构化,而文件数据库系统是数据的非结构化
(2)关系数据库中,用户看到的逻辑结构是二维表,而文件数据库系统中,基本元素是文件。
(3)文件数据库系统可以实现多媒体文件管理,支持C/S工作模式

SQL语言的功能有哪些

SQL是结构化查询语言( Structured Query Language)的缩写,其功能包括数据查询、数据操作、数据定义和数据控制4个部分。

数据查询是数据库中最常见的操作,select语句得到所需的信息。SQL语言的数据操作结构(Data Manipulation Language,DML)主要包括插入数据、修改数据及删除数据3种语句。SQL语言使用数据定义语言(Data Definition Language,DDL)实现数据定义功能,可对数据库用户、基本表、视图、索引进行定义与撤销。数据控制语句(Data Control Language,DCL)用于对数据库进行统一的控制管理,保证数据在多用户共享的情况下能够安全。

基本的SQL语句有 select、insert、update、delete、create、drop、grant、revoke等

这里写图片描述

例如,设教务管理系统中有3个基本表:
学生信息表 S(SNO,SNAME,AGE,SEX),其属性分别表示学号、姓名、年龄和性别

选课信息表 SC(SNO, CNO, SCGRADE),其属性分别表示学号、课程号和成绩

课程信息表 C(CNO,CNAME,CTEACHER),其属性分别表示课程号、课程名称和任课老师姓名。

(1) 把SC表中每门课程的平均成绩插入到另外一个已经存在的表 SC_C( CNO,CNAME,AVG_GRADE)中牟其中 AVG_GRADE表示的是每门课程的平均成绩。

insert into SC_C( CNO, CNAME,AVG_GRADE)
select SC.CNO, C.NAME, AVG(SCGRADE) FROM SC, C where SC.CNO = C.CNO
  
  
  • 1
  • 2

(2)从SC表中把何昊老师的女学生选课记录删除

delete from SC,S,C where SC.SNO=S.SNO AND SC.CNO = C.CNO  AND S.SEX = ‘女’ AND C.CTEACHEAR = ‘何昊’
  
  
  • 1

(3)规定女同学选修何昊老师的课程成绩都应该在80分以上(包含80分)

alter table SC,S,C 
add constrant GRADE CHECK( GRADE>80 )
where SC.CNO = C.CNO and SC.SNO = S.SNO AND C.CTEACHER = '何昊'
  
  
  • 1
  • 2
  • 3

(4)找出没有选修过‘何昊’老师讲授课程的所有学生姓名

SELECT SNAME FROM S
WHERE NOT EXISTS( SELECT * FROM SC,C WHERE SC.CNO= C.CNO AND CNAME = '何昊' AND SC.SNO = S.SNO )
  
  
  • 1
  • 2

(5)列出有两门以上(含两门)不及格课程(成绩小于60)的学生姓名及其平均成绩

SELECT S.SNO,S.SNAME,AVG_SCGRADE = AVG(SC.SCGRADE)
FROM S,SC,( SELECT SNO FROM SC WHERE SCGRADE<60 GROUP BY SNO HACING COUNT(DISTINCT CNO)>=2)A WHERE S.SNO = A.SNO AND SC.SNO = A.SNO GROUP BY S.SNO,S.SNAME
  
  
  • 1
  • 2

内连接与外连接有什么区别

内连接也称为自然连接,只有两个表相匹配的行才能在结果集中出现。返回的结果集是两个表中所有相匹配的数据,而舍弃不匹配的数据。由于内连接是从结果表中删除与其他连接表中没有匹配行的所有行,所以内连接可能会造成信息的丢失

内连接是保证两个表中所有的行都要满足连接条件,而外连接则不然。与内连接不同,外连接不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。也就是说,只限制其中一个表的行,而不限制另一个表的行。
SQL的外连接共有3种类型:左外连接,关键字为LEFT OUTER JOIN;右外连接,关键字为RIGHT OUTER JOIN;全外连接,关键字为FULL OUTER JOIN。外连接的用法和内连接一样,只是将INNER JOIN关键字替换为相应的外连接关键字即可。

什么是事务

事务是数据库中一个单独的执行单元(unit),它通常由高级数据库操作语言(如SQL)或编程语言(如C++、Java等)书写的用户程序的执行所引起。当在数据库中更改数据成功时,在事务中更改的数据便会提交,不再改变。否则,事务就取消或者回滚,更改无效。(p243)

事务必须满足4个属性,即原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability),即ACID 4种属性。

(1)原子性。事务是一个不可分割的整体,为了保证事务的总体目标,事务必须具有原子性,即当数据修改时,要么全执行,要么全都不执行。。。原子性要求事务必须被完整执行
(2)一致性。一个事务执行之前和执行之后数据库数据必须保持一致性状态。数据库的一致性状态应该满足模式所指定的约束,那么在完整执行该事务后数据库仍然处于一致性状态。为了维护所有数据的完整性,在关系型数据库中,所有的规则必须应用到事务的修改上。数据库的一致性状态由用户来赋值,由并发控制机制实现。例如,银行转账,转账前后两个账户金额之和应保持不变。由并发操作带来的数据不一致性包括丢失数据修改、读“脏”数据、不可重复读和产生幽灵数据。
(3)隔离性。 隔离性也被称为独立性,当两个或多个事务并发执行时,为了保证数据的安全性,将一个事务内部的操作与事务的操作隔离起来,不被其他正在进行的事务看到。
(4)持久性。持久性也被称为永久性,事务完成以后,DBMS保证它对数据库中的数据的修改是永久性的,当系统或截止发生故障时,该修改也永久保持。持久性一般通过数据库备份与恢复来保证。

一般情况下,通过执行COMMIT或ROLLBACK语句来终止事务,当执行COMMIT语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了,即被写入到磁盘;而当执行ROLLBACK语句时,自事务启动以来对数据库所做的一切更改都会被撤销,并且数据库中的内容返回到事务开始之前所处的状态。无论什么情况,在事务完成时,都能保证回到一致状态。

什么是存储过程?它与函数有什么区别于联系

SQL语句执行的时候要先编译,然后再被执行。在大型数据库系统中,为了提高效率,将为了完成特定功能的SQL语句集进行编译优化后,存储在数据库服务器中,用户通过指定存储过程的名字来调用执行。

这里写图片描述

存储过程不等于函数,两者虽然本质上没有区别,但具体而言有一下几个方面的区别:
(1)存储过程一般是作为一个独立的部分来执行的,而函数可以作为查询语句的一个部分来调用。由于函数可以返回一个对象,因此它可以在查询语句中位于from关键字的后面。
(2)一般而言,存储过程实现的功能较复杂,而函数实现的功能针对性比较强
(3)函数需要用括号包住输入的参数,且只能返回一个值或表对象,存储过程可以返回多个参数
(4)函数可以嵌入在SQL总使用,可以在select中调用,存储过程不行。
(5)函数不能直接操作实体表,只能操作内建表
(6)存储过程再创建时即在服务器上进行了编译,执行速度更快。

什么是主键?什么是外键

主键也称为主码,是数据库中的一个或多个字段,是表中记录的唯一标示符。主键不能为空。一个表中只能有一个主键,主键列不一定只有一列,可以是多列。 主键可以唯一地标识一行。

主键需遵循以下原则:
(1)主键对用户而言没有意义
(2)主键不能为空
(3)主键保持不变。因为主键的用途是唯一地标示一行数据
(4)主键不应包含动态变化的时间戳
(5)主键原则上应当由计算机自动生成,而非用户指定。


外键也称为外码,标示的是两个关系之间的联系。当公共关键字在一个关系中为主键时,这个公共关键字被称为另外一个关系的外键。
一个表可以有多个外键,也可以为空

什么是死锁

在OS中有若干程序并发执行,它们不断地申请、释放资源,在此过程中,由于争夺资源而处于无限期的等待状态,造成程序无法继续执行,若无外力作用,它们都将无法推进下去,这时称系统处于死锁状态或系统产生了死锁。此时便只能通过外力来打破这种状态。

产生死锁的原因有以下3点。
(1)系统资源不足,在系统中常有多个进程共享资源的情况,如打印机,这些资源在同一时刻只能被一个进程使用。
(2)进程运行的推进顺序不对,进程在运行中具有异步性,当进程推进顺序不当时,便产生死锁。
(3)资源分配不当,如果系统资源充足,进程的资源请求都能得到满足,死锁的可能性会被大大降低,而进程推进顺序与速度不同,也可能会产生死锁。

产生死锁的4个必要条件:
(1)互斥,每个资源每次只能被一个进程使用
(2)请求与保持等待,一个进程因请求资源而被阻塞时,对已获得的资源保持不放
(3)不可剥夺,进程已获得的资源,在未使用完之前,不能强制剥夺
(4)环路等待,若干进程之间形成首尾相接的等待资源关系。

So,为了预防死锁,就要打破产生死锁的4个条件中的一个或多个,因此需要最大限度地增加系统资源,合理地安排进程的顺序并确定合理的分配资源的算法。

避免死锁是在资源的动态灯泡过程中,采取有效的方法防止系统进入不安全状态,达到预防死锁的目的,其中最具代表性的方法就是银行家算法。

什么是共享锁?什么是互斥锁

在数据库中,锁主要是对数据进行读/写的一种保护机制,从数据库系统的角度来看,一般可以将锁分为共享锁和互斥锁。

共享锁简称S锁,也叫读锁。用于不更改或不更新数据的操作(只读),如select语句。如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加互斥锁。共享锁可阻止其他并发运行的程序获取重叠的独占锁定,但是允许该程序获取重叠的共享锁定。其他用户可以获取共享锁锁定的资源,但是不能进行修改该共享锁。在执行select命令时,sql server通常会对对象进行共享锁定。 共享锁又称为读锁。通常加共享锁的数据页被读取完毕后,共享锁就会立即被释放。

互斥锁简称X锁,也叫排它锁,用于数据修改操作,如insert、update或delete。确保不会同时对同一资源进行多重更新。为了保证数据操作的完整性,引入了互斥锁。用互斥锁来保证在任意时刻,只能有一个线程访问对象。若事务T对数据D加X锁,则其他任何事务都不能再对D加任何类型的锁,直至T释放D上的X锁;一般要求在修改数据前要向该数据加互斥锁,所以互斥锁又称为写锁。
对于锁的使用,有一定的限制,需要遵守两个事项:
A、先锁后操作
B、事务结束之后必须解锁

一二三四范式有何区别

正确地进行表的设计称为“数据库规范化”,它的目的就是减少数据库中的数据冗余,从而增加数据的一致性。

范式是在识别数据库中的数据元素、关系,以及定义所需的表和各表中的项目这些初始工作之后的一个细化的过程。常见的范式有1NF、2NF、3NF、BCNF、以及4NF。

1NF,第一范式。第一范式是指数据库表中的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多的关系。第一范式的模式要求属性值不可再分裂成更小部分,即属性项不能是属性组合或有组属性组成。
简而言之,第一范式就是无重复的列

这里写图片描述

这里写图片描述
这里写图片描述
这里写图片描述

CHECK约束

CHECK约束是指限制表中某一列或某些列中可接受的数据值或数据格式,它用于限制列的取值范围,使用形式为:CHECK(约束表达式)。如果是对单列定义CHECK约束,那么该列只允许特定的值;如果是对一个表定义CHECK约束,那么此约束会在特定的列中对值进行限制。例如,对于一个员工信息表,给员工的年龄属性添加了一个约束,即年龄必须大于0且小于等于120,那么用户在输入年龄的时候,就必须遵守该约束,输入负数或者121就无法输入

视图

视图是由从数据库的基本表中选取出来的数据组成的逻辑窗口,不同于基本表。它是一个虚表,在数据库中,存放的只是视图的定义而已,不存放视图包含的数据项,这些项目仍然存放在原来的基本表结构中。

视图的作用:
(1)可以简化数据查询语句
(2)可以使用户能从多角度看待同一数据
(3)通过引入视图,可以提高数据的安全性
(4)视图提供了一定程度的逻辑独立性。

猜你喜欢

转载自blog.csdn.net/u013738122/article/details/82908789
今日推荐