资源描述
数据库管理技术发展的三个阶段:1,人工管理阶段;2,文件系统管理阶段;3,数据库系统管理阶段。
数据库管理阶段的优点:1,数据结构化;2,数据的共享性高、冗余度低、易扩充;3,数据独立性高;4,DBMS对数据进行统一的管理和控制。
数据库(Databaes,简称DB)是长期储存在计算机内、有组织的、可共享的大量数据集合。
数据库的特征:1,数据按照一定的数据模型组织、描述和储存;2,可为各种用户共享;3,冗余度较小;4,数据独立性较高;5,易扩展。数据的物理独立性是指用户的应用程序与存储在磁盘上的数据库中数据室相互独立的。数据的逻辑独立性事之用户的应用程序与数据库的逻辑结构是相互独立的。数据与程序的独立,把数据的定义从程序中分离出去,加上数据的存取又由DBMS负责,从而简化了应用程序的编制,大大减少了应用程序的维护和修改工作。
数据库管理系统(Databaes Mangement System,简称DBMS)是位于用户与操作系统之间的一层数据管理软件。DBMS用途:科学地组织和存储数据、高效地获取和维护数据。1,数据定义语言(DDL),定义数据库中的数据对象; 2,数据操纵语言(DML),操纵数据实现对数据库的基本操作(查询、插入、删除和修改);3,数据库的事务管理和运行管理;4,数据库的建立和维护功能;5,其他功能。
数据库系统(Databaes System,简称DBS)是指在计算机系统中引入数据库后的系统构成。在不引起混淆的情况下常常把数据库系统简称为数据库。数据库系统的构成:数据库、操作系统、数据库管理系统、应用系统、数据库管理员和用户。
数据库系统的三级模式结构(内部的模式结构):是指数据库系统由外模式、模式,内模式构成。模式(也称逻辑模式):数据库中全体数据的逻辑结构和特征的描述,所有用户的公共数据视图,综合了所有用户的需求。一个数据库只有一个模式。外模式(也称子模式或用户模式):数据库用户使用的局部数据的逻辑结构和特征描述,数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。模式与外模式的关系:一对多;外模式通常是模式的子集;一个数据库可以有多个外模式。反映了不同的用户的应用需求、看待数据的方式、对数据保密的要求;对模式中同一数据,在外模式中的结构、类型、长度、保密级别等都可以不同。外模式的用途:保证数据库安全性的一个有力措施;每个用户只能看见和访问所对应的外模式中的数据。内模式(也称存储模式):是数据物理结构和存储方式的描述;是数据在数据库内部的表示方式。一个数据库只有一个内模式。
数据库的良机映像是什么?1、外模式/内模式映像:外模式与模式之间的对应关系:每一个外模式都对应一个外模式/模式映象;映象定义通常包含在各自外模式的描述中。保证数据的逻辑独立性。2、模式/内模式映象定义了数据全局逻辑结构与存储结构之间的对应关系。例如,说明逻辑记录和字段在内部是如何表示的。保证数据的物理独立性。
数据库的体系结构(外部结构):单用户结构;主从式结构;分布式结构;客户机 / 服务器结构;浏览器 / 数据库服务器结构。
数据模型:在数据库中用数据模型来抽象、表示和处理现实世界中的数据和信息。数据模型是对现实世界数据特征的抽象。在数据库技术中,用数据模型的概念描述数据库的结构与语义。
数据模型的三要素:1,数据结构(描述数据库的组成对象以及对象之间的联系);2,数据操作(对数据库中各种对象的实例允许执行的操作集合);3,数据的完整性约束条件(一组完整性规则的集合)
模型分成两类,分属于两个不同的层次:(1)概念模型, 也称信息模型,它是按用户的观点来对数据和信息建模。主要用于数据库设计,不依赖于计算机系统。 实体,是对现实世界中客观存在并可相互区别的事物的抽象。实体集,是具有相同类型及相同性质的实体集合。属性,是实体集中所有实体所具有共同特性的抽象描述。实体的键,又称实体的码或关键字,是能够唯一地标识实体集中每个实体的一个或一组属性。两个实体集之间的联系:一对一(1:1),一对多(1:n),多对多(m:n);(2) 数据模型,主要包括网状模型、层次模型、关系模型等,它是按计算机系统的观点对数据建模。主要用于DBMS的实现。 常用的数据模型:层次模型,网状模型,关系模型,面向对象模型。
关系模型是最重要的一种数据模型,关系数据库系统采用关系模型作为数据的组织方式,现行的数据库系统大都是基于关系模型的数据库系统。关系模型的特点:1)建立在严格的数学概念基础之上;2)概念单一,容易理解;3)存取路径对用户隐蔽;4)数据联系是靠公公属性联系;
1完整性约束的分类:实体完整性(关系中的远足在主属性上不能有空值),参照完整性(外间的值不允许参照不存在的相应表的主键的值),用户定义的完整性(用户根据具体应用的语义要求,利用DBMS提供的定义和检验这类完整性规则的机制,用户自己定义的完整性规则);
2完整性规则分为:(1)实体完整性规则:关系中的元组在主属性上不能有空值。(2)参照完整性规则:外键的值不允许参照不存在的相应表的主键的值。(3)用户定义的完整性规则:用户定义的完整性规则是用户根据具体应用的语义要求,利用DBMS提供的定义和检验这类完整性规则的机制,用户自己定义的完整性规则。
3在数据管理技术的发展中,经历了人工管理阶段,文件系统阶段和数据库系统阶段,数据独立性最高的是数据库系统阶段。
视图是从一个或多个基本表到处的表,是关系数据库系统为用户提供从不同角度观察和使用数据库中的额数据的一种机制,它是一个虚表不存放到数据库中。可以定义在一个或多个基本表上,若视图是从单个基本表中导出,并且只是去掉了某些列而保留了主键,称为行列子集视图。视图作用:能够简化用户的操作;使用户能以多种角度看待同一数据;对重构数据库提供了一定程度的逻辑独立性;能够对数据提供安全保证。
安全性有3个:1、数据库安全性是指保护数据库防止被不合法的使用所造成的数据泄漏、更改或破坏。安全性控制是指才去各种方法措施加以防范可能的对数据库的非法访问,结构:定义用户权限;合法权限的检查。2、授权(定义用户存取权)3、收回权限。
4不属于数据库系统特点的是数据冗余程度高。
5在一个关系中,如果有这样个属性存在,它的值能唯一标识关系中的每个,称这个属性为候选码。
6同一关系模式的任两个元组值可全同。
7在关系数据库设计中,设计关系模式是逻辑设计阶段的任务。
8一个m:n联系转换为一个关系模式,关系的码为各实体码的组合。
9在数据库系统中,对存取权限的定义称为授权。
10数据库的完整性是指数据的正确性和相容性。
11若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能在对A加任何类型的锁。
12可移植性不是数据库系统必须提供的数据控制功能。
13对并发操作若不加以控制,可能会带来不一致问题。
14数据库体系结构按照:模式,内模式,外模式三级结构进行组织。
15子查询的条件不依赖于父查询,称为不相关子查询。
16实现数据库并发控制的主要方法是封锁机制。
17数据库安全性是防止恶意破坏和非法存取,数据库完整性是防止数据库中存在不符合语义的数据和错误信息的输入和输出。
18需求分析阶段的描述工具是数据流图和数据字典。
集合运算符:并—R U S 差—R-S 交—RnS笛卡尔积—R*S
专门的关系运算符:选择,投影,连接,除
存储过程是指经过预先编译的SQL语句的集合,可以以一种可执行的形式永久地存储在数据库中。体现在:存储过程可以接受参数,并以输出参数的形式返回多个参数给调用存储过程的过程或批处理;存储过程可以包含对数据库进行查询、修改等的编程语句;可以返回执行存储过程的状态值以反映存储过程的执行情况。优点:运行速度快;模块化编程;减少网络通信量;保证系统的安全性。类型:系统提供的存储过程(放在master数据库中并以sp_开头)和用户自定义的存储过程。
1、 使用系统存储过程sp_ helptext可以用来查看存储过程中的SQL语句,使用系统存储过程sp_depends可以查看该存储过程使用的对象以及调用该存储过程的其他存储过程的名称。
2、 触发器是在满足某个特定条件时自动触发执行的专用存储过程,用于保证表中的数据遵循数据库设计者确定的规则和约束。与存储过程不同的是,存储过程是通过名称而被显示调用执行,而触发器是通过事件进行触发而被执行,不能被显示调用。作用:用于强制业务规则和数据完整性:a、可以通过级联的方式对相关的表进行修改;b、可以试试对比CHECK约束更复杂的限制;c、可以根据改变前后表中数据的不同来进行相应的操作;d、对于一个表上的不同操作可以采用不同的触发器,即使是对相同的语句也可以调用不同的触发器完成不同的操作。
3、 触发器过程中,用到了两个特殊的临时表:insertd表(存放的是由于执行INSERT或UPDATE语句要向表中插入的新数据行)和deleted表(存放由于执行DELETED或UPDATE语句中药从表中删除的语句行)。
4、 数据依赖是通过关系中属性间值的相等与否体现出来的数据间的相互关系,它是现实世界属性间相互联系的抽象,是数据内在的性质,是语义的体现。
5、 规范化的基本思想就是减少关系模式中存在的数据冗余。
6、 范式就是在关系数据库的规范化过程中,为不同程度的规范化要求设立的不同的标准。各种范式之间存在联系:
7、 第一范式1NF的定义:如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。
第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库。但是满足第一范式的关系模式并不一定是一个好的关系模式。
8、 第二范式2NF的定义:若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于R的键,则R∈2NF。采用投影分解法将一个1NF的关系分解为多个2NF的关系,可以在一定程度上减轻原1NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。
9、 第三范式3NF定义:关系模式R<U,F> 中若不存在这样的码X、属性组Y及非主属性Z(Z Í Y), 使得X→Y,Y → X,Y→Z,成立,则称R<U,F> ∈ 3NF。采用投影分解法,把SL分解为两个关系模式,以消除传递函数依赖。将一个2NF关系分解为多个3NF的关系后,并不能完全消除关系模式中的各种异常情况和数据冗余。
10、 BCNF范式 设关系模式R<U,F>∈1NF,如果对于R的每个函数依赖X→Y,若Y不属于X,则X必含有候选码,那么R∈BCNF。
11、 1NF
↓ 消除非主属性对码的部分函数依赖 消除决定
2NF 属性集非
↓ 消除非主属性对码的传递函数依赖 码的非平
3NF 凡函数依
↓ 消除主属性对码的部分和传递函数依赖赖
BCNF
↓ 消除非平凡且非函数依赖的多值依赖
4NF
1) 课后题:某商业集团数据库中有一关系模式R如下:R(商店编号,商品编号,数量,部门编号,负责人)如果规定每个商店的每种商品只有一个库存数量。回答:根据上述语义,写出关系模式R的基本函数依赖。(商店编号 商品编号)→部门;(商店编号 部门)→负责人;(商店编号 商品编号)→数量。
2) R最高已经达到第几范式?为什么?不存在部分依赖,只有传递依赖,为第二范式;
3) 如果R不属于3NF,请将R分解为3NF模式集。R1(商店编号 商品号 数量 部门)R2(商店编号 部门 负责人);
12、 课后题:如图所示给出的关系SC为第几范式?是否存在插入删除异常?若存在说明原因?将其分解为高一级范式,分解后的俄关系能否解决操作异常问题?答:为第一范式,有异常,原因: 关系模式中存在部分函数依赖和部分冗余信息。分解为第二范式:R1(Sno CTitle); R2(Sno Cno Iname Grade Ilocal).分解为第三范式:R1(Sno CTitle); R21(Sno Cno Grade Iname); R22(Iname Ilocal)
1.数据库设计的6个阶段:(1)需求分析(2)概念结构设计(3)逻辑结构设计(4)物理结构设计(5)数据库实施(6)数据库的运行与维护
2.数据字典的内容和作用是什么?数据字典是各类数据描述的集合,它是关于数据库中数据的描述,通常包含数据项、数据结构、数据流、数据存储和处理过程;其作用是概念设计、逻辑模型设计和物理设计的主要依据,对数据流图中涉及的各类元素进行规范化的描述。
3.数据流图:是一种能全面描述系统逻辑模型的主要工具,它是从“数据”和“对数据的加工”两方面表达数据处理系统的一种图形表示法,以用少数几种符号综合地反映出数据在系统中的流动、存储和处理况。
1.计算机系统安全问题分为3类:技术安全类、管理安全类、政策法律类
2.数据库安全性控制的常用方法主要有用户标识与鉴别、存取权限控制、视图、审计、数据加密等。
3.并发控制:并发操作之所以产生错误,是因为事务执行期间互相干扰造成的。为了保护事务的特性(特别是隔离性),对事物的并发操作必须进行控制,即并发控制。通常DBMS都是采用事务机制和封锁机制进行并发机制,事务是并发控制的基本单位。
4.封锁:封锁就是事务T在对某个数据对象(表,记录等)操作之前,先向系统发出请求,对其加锁,加速后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象。基本的封锁类型有2类:排他锁(一旦事务T对数据对象A加上排他锁,则只允许T读取和修改A,其他不能读取和修改,不恩那个加任何类的锁),共享锁(如果食物T对A加上共享锁S,其他事物对A之恩那个再加S锁,不恩那个加X锁)。
两段锁协议是指一个事物在读写任何数据前必须首先申请并获得对该数据的封锁,一旦该事物释放了一个封锁,则它就不的再申请任何数据对象上的封锁。
5.故障的种类:(1)事务内部的故障;(2)系统故障;(3)介质故障;(4)计算机病毒。
6.数据库并发操作带来的问题:(1)丢失更新;(2)不可重复读;(3)读“脏数据”。
7.日志文件就是用来记录事务对数据库的更新操作的文件。概括起来日志文件主要有两种格式:以记录为单位的日志文件和以数据块为单位的日志文件。利用日志回复数据库步骤:反响扫描日志文件;对该市五的更新操作执行逆操作,即将日志记录中的“更新前的值“写入数据库;重复执行前边动作,回复该事物的其他更新操作,直至读到该事物的开始标记,事物故障恢复就完成了。
事务的特性(ACID):原子性;一致性;隔离性;持续性。
8.活锁:如果事务T1封锁了数据A,事务T2又请求封锁A,于是T2等待;T3也请求封锁A,当T1释放了A上的封锁之后系统首先批准了T3的要求,T2仍然等待;然后T4又请求封锁A,当T3释放了A上的封锁之后系统又批准了T4的请求,……,T2有可能永远等待。这种在多个事务请求对同一数据对象封锁时,使某一事务总是处于等待的情况称为活锁。
9.死锁:如果一个事务申请锁未获准,则须等待其他事务释放锁,这就形成了事务之间的等待关系。当事务之间出现循环等待时,如果不加干预,就会一直等待下去,这种状态成为死锁
问答题
1.什幺是事物?事物有哪些性质,并解释每一个性质的含义?
答:事务使用户定义的一个数据库操作序列,这些操作要幺全做要幺全不做,是一个不可分割的工作单位。
其性质有:(1)原子性。事物作为一个整体被处理,不可以被分割;(2)一致性。事务执行的结果必须使数据库处于一个一致性状态。(3)隔离性。一个事务的执行不能被其他事务干扰。(4)持续性。也称永久性,指事务一旦提交,那幺对数据库所做的修改将是持久的,无论发生何种操作和系统故障都不应该对其有任何影响。
2.什幺视图?所有的视图是否可以更新?问什幺?举例说明。
答:视图是一个或多个基本表导出的表,是关系数据库系统为用户提供从不同角度观察和使用数据库中数据的一种机制。并不是所有的视图都可以更新。因为有些视图的更新操作不能唯一的,有意义的转换为对相应基本表的更新。通常关系数据库中,只允许对行列子集视图进行更新。
举例:对于以下视图:
CREATE VIEW avg-grade(Cno,average)
AS
SELECT Cno.AVG(Grade)FROM CS
GROUP BY Cno
若执行以下代码:
UPDATE avg-grade SET Grade=90
系统会拒绝执行,原因在于无法将修改值唯一的转换对基本表的更新。
3.试述关系模型的完整性规则。在参照完整性中,为什幺外码属性的值也可以为空?什幺情况下才可以为空?
答:(1)实体完整性规则(2)参照完整性规则(3)用户定义的完整性规则。在参照完整性中,当所涉及到的外键在另一个关系中所参照的键不是主键,那幺它也可以为空,非主属性时可以为空。
4.如果数据库系统对事务的并发操作不加控制,有可能带来哪些问题?如何解决?
答:可带来如下问题:(1)丢失更新(2)不可重复读(3)读“脏数据”。解决方法是封锁。封锁机制是并发控制的主要手段,封锁就是事务T在对某个数据对象操作之前,先向系统发出请求,对其加锁,加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他事务不能更新此数据对象。封锁具有三个环节:一是申请加锁,二是获得锁,三是释放锁。基本的封锁类型类型有两种:(1)排他锁X,一旦事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务既不能读取和修改A,也不能对A再加任何类型的锁,直到T释放A上的锁为止(2)共享锁S,如果事务T对数据对象A加上S锁,其他事务对A只能再加S锁,不能加X锁,直到事务T释放A上的锁为止。
5.试述数据库设计过程。答:(1)需求分析:通过详实调查应用领域中各应用的信息要求和操作要求进行详细分析,明确用户的各种需求。分析和表达用户需求的常用方法:SA(结构化分析)
(2)概念结构设计:将需求分析得到的用户需求抽象为信息结构的过程,就是生成E-R图。
(3)逻辑结构设计:把数据库概念设计阶段产生的数据库概念模式(基本E-R图)转换为与所选用的DBMS产品所支持的数据模型相符合的数据库逻辑模式,就是将E-R图转换为关系模式。
(4)物理结构设计:为一个给定的逻辑数据模型选取一个最适量应用环境的物理结构(存储结构与存取方法),也就是设计数据库的内模式。(内模式:数据在数据库内部的表示方法。)
(5)数据库的实施、运行和维护:在数据库物理设计之后,要在选定的软硬件平台上实际建立可运行的数据库—数据库的实施;数据库的运行则是要实际测量系统的各种性能指标(不仅是时间和空间指标),如果结果不符合设计目标,则需要返回物理设计阶段,调整物理结构,修改参数,有时甚至需要返回逻辑设计阶段,调整逻辑结构。
维护的任务—(1)数据库的备份和恢复(2)维持数据库的安全性和完整性(3)检测并改善数据库性能(4)数据库的重组和重构。
6.什幺是主码,外码?他们的作用是什幺?分别如何定义?
答:主码:若一个关系有多个候选键,则选定其中一个为主码。外码:设F是关系R的一个或一组属性,但不是关系R的键,如果F与关系S的主键相对应,则称F是关系R的外码。主码的作用:唯一的标识该元组。外码的作用:保证数据的关联性。
1传统的集合运算:并(union)R∪S 仍为n目关系,由属于R或属于S的元组组成,去除了重复的元组R∪S = { t|t Î R∨t ÎS }
差(difference)R - S 仍为n目关系,由属于R而不属于S的所有元组组成R -S = { t|tÎR∧tÏS }
交(inersection)R∩S仍为n目关系,由既属于R又属于S的元组组成 R∩S = { t|t Î R∧t ÎS }
R∩S = R –(R-S)
笛卡尔积(cartesian product)R :n目关系,k1个元组;S:m目关系,k2个元组
R×S 列:(n+m)列的元组的集合,元组的前n列是关系R的一个元组,后m列是关系S的一个元组;行:k1×k2个元组;R×S = {tr ts |tr ÎR ∧ tsÎS }
2专门关系运算:选择 查询信息系(IS系)全体学生 σSdept = 'IS' (Student)或σ5 ='IS' (Student)
查询年龄小于20岁的学生 σSage < 20(Student) 或σ4 < 20(Student)
投影:查询学生的姓名和所在系(求Student关系上学生姓名和所在系两个属性上的投影)
πSname,Sdept(Student)或π2,5(Student)
连接:等值连接(equijoin)从关系R与S的广义笛卡尔积中选取A、B属性值相等的那些元组
自然连接(Natural join)是一种特殊的等值连接两个关系中进行比较的分量必须是相同的属性组在结果中把重复的属性列去掉自然连接的含义
除
3 eg:查询至少选修了一门其直接先行课为5号课程的课程的学生姓名。
πSname(σCpno='5'(CourseSCStudent))或πSname(σCpno='5'(Course) SCπSno,Sname(Student))
或πSname (πSno (σCpno='5' (Course)SC)πSno,Sname (Student))
[例10] 查询选修了全部课程的学生号码和姓名。
πSno,Cno(SC)÷πCno(Course) πSno,Sname(Student)
πSno.Cno(SC) 95001象集{1,2,3};95002象集{2,3};πCno(K)={1,3}
于是:πSno.Cno(SC)÷K={95001}
表的创建格式如下:
create table <表名>(<列名1><数据类型>[<完整性约束条件>],
<列名2><数据类型>[<完整性约束条件>],
<列名3><数据类型>[<完整性约束条件>],
<列名4><数据类型>[<完整性约束条件>])
例:create table student
(cno char(3) primary key,
cname char(20),
cpno char(3),
Ccredit smallint not null)
基本表的修改格式:
alter table <表名>
[add <新列名><数据类型>[完整性约束条件]]
[drop constraint <完整性约束名>]
[alter column<列名><数据类型>]
例:alter table student add sdpet char(20)
基本表的删除格式:
drop table<表名>
例:drop table student
表的查询格式:
select [all|distinct]<目标列表达式>[,<目标列表达式>]…
from <表名或视图名>[,<表名或试图名>][where <条件表达式>]
[group by <列名1>[having <条件表达式>]]
[order by <列名2>[ASC|DESC]];
distinct关键字来消除重复的行
group by子句是将属性值相等的元组组成一个组
order by子句是中使用多个列进行排序
where子句用于选择满足给定条件的元组
having子句子句可提取满足条件的组
ASC表示列的升序,DESC列的降序。
例1:查询计算机系年龄在20岁以下的学生的学号、姓名和性别
select sno,sname,ssex from student
where sdept=’cs’and sage< 20;
例2:查询全体学生情况,结果按所在系的升序排序
select * from student
order by sdept,sage DESC;
例3:查询至少有3门以上课程成绩在90分以上的学生学号
select sno from sc
where grade>= 90
group by sno having count(*)> 3;
例4:查询所有姓张的、第3个字为“伟”的学生的姓名,学号和性别
select sname,sno,ssex from student
where sname like ‘张_ _伟%’;
连接查询:等值连接与非等值连接
查询每个学生及其选修课的情况
select student.* ,sc from student,sc
where student.sno= sc.sno;
自身连接
查询每门课的间接先修课(即先修课的先修课)
select o,o from course first,course second
where o = o;
外连接(左连接,右连接)
查询每个学生及其选修课的情况
select student.sno,sname,ssex,sage,sdept,cno,grade
from student left outer join sc
on student.sno = sc.sno
复合连接
查询选修了数据库原理课程且成绩在90分以上的学生的学号和姓名
select student.sno,sname from student,course,sc
where student.sno = sc.sno and o = o and canme=”数据库原理” and grade > 90;
嵌套查询
1.不相关子查询
查询选修了1号课程的学生的姓名
select sname from student
where sno in (select sno from sc where cno=’1’);
2.相关子查询
查询每个学生超过他所选课程平均成绩的课程号
select sno,cno from sc x
where grade >= (select avg(grade) from sc y where o = o);
SQL的数据的更新
1.插入数据
在student 表中插入一条新元组
Insert into student
values(‘980012’,’张倩’,’女’,20,’cs’)
2.修改数据
将所有计算机系的学生成绩置0
update sc
set grade = 0
where sno in (select sno from student where sdept=’cs’);
3.删除数据
删除所有计算机系的学生的选课记录
delete from sc
where sno in (select sno from student where sdept=’cs’);
编写存储过程sp_goodsum,查看指定客户的所有订单的订货金额数,客户编号作为输入参数,订货总金额数作为输出参数。
Create procedure sp_goodsum
@cnum Varchar(10) @snum int output
As
select @snum =sum(Ordersum) from Orders
Group by CustomerID having CustomerID= @cnum
调用过程:DECLARE @snum INT;
EXECUTE sp_goodsum ‘ 1’,@snum;
SELECT’the result is:’,@snum;
编写存储过程sp_insertgoods,向goods表中插入一条记录:
Create procedure sp_insertGoods
@Goodnum char(10), @Goodname char(10),@Gprice int, @Gprovider char(10),@Gstocks int, @Gstate char(2)
As
insert into Goods values(@Goodnum ,@Goodname ,@Gprice ,@Gprovider ,@Gstocks ,@Gstate )
调用过程:
EXECUTE sp_insertcourse‘xxz’,‘xxz’,‘xxz’,’xxz’;
删除存储过程student_course语句:DROP PROCEDURE student_course;
修改存储过程student_course语句:ALTER PROCEDURE student_course
AS select * from student;
在customers表上建立删除触发器,实现customer表盒orders表的级联删除:
Create trigger Customers_delete
on Customers after delete
As
delete from Orders
where CustomerID in(select deleted.CustomerID from deleted
在orders表上建立插入触发器,当向表中添加一条订货记录是,若订单中的商品状态为整理(status=1),则不能插入:
Create trigger Goods_insert
on Goods after insert
As
if (select Status
from Orders,inserted
where Orders.OrderID=inserted.OrderID)=1
begin
print ‘不能插入’
Rollback transaction
end
在orders表上建立插入触发器,当添加订单时,减少goods表中相应商品的库存量
Create trigger Orders_insert
on Orders after insert
As
update Goods
set Stocks=Stocks-(select Quantity from inserted)
where GoodID in (select inserted. GoodID from inserted)
在orders表上建立触发器,不允许对订单日期修改:
Create trigger Goods_update
on Goods after update
As
if update(Date)
begin
print ‘不能更新日期’
Rollback transaction
End
建立触发器,实现参照完整性约束,即若在orders表中添加一条订单记录时,则该订单中的商品必须在goods表中存在,否则不允许添加该记录。
Create trigger Orders_insert
on Orders after insert
As
if(select count(*)
from Goods,inserted
where Goods.GoodID=
inserted.GoodID)=0
begin
print ‘该商品不存在’
Rollback transaction
end
修改触发器Orders_insert语句:ALTER TRIGGER Orders_insert ON orders
AS
Select * from orders
使orders表中的触发器Orders_insert无效:
ALTER TABLE orders
DISABLE TRIGGER Orders_insert;
使orders表中的触发器Orders_insert重新有效:
ALTER TABLE orders
ENABLE TRIGGER Orders_insert;
删除触发器Orders_insert语句:DROP TRIGGER Orders_insert;
建立计算机学生视图
CREATE VIEW c_sudent
AS
SELECT Sno,Sname,Ssex,Sage
FROM student
WHERE Sdept=’CS’
WITH CHECK OPTION//表示当通过视图进行更新时,系统自动检查或加上Sdept=’CS’条件
在视图上查询年龄在18-20岁的学生学号姓名
SELECT Sno,Sname
FROM c_student
WHERE Sage BETWEEN 18 AND 20;
更新信息UPDATE Student
SET sname=‘XX’
WHERE Sno=‘98002‘;
删除信息
DELETE
FROM c_student
WHERE Sno=‘980003’;
学校有若干个系,每个系有若干个班级和教研室,每个教研室有若干个教师,期中有的教授和副教授每人带若干个研究生,每个班有若干个学生,每个学生选若干个课程,每门课可有若干个学生选修
某工厂生产若干产品,每种产品由不同的零件组成,有的零件可用在不同的产品上。这些零件由不同的原材料制成,不同零件所用的材料可以相同。这些零件按所属的不同产品分别在仓库中,原材料按类别放在若干个仓库中。
10.1)求供应工程J1零件的供应商编号SNO
2)求供应工程J1零件P1的供应商编号SNO
3)求供应工程J1零件为红色的供应商编号SNO
4)求没有使用天津供应商生产红色零件的工程号JNO
5)求至少使用了供应商S1锁供应的全部零件的工程号JNO
11、1)检索LIU老师所授课程的课程号和课程名
2)检索年龄大于22岁的男同学的学号和姓名
3)检索学号为S3学生所学课程的课程号和认可老师
4)检索WANG同学不学的课程号
5) 检索至少选修LIU老师所授课程中一门课程的女学生的姓名
6)检索全部学生都选修的课程的课程号和课程名
7)检索选修课程包含LIU老师所授全部课程的学生的学号
展开阅读全文