苏州大学SQL重点复习资料培训讲学
- 格式:doc
- 大小:72.00 KB
- 文档页数:3
SQL复习提要第一篇:SQL复习提要一、数据库创建1、Create语句:用来创建新的数据库对象;Create database database name2、alter语句:用来修饰已有对象的结构;Alter database database name3、drop语句:用来删除已有的数据库对象;4、insert语句:用来在数据表或视图中插入一行数据;二、表与表数据操作在表sxb中增加1个新列为奖学金等级,然后删除该列 USE psxcj goalter table xsbadd 奖学金等级 tinyint NULL goalter table xsbdrop column 奖学金等级select *from kcb select *from xsb select *from cjb查询全体的学生的详细记录 Select * from Student 查询全体学生的姓名与学号 Select Sname Sno from Student 查询全体学生的姓名及其年龄Select Sname,YEAR(getdate()-year(sbirthday))as ageFrom Student--单表查询查询计算机系全体学生的信息 /*语句块*/select * from xsbwhere 专业='计算机'--查询姓“张”的学生的学号和姓名select 学号,姓名from xsb where 姓名 like '张%'--查询xsb中备注信息为空的学生信息 select * from xsb where 备注 isnull--查询成绩在90分以上的学生信息 select distinct 学号 from cjbwhere 成绩>=90--查询同时选修了课程101和102的学生记录select 学号from cjbwhere 课程号='101' or 课程号='102' group by 学号having count(*)=2select * from cjbselect count(学号)选修人数,课程号 from cjbgroup by 课程号--查询选修了两门以上的课程的学生学号和课程数select 学号,count(课程号)as 选修门数 from cjb group by 学号having count(*)>=2--查询选修课程数大于或等于2的学生学号,平均成绩和选修课门数,并按平均成绩降序排序select 学号,avg(成绩),count(*)as 选修门数 from cjb group by 学号 having count(*)>=2 order by avg(成绩)desc--查询姓“张”的前两个学生的学号和姓名 Top 2--多表查询查询选修了(数据库原理)的计算机系的学生学号和姓名Select 学号,姓名 from xsb,kcb,cjbwhere xsb.学号=cjb.学号 and kcb.课程号=cjb.课程号 and 课程名='计算机基础' and 专业='计算机'--查询学生的学号、姓名、选修课程的名称和成绩 select xsb.学号, 姓名,课程名,成绩from xsb,cjb,kcb where xsb.学号=cjb.学号and cjb.课程号=kcb.课程号--查询选修了课程的学生姓名--select *from kcbselect distinct 姓名 from xsb,cjb where xsb.学号=cjb.学号--查询所有学生的信息和所选修的课程--select xsb.*,[kcb.]课程名 from xsb left outer join cjb on xsb.学号=cjb.学号left join kcb on cjb.课程号=kcb.课程号--查询已被选修的课程的情况和所有课程的名字--Select cjb*,课程名 from xsb left join cjbOn xsb.学号=cjb.学号--查找计算机系的学生选修课程数大于2的学生的姓名、平均成绩和选课门数,并按平均成绩降序排列select xsb.姓名,avg(成绩)as平均成绩,count(*)as 选课门数from xsb,cjbwhere xsb.学号=cjb.学号and 专业='计算机'group bycjb.学号,姓名having count(*)>2 order byavg(成绩)desc--嵌套查询和组合查询----1.统计选修了【数据库原理】课程的学生学生select 课程号 from kcb where 课程名='数据库原理'select count(*)fromcjbwhere 课程号 in(select 课程号 from kcb where 课程名='数据库原理')2.查询没有选修【数据库原理】课程的学生信息select * from xsb where 学号 not in(select 学号 from cjb where 课程号 in (select 课程号 from kcb where 课程名='数据库原理'))3.查询其他系中比计算机系学生年龄都小的学生select *from xsbwhere 出生时间'计算机'--4.查询被081101学生或081102学生所选修的课程的课程号(用UNION组合查询与IN条件查询两种方法实现)并集select 课程号 from cjbwhere学号='081101' unionselect 课程号 from cjbwhere学号='081102'--5.查询081101学生和081102学生同时选修的课程的课程号(用INTERSECT组合查询与EXISTS嵌套子查询两种方法实现)(自连接)select 课程号 from cjbcjb1where exists(select * from cjb cjb2where cjb1.课程号=cjb2.课程号 andcjb2.学号='081102')and 学号='081101'select 课程号 from cjb where 学号='081101' intersectselect 课程号from cjbwhere学号='081102'--6.查询被081101学生选修,但没有被081102学生所选修的课程的课程号(用EXCEPT组合查询与NOT EXISTS嵌套子查询两种方法实现)select 课程号 from cjb where 学号='081101' exceptselect 课程号 from cjbwhere学号='081102'create procedure proc_cjcxbasselect xsb.学号,姓名,课程名,成绩 from xsb,kcb,cjbwhere xsb.学号=cjb.学号 and cjb.课程号=kcb.课程号--7、查询选修了101课程的学生姓名 select 姓名from xsbwhere EXISTS(select *from cjbwhere xsb.学号=cjb.学号 and 课程号='101')--存储过程--创建查询create procedure proc_cjcx asselect xsb.学号,姓名,课程名,成绩 from xsb,kcb,cjbwhere xsb.学号=cjb.学号 and cjb.课程号=kcb.课程号execute proc_cjcx alte修改查询r--输入学好查询学生的学号,姓名,课程名,成绩alter procedure proc_cjcx@xh char(6)='%' asselect xsb.学号,姓名,课程名,成绩 from xsb,kcb,cjbwhere xsb.学号=cjb.学号 and cjb.课程号=kcb.课程号andxsb.学号 like rtrim(@xh)execute proc_cjcx '081101'--存储过程select * from kcbcreate proc proc_kcbinsert@kch char(3),@kcm char(16),@kkxq tinyint,@xs tinyint,@xftinyint asinsert into kcbvalues(@kch,@kcm,@kkxq,@xs,@xf)proc_kcbinsert '405','server程序设计',4,72,4 查找单科最高成绩select xsb.学号,姓名,课程名,成绩from xsb,cjb,kcbwhere xsb.学号=cjb.学号 and kcb.课程号=cjb.课程号and exists(select *from cjb,(select 课程号,max(成绩)as 最高分 from cjb group by课程号)as tempwhere cjb.课程号=temp.课程号and cjb.成绩=temp.最高分)(相关子查询)select xsb.学号,姓名,课程名,成绩from xsb,cjb,kcb(select 课程号,max(成绩)as 最高分from cjb group by课程号)as tempwhere xsb.学号=cjb.学号 and kcb.课程号=cjb.课程号 and cjb.课程号=temp.课程号 and cjb.成绩=temp.最高分触发器Create trig trig_cheakgrods on cjb For updateAs Declare @..........创建视图创建学生平均成绩的视图create view view_选修课平均成绩as(select xsb.学号,姓名,avg(成绩)as平均成绩 from cjb, xsbwhere xsb.学号=cjb.学号group by xsb.学号,姓名)需要查找该表的结果语句如下:select * from view_选修课平均成绩修改选修课平均成绩视图,显示所有学生的学号,姓名,平均成绩alter view view_选修课平均成绩as(select xsb.学号,姓名,avg(成绩)as平均成绩from xsb left join cjbon xsb.学号=cjb.学号group by xsb.学号,姓名)查询学生的姓名,性别,平均成绩select xsb.学号,xsb.姓名,性别,平均成绩from xsb, view_选修课平均成绩where xsb.学号=view_选修课平均成绩.学号更新选修课成绩表视图update view_选修课平均成绩 set平均成绩=80 where 姓名='王林'删除选修课平均成绩视图、drop view view_选修课平均成绩插入insert into xsb(学号,姓名)values('100511','张四')--备份数据库backup database Pxscjto disk='E:1PxscjDiff.bak'with differentialinsert into xsb(学号,姓名)values('100512','李四')--备份数据库日志文件 backup log Pxscjto disk='E:1Pxscjlog.bak'use masterdrop database Pxscjuse Pxscjselect * from xsb--用语句还原数据库 restore database Pxscj from disk='E:1PxscjDiff.bak'--还原第三次备份的数据库 restore database Pxscj fromdisk='c:ProgramFilesMicrosoftServerMSSQL.1MSSQLBackupPxscj.bak' with norecovery select * from xsb--还原第三次备份的日志文件 restore log Pxscjfrom disk='E:1Pxscjlog.bak'--差异备份backup database Pxscjto disk='E:SQL-serverPxscjDiff.bak' with differentialinsert xsb(学号,姓名)values('100512','王五')backup log Pxscjto disk='E:SQL-serverPxscjlog.bak'--删除Pxscj use masterdrop database PxscjSQL第二篇:高等数学复习提要高等数学复习提纲第一章函数与极限复习重点:1、求极限1)四则运算法则注意:四则运算法则适用的函数个数是有限个;四则运算法则的条件是充分条件有理分式函数求极限公式:⎧a0mm-1 xxxam⎪ba+a+Λ+amm-101m-1n+nnn a0x+a1x+Λ+am-1x+am⎪0xxxx=lim=⎨0limnn-1∞bxn+bxn-1+Λ+bx+bx→∞x→bxxxn01n-1n⎪∞b+b+Λ+b+01n-1nn nn ⎪xxxx⎩2)两个重要极限n=mm<nm>nlimsinxsin0=1()x→0x01x101lim(1+x)=lim(1+)x=e ((1+0))x→0x→∞x3)两个准则准则一:若(1)yn≤xn≤zn∀n∈N则{xn}有极限,且limxn=an→∞(2)limyn=limzn=an→∞n→∞准则二:单调有界数列必有极限单调递增有上界的数列其极限为最小的上界(上确界)单调递减有下界的数列其极限为最大的下界(下确界)4)无穷小量a.无穷小量的定义,注意其是变量,谈及无穷小量时一定要注明自变量的变化趋势。
SQL复习资料整理SQL(Structured Query Language)结构化查询语言,是一种专门用于管理和操作关系型数据库的编程语言。
在数据库领域中,SQL可以用来存储、修改、删除和检索关系型数据库中的数据。
因此,学习和掌握SQL是非常重要的。
本文将为您整理一些SQL复习资料,帮助您更好地学习和掌握SQL语言。
SQL基础知识在学习SQL之前,您应该首先了解SQL的基础知识,包括以下几个方面:1.SQL的历史和发展2.SQL的标准化3.关系型数据库概念4.SQL的核心语句和数据类型SQL核心语句SQL的核心语句包括数据查询语句(SELECT)、数据添加语句(INSERT)、数据更新语句(UPDATE)、数据删除语句(DELETE)。
以下是每个语句的基本用法:SELECT语句SELECT语句用于从表中检索数据。
它的基本语法如下:SELECT column1, column2, ... FROM table_name;你还可以在SELECT语句中使用WHERE子句来过滤检索结果,如下所示:SELECT column1, column2, ... FROM table_name WHERE condition;其中,condition是一个条件表达式,用于过滤检索结果。
INSERT语句INSERT语句用于将数据添加到表中。
它的基本语法如下:INSERT INTO table_name (column1, column2, ...) VALUES (value1, value 2, ...);其中,column1、column2是表的列名,value1、value2是要插入的值。
UPDATE语句UPDATE语句用于更新表中的数据。
它的基本语法如下:UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;其中,condition是要更新的数据所匹配的条件。
SQL应用培训资料目录:1、Select语句基础(基本语法、单表查询、分组查询)2、Select语句高级应用(多表查询、子查询、嵌套查询、集合操作、用SQL创建SQL)3、DML语句(Insert、Update、Delete)4、DDL语句(Create、Alter、Drop)5、DCL语句(Grant、Revoke)章节内容:1.Select语句基础(基本语法、单表查询、分组查询)SELECT语句的功能:1.1select语句的基本语法和基本运算符:SELECT column1,column2.、、(distinct,expression,alias,||,as)/*指定提取的列FROM table1,table2、、/*指定表提取WHERE条件设置:/*设置条件范围GROUP BY/*分组HAVING/*设置分组条件ORDER BY ASC/DESC/*设置排序1.1.1各种运算符及运算等级:(算术运算符,连接运算符,关系运算符,其他运算符,逻辑表达式)1、(),+,-,*,/数字和日期数据可以使用进行计算2、||(=concat)连接运算符3、=,>,>=,<,<=关系运算符4、IS[NOT]NULL,LIKE,[NOT]IN其他运算符5、[NOT]BETWEEN AND其他运算符6、NOT逻辑表达式7、AND逻辑表达式8、OR逻辑表达式注释:①NULL值定义NULL值是未赋值的未知数NULL值是与零或空串不同的NULL值运算算术表达式中含有NULL值,表达式的计算结果为NULL(NULL值传播)查找NULL使用IS NULL字句②使用别名表示表或列(AS)利用表别名可以进行自查询(多个别名)和方便程序编写,利用列别名可以简化列显示标题③使用连接操作(||)可以归并多列显示为一列④重复行默认的查询结果包括重复行要去掉重复行需在SELECT语句中使用DISTINCT关键字⑤字符型与日期型字符型与日期型的值要用单引号标识字符型值大小写敏感,日期型值格式敏感⑥使用LIKE子句使用LIKE子句执行一个含有通配符的模糊查找。
《sql基础培训课件》xx年xx月xx日•sql概述•sql基础语法•sql高级技术•sql实际应用目•sql与其他数据库系统的比较•sql的前景展望录01 sql概述什么是sqlSQL用于创建、修改、删除和查询数据库中的数据。
SQL语句通常由数据定义、数据操作和事务控制三个部分组成。
SQL(Structured QueryLanguage)是一种用于管理关系型数据库系统的编程语言。
定义数据库、表、视图、索引等数据库对象。
sql的主要功能数据定义插入、更新、删除、选择(SELECT)数据库中的数据。
数据操作开始事务、提交事务、回滚事务等。
事务控制SQL由IBM的Relational Database System (RDS)开发随着数据库技术的不断发展,SQL语言也得到不断扩展和完善,先后出现了SQL-89、SQL-92、SQL-99等不同版本。
2-3个列举SQL不同版本的主要特点和新增功能。
1979年,RDS成为关系型数据库系统的标准,并被ANSI采纳为标准(ANSI SQL-86)。
sql的发展历程02 sql基础语法创建数据库```CREATE DATABASE database_name;```sql 总结词:建立数据库详细描述:通过SQL语句创建新的数据库,用于存储和管理数据。
常见的创建数据库语句示例如下创建表•总结词:定义数据结构•详细描述:在数据库中创建表,定义数据的基本结构和属性。
通过定义表结构,可以规范数据的要求和标准。
常见的创建表语句示例如下•CREATE TABLE table_name (•column1 datatype,•column2 datatype,•column3 datatype,•);•· 总结词:定义数据结构•· 详细描述:在数据库中创建表,定义数据的基本结构和属性。
通过定义表结构,可以规范数据的要求和标准。
常见的创建表语句示例如下•· ```sql•· CREATE TABLE table_name (插入数据总结词:数据录入详细描述:向数据库表中插入新的数据记录。
SQL期末复习大纲第一章数据库系统基础数据库分类:目前常用的数据库有层次数据库,网状数据库和关系数据库。
其中层次数据库和网状数据库统称非关系数据库。
1层次数据库满足的条件:(1)有且仅有一个节点无双亲,这个节点称为“根节点”。
(2)其他节点有且仅有一个双亲。
2网状数据库满足的条件:(1)允许一个以上的节点无双亲。
(2)一个节点可以有多于一个的双亲。
3关系数据库:关系模型用二维表格结构表示实体集,用键来表示实体间联系。
这个二维表在关系数据库中就称为关系。
第三章SQL Server服务器的安装和配置SQL Server2000的主要工具是:SQL服务管理器,SQL企业管理器,SQL查询分析器,SQL 联机帮助。
SQL服务管理器:是一个图形界面的服务管理工具,用于管理SQL Server组件的启动,暂停和停止服务。
SQL Server企业管理器:是个图像界面的综合管理工具,是SQL Server2000的主要管理工具,它提供了一个管理控制台的用户界面,具有管理SQL Server服务器组合注册配置服务器,管理SQL Server登录和用户,数据库以及数据表,视图,存储过程,触发器,索引等功能,定义并执行所有SQL Server管理任务,唤醒调用为SQL Server定义的各种向导等功能。
SQL查询分析器:可以编写调试T-SQL语句或脚本实现对数据库,表等项目的创建,修改以及对数据的查询,增加,修改,删除等功能。
SQL 联机帮助:SQL server联机帮助是一个非常重要的工具,可以查询准确权威的的技能,知识点。
为什么要在企业管理器中注册服务器?SQL server企业管理器是用来管理数据库的客户端程序,使用之前需要注册服务器,以便对要管理的本地或远程服务器进行管理(即:对数据库的创建,修改删除,对数据添加,修改,删除)。
SQL server2000的名称和版本:企业版:作为数据库服务器使用标准版:作为小工作组或部门数据库服务器使用个人版:供移动用户使用开发版:供程序员用来开发将SQL server2000用作数据存储的应用程序第四章T-SQL语言基础SQL:是结构化查询语言,Transact-SQL(T-SQL):是由国际标准化组织(ISO)和美国国家标准学会发布的SQL,标准中定义的语言的扩展。
《sql基础培训课件》xx年xx月xx日CATALOGUE目录•sql简介•sql基本语法•sql高级语法•sql语言特点及注意事项•sql开发工具和环境•sql基础培训案例展示01 sql简介SQL(Structured Query Language)是一种用于管理关系型数据库系统的编程语言,用于进行数据操作、查询和管理。
SQL是一种声明性语言,用户通过指定需要完成的任务,而不是实现任务的步骤,来描述对数据库的操作。
sql是什么SQL的起源可以追溯到1970年代,当时IBM的科学家们为了管理大型数据库而开发了关系型数据库模型(Relational Database Model),并使用SQL语言进行操作。
随着计算机技术的不断发展和数据库应用的普及,SQL语言逐渐成为关系型数据库系统的标准语言,被广泛应用于各种数据库系统。
sql的起源和发展SQL的应用范围非常广泛,包括以下几个方面数据库管理和维护:使用SQL语句进行数据的定义、修改、查询、更新等操作,以及数据库的备份、恢复和性能优化等。
数据分析和报表生成:使用SQL查询和聚合函数进行数据分析,生成报表和图表,帮助企业做出决策。
数据挖掘和预测分析:使用SQL和数据挖掘技术,从大量数据中发现潜在规律和趋势,进行预测和决策。
应用程序开发:在应用程序开发中,使用SQL进行数据的存储、检索和管理,以实现应用程序的数据访问功能。
sql的应用范围02 sql基本语法创建表•总结词:创建表是SQL中重要的数据库操作之一,用于在数据库中创建新的表结构。
•详细描述:在SQL中,使用CREATE TABLE语句来创建表。
以下是创建表的基本语法•CREATE TABLE table_name (•column1 datatype,•column2 datatype,•column3 datatype,•....•);•在上述语法中,table_name是要创建的表的名称,column1, column2, column3等是表的列名,datatype指定了列的数据类型。
1.数据独立性高•物理独立性–指用户的应用程序与存储在磁盘上的数据库中数据是相互独立的。
当数据的物理存储改变了,应用程序不用改变。
•逻辑独立性–指用户的应用程序与数据库的逻辑结构是相互独立的。
数据的逻辑结构改变了,用户程序也可以不变。
•数据独立性是由DBMS的二级映像功能来保证的2.三级模式•外模式•模式•内模式•保证数据库的数据独立性3.模式•模式(也称逻辑模式、数据库模式、概念模式)–数据库中全体数据的逻辑结构的描述–所有用户的公共数据视图,综合了所有用户的需求•一个数据库只有一个模式•模式的地位:是数据库系统模式结构的中间层–与数据的物理存储细节和硬件环境无关–与具体的应用程序、开发工具及高级程序设计语言无关•模式的定义–数据的逻辑结构(数据项的名字、类型、取值范围等)–数据之间的联系–有关数据的安全性、完整性要求4.外模式•外模式(也称子模式或用户模式)–数据库用户(包括应用程序员和最终用户)使用的局部数据的逻辑结构的描述–数据库用户的数据视图,是与某一应用有关的数据的逻辑表示•外模式的地位:介于模式与应用之间–模式与外模式的关系:一对多•外模式通常是模式的子集•一个数据库可以有多个外模式。
反映了不同的用户的应用需求、看待数据的方式、对数据保密的要求•对模式中同一数据,在外模式中的结构、类型、长度、保密级别等都可以不同–外模式与应用的关系:一对多•同一外模式也可以为某一用户的多个应用系统所使用,•但一个应用程序只能使用一个外模式。
•外模式的用途保证数据库安全性的一个有力措施。
每个用户只能看见和访问所对应的外模式中的数据5.内模式•内模式(也称存储模式)–是数据物理结构和存储方式的描述–是数据在数据库内部的表示方式•记录的存储方式•索引的组织方式•数据是否压缩存储•数据是否加密•一个数据库只有一个内模式6.三级模式与二级映象•三级模式是对数据的三个抽象级别•二级映象在DBMS内部实现这三个抽象层次的联系和转换7.外模式/模式映象•定义外模式与模式之间的对应关系•每一个外模式都对应一个外模式/模式映象•映象定义通常包含在各自外模式的描述中8.外模式/模式映象的用途·保证数据的逻辑独立性–当模式改变时,数据库管理员修改有关的外模式/模式映象,使外模式保持不变–应用程序是依据数据的外模式编写的,从而应用程序不必修改,保证了数据与程序的逻辑独立性,简称数据的逻辑独立性。
9.模式/内模式映象•模式/内模式映象定义了数据全局逻辑结构与存储结构之间的对应关系。
例如,说明逻辑记录和字段在内部是如何表示的•数据库中模式/内模式映象是唯一的•该映象定义通常包含在模式描述中10.模式/内模式映象的用途·保证数据的物理独立性–当数据库的存储结构改变了(例如选用了另一种存储结构),数据库管理员修改模式/内模式映象,使模式保持不变–应用程序不受影响。
保证了数据与程序的物理独立性,简称数据的物理独立性。
11.关系的键(码)•候选码: 若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码12.主键•如果一个关系中有多个候选键,可以从中选择一个作为查询、插入或删除元组的操作变量,被选用的候选键称为主关系键(Primary Key),或简称为主键、主码、关系键、关键字。
–例如,假设在学生关系中没有重名的学生,则“学号”和“姓名”都可作为学生关系的候选键。
如果选定“学号”作为数据操作的依据,则“学号”为主关系键。
•在关系模式中表示主键–学生(学号,姓名,性别,年龄,系别)13.主属性与非码属性•主属性:包含在候选码中的的各属性称为主属性。
•非码属性:不包含在任何候选码中的属性称为非码属性。
–在最简单的情况下,一个候选码只包含一个属性,如学生关系中的“学号”,教师关系中的“教师号”。
–最极端情况,全码关系中所有属性都是主属性14.存储过程·使用CREATE PROCEDURE语句创建存储过程·使用EXECUTE 语句实现存储过程·语法:CREATE PROCEDURE procedure_name[{@parameter data_type} [OUTPUT]]ASsql_statement [...n]15.触发器:·使用CREATE TRIGGER语句来创建触发器·语法:CREATE TRIGGER trigger_nameON { OBJECT NAME }{ FOR | AFTER | INSTEAD OF } { event_type [,...n ] |DDL_DATABASE_LEVEL_EVENTS }{ AS{ sql_statement [ ...n ] }}16.关系模型的三类完整性规则的含义·实体完整性规则:主键属性不能为空·参照完整性规则:外键值必须参照主键的值,或者为空·用户定义完整性规则:用户自己定义17.为什么说数据库的三级模式结构和两级映射功能是数据库系统中的数据的逻辑独立性和物理独立性的重要保证?数据库系统的三级模式和两级映射功能是数据库系统具有高度的数据独立性。
这种。
对DBMS的应用系统开发具有重大意义。
这是因为数据与应用程序之间的独立性,使得数据的定义和描述可以从应用程序中分离出去。
另外由于数据存取有DBMS管理,用户不必考虑存取路径等细节,从而简化了应用程序的编制,大大减少了应用程序的维护和修改。
18.DBMS的主要功能。
1.数据库定义;2.数据存取3;数据库的组织存储和管理;4.数据库的运行管理;5.数据库的建立和维护;6.通信和数据转换19.事务:——保证数据完整性·定义:数据库的一些操作的集合通常为一个独立单元,这种具有独立性的逻辑单元称为事务。
·将一组语句作为一个单元执行·必须拥有称为ACID的四个属性—原子性:事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。
—一致性:事务在完成时,必须使所有的数据都保持一致状态。
—隔离性:一个事务的执行不会被另一个事务干扰—持久性:事务完成之后,它对于系统的影响是永久性的。
该修改即使出现系统故障也将一直保持。
20.事务并发控制•并发操作:在多用户共享系统中,多个用户同时存取同一数据的情形称为并发操作。
•并发操作的优点:–增加了处理器和磁盘的可用性, 加大事务吞吐量(throughput):一个事务使用CPU时,另外一个事务读写磁盘–降低平均事务响应时间:短事务不需要等待长事务•并发操作可能带来的问题:(1)破坏数据库的一致性(2)破坏事务的隔离性21.三类数据不一致性⏹并发操作带来的三类数据不一致性:1. 更新丢失T1、T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果。
2.不可重读T1读数据后,T2执行更新操作,使T1无法再现前一次读取结果。
3.脏读T1修改数据并写回磁盘,T2读取同一数据后,T1被撤销即数据恢复原值,T2读的数据与DB中的不一致,称“脏”数据。
⏹不可重读包括三种情况:(1) 某事务两次读同一数据时,得到的值不同。
(2)某事务再次按相同条件读取数据时,发现记录丢失。
(3)某事务再次按相同条件读取数据时,发现多了记录22.封锁协议·在运用X锁和S锁这两种基本封锁,对数据对象加锁时,还需要约定一些规则,例如何时申请X 锁或S锁、持锁时间、何时释放等。
称这些规则为封锁协议•对封锁方式规定不同的规则,就形成了各种不同的封锁协议。
•对并发操作的不正确调度可能会带来丢失修改、不可重复读和读“脏”数据等不一致性问题,三级封锁协议分别在不同程度上解决了这一问题。
•为并发操作的正确调度提供一定的保证。
•不同级别的封锁协议达到的系统一致性级别是不同的。
•一级封锁协议事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。
事务结束包括正常结束和非正常结束。
•一级封锁协议可防止丢失修改,并保证事务T是可恢复的。
•在一级封锁协议中,如果仅仅是读数据不对其进行修改,是不需要加锁的,所以它不能保证可重复读和不读“脏”数据。
•二级封锁协议•一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。
•二级封锁协议除防止了丢失修改,还可进一步防止读“脏”数据。
•在二级封锁协议中,由于读完数据后即可释放S锁,所以它不能保证可重复读。
•三级封锁协议•一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。
•三级封锁协议除防止了丢失修改和不读“脏”数据外,还进一步防止了不可重复读。
•上述三级协议的主要区别在于什么操作需要申请封锁,以及何时释放锁(即持锁时间)。
23.死锁:在两个或多个任务中,如果每个任务锁定了其他任务试图锁定的资源,此时会造成这些任务永久阻塞,从而出现死锁。