【文档说明】数据库概论-关系数据库标准语言课件.ppt,共(182)页,612.500 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-92432.html
以下为本文档部分文字说明:
结构化查询语言SQL(StructuredQueryLanguage)是一种介于关系代数与关系演算之间的语言,其功能包括查询、操纵、定义和控制四个方面,是一个通用的、功能极强的关系数据库语言,目前已成为关系数据库的标准语言。第四章关系数据库标准语言SQL的历史SQL语言最初是由IBM公司1974
年在原型的关系数据库管理系统SYSTEMR上开发的语言。1979年,ORACLE公司首家推出商业上可执行的SQL。如今,SQL成为国际上标准的数据库存取语言。SQL的标准美国国家标准学会(ANSI)将SQL作为关系数据库管理系统的标准语言,并且定义在ANSIx3.125---1989”具
有完整性增强特征的数据库语言SQL”文档中,即ANSISQL89。1986.10ISOSQL861987.6-1989.4ISOSQL891992年ISOSQL92SQL22000年ISOSQL99SQL32003年SQL2003,包含了XML相关内容2006年SQL2003,定义了SQL与
XML(包含XQuery)的关联应用4.1SQL概述及其特点1.SQL概述按其功能分为四大类名称动词功能数据查询SELECT查询数据数据定义CREATE,DROP,ALTER定义、撤消和修改数据模式数据操纵INSERT,UP
DATE,DELETE增、删、改数据数据控制GRANT,REVOKE数据访问权限的控制其作用是建立和使用数据库。SQL的特点①综合统一的一体化的特点②高度非过程化③面向集合的操作方式,语言功能强④统一的语法结构,两种使用方式⑤语言简洁,易
学易用⑥提供数据控制功能⑦提供有数据视图的数据结构⑧所有关系数据库的公共语言2.SQL数据库的体系结构按支持SQL的数据库管理系统可称其SQL数据库,其结构基本上采用三级结构,但所用术语与传统关系模型的术语有些不同。SQL传统的RDB基本表(Bas
eTable)关系模式存储文件(BaseTable)内模式(存储模式)视图(View)外模式行(Row)/列(Column)元组/属性用户1用户2用户3用户4视图3视图1视图2基本表1基本表2基本表3基本表4存储文件1存储文件1SQL用户视图基本表存储文件外模式模式内模式表说明
:一个SQL数据库是表的汇集,它用一个或若干个SQL模式定义;基本表都是一个实际存在的关系,由行集构成,一行是列的序列,每列对应一个数据项;一个表或者是一个基本表,或者是一个视图;每个存储文件与外部存储上一个物理文件对应;用户可以用SQL语句对视图和基
本表进行查询操作;SQL用户可以应用程序,也可以是终端用户。格式:SELECT[ALL|DISTINCT]<目标列表达式>[,<目标列表达式>,···]FROM<基本表名或视图名>[,<基本表名或视图名
>,···][WHERE<条件表达式>][GROUPBY<列名1>[HAVING<条件表达式>]][ORDERBY<列名2>[ASC|DESC]];描述:根据WHERE子句的条件表达式,从FROM子句指定的基本表或视图中找
出满足条件的元组,再按SELECT子句中的目标列表达式,选出元组中的属性值形成结果表。如果有GROUPBY子句则将结果按<列名1>的值进行分组,该属性列相等的元组为一个组。通常会在每组中作用集函数。如果GROUP子句带有HAVING短语
,则只有满足指定条件的组才予输出。如果有ORDERBY子句,则结果表还要按<列名2>的值升序或降序排列。4.2SQL查询1.选择表中的若干列选择表中的指定列;选择表中的所有列;结果列的显示顺序;使
用列表达式;SELECT中的<目标列表达式>可以是表中的列,也可以是表达式,包括算术表达式、字符串常数、函数等。(字符串用单引号定界)。使用的列的别名:列名[AS]列的别名4.2.1单表查询仅涉及一个表的查询例1:求全体学生的学号、姓名。例2:
求全体学生的详细信息。例3:求学生学号和学生出生的年份(经过计算的值)。例4:求学生的学号和出生年份,显示时使用别名Student_No和Birth_Day。2.选择表中的若干元组①消除取值重复行查找相异的行:在SELECT语句中使用关键字DISTINCT原本不完全相
同的元组,经过向某些列投影操作后,可能变成相同的行了。如果想去掉结果表中的重复行,必须指定DISTINCT短语,没有指定,则使用用缺省值ALL,意为保留结果表中所有的行。例5:求选修了课程的学生学号。②查询满足条件的元组可以
通过WHERE子句来实现。WHERE常用的查询条件如下表所示。查询条件谓词比较=,>,<,>=,<=,!=,<>,!>,!<;NOT+上述比较运算符确定范围BETWEENAND,NOTBETWEENAND确定集合IN,NOTIN字符匹配LIKE,NOTLIKE空值ISNULL,ISNOTNU
LL多重条件AND,OR,NOT大小比较条件表达式的形式如下:<属性列>比较运算符{列名|常量|表达式}其中:字符串常量和日期常量要用一对单引号括起来。例6:求年龄大于等于20岁的学生姓名和年龄。BETWEEN确定范围谓词BETWEENAND与NOTBETWEENAND的
一般格式为:<属性列>[NOT]BETWEEN<a>AND<b>查询属性值在(或不在)指定范围内的元组其中:<a>为范围的下限(低值),<b>为范围的上限(高值)。选出的元组包括边界<a>与<b>,要求a<=b,等价于a=<属性列<=b。例7:求
年龄在20岁与22岁之间(包括20岁和22岁)的学生学号和年龄。例8:求年龄不在20岁与22岁之间的学生学号和年龄。IN确定集合谓词IN可以用来查找属性值属于指定集合的元组。<属性列>[NOT]IN<值表>谓词IN实际上是一系列谓词‘OR’的缩写
。所起的作用就是检查列值是否等于它后面括弧内的一组值中某一个。如果等于其中某一个值,则其结果为‘真’,否则其结果为‘假’。NOTIN表示与IN完全相反的含义。例9:求在下列各系的学生:数学系(‘MA’)、计算机科学系(‘C
S’)。例10:求不是数学系、计算机科学系的学生的信息。LIKE匹配查询或模糊查询谓词LIKE的一般格式为:<属性列>[NOT]LIKE‘<匹配串>’查询指定的属性列与<匹配串>相匹配的元组。注释:<匹配串>可以是一个完整的字符串,也可以含有通配符的字符串。通配符包括:%(百分号)
:代表任意长(长度为0)字符串。_(下划线):代表任意单个字符所有其它字符:只代表自己例11:求姓名是以字母‘马’打头的学生信息。例12:求姓名中含有字母‘马’的学生信息。例13:求姓名长度至少是三个字符且倒数第三个字符必须是字母‘马’的学生信息。使用换码字符将通配符转义为普通字符例14:查询以
"DB_"开头,且倒数第3个字符为i的课程的详细情况。ESCAPE'\'表示“\”为换码字符NULL涉及空值查询NULL表示空值。空值是一种不存在的或者不知道、不可用的数据。列名[NOT]ISNULL这里的IS不能用=替代。数据库表的行中,未被赋值的字段
自动被认为是空值。0长度的字符串自动解释为空值。空值的赋值:把连续两个单引号赋值给它;把空值常量NULL赋值给它。例15:求缺少学习成绩的学生的学号和课程号。(查询含有空值的行)。SELECTSNO,CNOFROMSCOREW
HEREGRADEISNULL;GRADE=NULL;多重条件当查询条件涉及到多个时,可将若干条件通过逻辑运算符构成一个更复杂的条件进行查询。可以使用三种逻辑运算符:NOT逻辑非;AND逻辑与;OR逻辑或运算符的优先顺序如下:=!=NOT=<>>>=<<=[NOT]
BETWEEN…AND[NOT]IN[NOT]LIKEIS[NOT]NULLNOTANDOR用户可以用括号()改变优先级。例16:求计算机系(‘CS’)或数学系(‘MA’),年龄大于20岁的学生姓名、系和年龄。例17:求选修课程(‘001’)或
课程(‘002’),成绩在85和95之间,学号为96xxx的学生的学号、课程与成绩。3.控制行的显示顺序ORDERBY子句中,列名表2指出在显示查询结果时,数据按指定的列排序。ASC升序排序(默认值);DESC降序排序可以选择多列进行排序;
ORDERBY子句中可以使用表达式;ORDERBY子句必须是放在SELECT命令中影响选取行的所有子句的后面;如果排序列含有空值时,DESC排序时,含有空值的行位于最前面;ASC排序时,含有空值的行位于最后面。例18:求选修课程(‘001’)或课
程(‘002’)学生的学号、课程号与成绩,结果按课程号升序、成绩降序排序。4.组函数SQL提供的五种组函数COUNT()计算所选数据(记录)的个数SUM()计算某一数值列的和AVG()计算某一数值列的平均值MAX()求
(字符、日期、数值列)的最大值MIN()求(字符、日期、数值列)的最小值例19:求学生总人数。例20:求选修了课程的学生人数。例21:求计算机系学生的平均年龄。例22:求选修了课程‘005’的最高、最低与平均成绩。5.分组查询实现行的分
组和分组统计。在对表格进行操作时,要求将记录按某个或某几个字段上相同的值分成组,然后再对组进行相应的操作,称作分组查询。SNOSNAMESDEPTSCLASSSAGE96001丁一CS011996002王二CS
012096003张三CS012196004李四CS021996005刘五CS022096006赵六CS042296007马蓉MA012096008司马明MA011996009张胜利MA012096010李力CI0222SSDEPTSCLASSS
AGECS0120CS0219.5CS0422MA0119.3CI0222分组后的平均年龄按系、班级分组计算学生的平均年龄GROUPBY子句分组查询是通过GROUPBY子句实现的。将查询结果表按某一列或多列值分组,值相等的为一组;当对多列进行分组时,所有的组函数统计都是对最后的分组列进
行的;对查询的结果分组的目的是为了细化统计函数的作用对象;如果未对查询分组,组函数将作用于整个查询结果;如果分组后组函数将作用于每一个组,即每一个分组都有一个组函数;在包含GROUPBY子句的查询语句中,SELECT子句后面的所有字段列表
(除组函数外),均应该包含在GROUPBY子句中,即所选项与分组的一致性。例23:求各门课程的平均成绩与总成绩。例24:求各系中各个班级的人数及平均年龄。例25(?):SELECTSNAME,SDEPT,COUNT(*)FROMSTUDENTGROU
PBYSDEPT;例26(?):SELECTSAGEFROMSTUDENTGROUPBYSNO;HAVING子句如果分组后还要按一定的条件对这些分组进行筛选,只输出满足条件的组,则应该使用HAVING短语指定筛选条件。HAVING子句用来选
择满足条件的分组。WHERE与HAVING的区别:作用对象不同WHERE作用于基本表或视图,从中选择满足条件的元组;HAVING短语作用于组,从中选择满足条件的组。例27:求学生人数不足百人的系号及其相应
学生人数的。例28:求各系中年龄大于20岁的除1班之外的各班级人数。SELECT<列名>FROM<表名>WHERE<条件>GROUPBY<列名>HAVING<条件>ORDERBY<列名>投影连接选取分组去组排序小结连接查
询是通过各表中相应列的公共数据把一个表中的某些行与另一个表中的某些行连接起来。表之间的联系是通过表的字段值来体现的,这种字段通常称为连接字段。连接字段就是在两个表中都包含的一个公共字段。连接操作的目的就是通过加在连接字段的条件将多个表连接起来。4.2.2连
接查询涉及两个以上的表1.无条件连接在连接操作中,如果不用连接条件,则称为无条件连接。无条件连接将产生大量的行,当n1,n2,…,nn这n个表进行连接时,产生的记录是n1*n2*…*nn。例:SELECTSNO,SNAME,CNO,GR
ADEFROMSTUDENT,GRADE;不带WHERE子句的连接语句是笛卡儿乘积。2.等值连接与非等值连接连接条件的一般格式是:[<表名1>.]<列名1><比较运算符>[<表名2>.]<列名2>其中:比较运算符主要有:=、>、<、>=、<=、!=<表名
1>.<列名1>:指明是哪个表的哪个列限定符连接查询一定要带上连接条件WHERE子句。[注意]:连接条件中的各连接字段类型必须是可比较的(自然连接)。[执行过程]:首先在表1中找到第一个元组,然后从头开始扫描表2,逐一查找
满足连接条件的元组,找到后就将表1中的第1个元组与该元组拼接形成结果表中的一个元组。表2全部找完后,再找表1中的第2个元组,然后再从头扫描表2,逐一查找满足连接条件的元组,找到后就将表1中的第2个元组与该元组拼接形成结果表中的一个元组。重复执行,直到表1中的全部元组都处理完毕为止。
例29:求学生以及其选修课程的情况。SELECTSTUDENT.*,SCORE.*FROMSTUDENT,SCOREWHERESTUDENT.SNO=SCORE.SNO;连接条件SNO:连接字段例30:查询学生信
息以及其选修课程的课程号和成绩,但查询结果中只能有一个SNO字段。例31:求选修课程‘001’且成绩在70分以下或成绩在90分以上的学生的姓名,课程名称和成绩。[说明]:在SELECT语句的FROM子句中规定连接的表
,在WHERE子句中规定连接的列和连接的方式。WHERE子句既可用来规定(行)选择条件,又可用来规定连接条件(连接列和连接方式)。行选择条件和连接条件这两种条件的逻辑表达式用AND连接。3.表的别名一般格式是:表名
表的别名表的别名有如下用途简化输入;表与自身连接;在相关嵌套查询中。例32:求选修了课程的学生的学号、姓名、课程号和成绩。4.自身连接自身连接不仅可以作用在两个不同的表上,而且同一个表可进行自身连接。需要给表起别名以示区别由于所有属性名都是同名属性,因此必须使用别名前缀[执行
过程]:可以把一个看成两个副本,即两个相同的表,然后再对这两个表在连接字段上进行连接。表与自身的连接必须使用表的别名,若在FROM子句中用两个不同的别名对应于同一个表是时,就可以象连接两个分开的表一样来把表自身连接起来。例33:求年龄大于黎明的所有学生的姓名、系和年龄。5.外部连接一般说来,如果
某一表中所选取的一行不能与另一个表中的任何一行相连接(即不满足条件)时,则在查询结果中此行不再出现。外部连接则不管条件是否满足,都选取相应的数据。不仅返回两个或两个以上的表中能够直接匹配的行,还返回一个表中无法从其它表中找到直接匹配的行。CNOCNAM
ECTIME001高等代数144002程序设计72003微机原理64004数据结构72005编译原理56006操作系统46007计算方法32008数据库64CSNOCNOGRADE9600100190960010039096001004909600100595960
02001959600200381960020068196003004959600300581960030069596004003959600400570960050058196005006959600500795
9600600490SC查询选修002、003课程的学号、课程名称与成绩。002课程存在吗?例34:求选修课程‘002’和‘003’的学生的学号、课程号、课程名与成绩。例35:用外部连接求选修课程‘002’和‘003’的学生的学号、课程号、课程名与成绩。外部连接实际上是
假设对一个表添加了一个各列全为空值的额外行。若另一个表中行不能与该表中任一行连接,则与该表的额外行连接,以保证另一个表中各行的信息在查询结果中表示出来。Oracle中,外连接有两种表现形式:某个连接列后面加一个外部连接操作符(+);在FROM子句中采用如下
表现形式:<表1>LEFTOUTERJOIN<表2>ON(连接条件)<表1>RIGHTOUTERJOIN<表2>ON(连接条件)<表1>FULLOUTERJOIN<表2>ON(连接条件)例如:SELECTSno,Course.Cno,Cname,S
coreFROMCourseLEFTOUTERJOINSCoreON(Course.Cno=SCore.Cno)WHERECourse.CnoIn('002','003');SELECTSno,Course.Cno,Cname,ScoreFROMCourse,SCoreWHERECours
e.Cno=SCore.Cno(+)ANDCourse.CnoIn('002','003');6.复合连接条件一般说来,WHERE子句中可以有多个连接条件,称为复合条件连接。例36:求选修课程‘001’且成绩在85分以上的所有学生。概念查询块:一个select-from-wher
e语句称为一个查询块。嵌套查询:将一个查询块嵌套在另一个查询块的where子句或having子句中的查询。子查询的结果用于建立主查询的查找条件。处理步骤一般由里向外进行处理。4.2.3嵌套查询SELECTSnameFROMStudentWHE
RESnoIN外层查询/父查询内层查询/子查询(SELECTSnoFROMSCWHERECno='002');例37:求选修了‘002’课程的学生姓名。(选修了课程号为‘002’课程的学生的学号);注意子查询必须用括号括住。子查询可以
有多层,所存取的表可以是父查询没有存取的表。当子查询所返回的不是一个值而是一个集合时,就不能使用简单的比较运算了。必须根据语义在子查询前加上ANY或者ALL;或者使用集合操作符IN及NOT;子查询中不能有O
RDERBY子句。子查询选出的记录不显示。1.返回单值的子查询子查询返回的结果是一个值时,可以使用比较运算符(=,>,<,>=,<=,!=)将父查询和子查询连接起来。例38:求与王平年龄相同人的姓名与系。2.返回一组
值的子查询子查询返回的结果不是一个值而是而是一个集合即多个值,就不能简单地使用比较运算符,而必须使用多值比较运算符,以指明在WHERE子句中应如何使用这些返回值。多值比较运算符运算符含义[NOT]IN字段的值是否在所选集合中[NOT]ANY是否将字
段的值与子查询返回结果中的一个值进行比较(ANY:满足一个条件为真)[NOT]ALL是否将所选的值与集合中所有的值进行比较[NOT]EXISTSEXISTS表示一个子查询至少返回一行时条件成立,NOTEXISTS表示一个子查询不返回任何行时
条件成立。多值比较运算符需要配合使用比较运算符>ANY大于子查询结果中的某个值>ALL大于子查询结果中的所有值<ANY小于子查询结果中的某个值<ALL小于子查询结果中的所有值>=ANY大于等于子查询结果中的某个值>=ALL大于等于
子查询结果中的所有值<=ANY小于等于子查询结果中的某个值<=ALL小于等于子查询结果中的所有值=ANY等于子查询结果中的某个值=ALL等于子查询结果中的所有值(通常没有实际意义)!=(或<>)ANY不等于子查询结果中的
某个值!=(或<>)ALL不等于子查询结果中的任何一个值例39:求其他系中比数学系中某一学生年龄小的学生姓名和系。(ANY)SELECTSname,SageFROMStudentWHERESage<ANY(SELECTSageFROMStudentWHERESdept=‘
MA')ANDSdept<>‘MA';/*父查询块中的条件*/用聚集函数实现[例39]SELECTSname,SageFROMStudentWHERESage<(SELECTMAX(Sage)FROMStudentWHE
RESdept=‘MA')ANDSdept<>'MA’;例40:求比数学系中全体学生年龄都大的学生姓名和系。(ALL)ANY(或SOME),ALL谓词与聚集函数、IN谓词的等价转换关系=<>或!=<<=>>=ANYIN--<MAX<=MAX>MIN>=MINALL--NOTIN<MIN<=
MIN>MAX>=MAXEXISTS为存在量词,用来测试子查询是否返回结果;EXISTS表示存在量词,带有EXISTS的子查询不返回任何实际数据,它只得到逻辑值“真”或“假”。其目标列表达式通常都用*,给出列名无实际意义。当子查询的的查询结果集合为非空时,
外层的WHERE子句返回真值,否则返回假值。NOTEXISTS与此相反。含有IN的查询通常可用EXISTS表示,但反过来不一定。3.嵌套查询可以是多层的查询涉及多个关系时,利用嵌套查询逐次求解层次分明,容易理解也容易书写,具有结构化程序设计的特点。嵌套查询的执行效率比连
接查询效率高。例41:求选修了课程名为‘数据结构’的学生的学号和姓名。③最后在Student关系中取出Sno和Sname②然后在SC关系中找出选修了003号课程的学生学号①首先在Course关系中找出“
数据结构”的课程号,为003号SELECTSno,SnameFROMStudentWHERESnoIN(SELECTSnoFROMSCWHERECnoIN(SELECTCnoFROMCourseWHERECname=‘数据结构’));4.返回多列的子查询子查询可以返回多个列。当子查询返
回多列时,关系运算的另一侧也应是多个列,并且这些列的清单必须用括号括起来。子查询返回列的个数及类型必须要与主查询列的个数及类型匹配。例42:求与黎明同系和相同年龄的学生的姓名。5.使用多个子查询(多重子查询)WHE
RE子句中可以包含任何数量的由AND和OR连接的含有子查询的条件。例43:求与黎明同系,或年龄大于李丽的学生的信息。例44:求’计算机系’中与’数学系’中同龄的学生信息(假设不知道系的编号)。设系编码数据库为DEPT(DNO,DNAME,ADDR)。6.
子查询中使用表连接有时,子查询可能需要从每个表中检索数据项,这时可在子查询中使用表连接。例45:求’数学系’中年龄相同的学生姓名和年龄。7.相关子查询例46:查询没有选修任何课程的学生学号和姓名。SELECTSNO,SNAMEFROMSTUDENTSWHERENOTEXISTS(S
ELECT*FROMSCORESCWHERES.SNO=SC.SNO);本例中子查询的查询条件引用了父查询表中的属性值(Student表的SNO值),我们把这类查询称为相关子查询。二者的执行方式不同普通子查询的执行顺序是首先执行子查询,然后把子查询的结果作为父查询的查询条件的值。
普通子查询只执行一次,而父查询所涉及的所有记录行都与其查询结果进行比较以确定查询结果集合。相关子查询的执行顺序是首先选取父查询表中的第一行记录,内部的子查询利用此行中相关的属性值进行查询,然后父查询根据子查询返回的结果判断此行是否满足查询条件。如果满足条件,则把该行放入
父查询的查询结果集合中。重复执行这一过程,直到处理完父查询表中的每一行数据。相关子查询的执行次数是由父查询表的行数决定的。例47:查询所有选修了001号课程的学生姓名。思路分析:本查询涉及Student和Score关系;在Student中依次取
每个元组的Sno值,用此值去检查Score关系;若Score中存在这样的元组,其Sno值等于此Student.Sno值,并且其Cno='001',则取此Student.Sname送入结果关系用嵌套查询SELECTSnameFROMStu
dentWHEREEXISTS(SELECT*FROMScoreWHERESno=Student.SnoANDCno='001');用连接运算SELECTSnameFROMStudent,ScoreSCWHEREStu
dent.Sno=SC.SnoANDSC.Cno='001';例48:查询未选修001课程的学生姓名。SELECTSNAMEFROMSTUDENTSWHERENOTEXISTS(SELECT*FROMSCORE
SCWHERECNO='001'ANDSC.SNO=S.SNO);思考:查询只选修001课程的学生姓名。SELECTSNAMEFROMSTUDENTWHERESNOIN(SELECTSNOFROMSCOREWHERECNO<
>'001');?例49:查询选修全部课程的学生姓名。SELECTSnameFROMStudentWHERENOTEXISTS(SELECT*FROMCourseWHERENOTEXISTS(SELECT*FROMScoreWHER
ESno=Student.SnoANDCno=Course.Cno));例50:查询成绩比所选课程平均成绩高的学生的学号、课程号和成绩。候选课程的平均成绩(SELECTAVG(SCORE)FROMSCOREX2WHEREX1.CNO=X2.CNO)
(该门课程的平均成绩)SELECTSNO,CNO,SCOREFROMSCOREX1WHERESCORE>本例中使用了别名。ORDERBYX1.CNO;例51:查询至少选修了学生96002选修的全部课程的学生号码。解题思路:用逻辑蕴函表达:查询学号为x的学生,对所有的
课程y,只要96002学生选修了课程y,则x也选修了y。形式化表示:用P表示谓词“学生96002选修了课程y”用q表示谓词“学生x选修了课程y”则上述查询为:(y)pq等价变换:(y)pq≡(y((pq))≡(y((p∨q)))≡y(p∧q)
变换后语义:不存在这样的课程y,学生96002选修了y,而学生x没有选。用NOTEXISTS谓词表示:SELECTDISTINCTSnoFROMScoreSCXWHERENOTEXISTS(SELECT*FROMScoreSCYWHERESCY.Sno
='96002'ANDNOTEXISTS(SELECT*FROMScoreSCZWHERESCZ.Sno=SCX.SnoANDSCZ.Cno=SCY.Cno));4.2.4集合查询不作讲解,自学。第四章作业:(
第1次)1.P.1222。2.P.12210.⑷~⑻。3.P.12211.⑵~⑹。思考题1.P.1221。2.P.1224。SQL的数据定义功能包括三部分:定义基本表定义视图定义索引表TABLETABLECREATEVIEWDROPVIEWINDEXINDEXALTERTA
BLE4.3SQL数据定义---DDL1.基本表①定义基本表结构定义基本表名定义表中各列的特征:列名、数据类型、长度以及能否取空值4.3.1基本表的定义和修改一般格式:CREATETABLE<基本表名>(<列名1>数据类型[列级完整性约束条件][,<列名2>数据类型
[列级完整性约束条件]···][,[表级完整性约束条件]···])[<其它参数>];说明:建表的同时可以定义与该表有关的完整性约束,这些约束条件被存入系统的数据字典中,当用户操作表时,DBMS会自动检查该操
作是否有违背完整约束条件.建立约束的考虑:如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上;否则既可以定义在列级上也可以定义在表级上。表名、列名是不区分大小写的。对一个用户而言,表名必须唯一;一个表中,列名必须唯一。表名、
列名必须以字母开头,长度不超过30个字符。在Oracle数据库中支持的数据类型与其他数据库支持的数据类型不大一样。下面列表说明Oracle数据库所支持的常用的数据类型。数据类型说明char(n)存放定长字符数据,最长255个子符varch
ar(n)存放变长字符数据,最长255个子符varchar2(n)存放可变长字符数据,最大长度为2000个字符。number(n,d)数值型数据,n代表总长度,d代表小数位数。blob二进制大对象,长度4GBraw(n
)纯二进制数据,最大2000字节date日期型。公元前4712年1月1日到公元9999年12月31日long存放变长字符数据,最大2GB.例52:建立关于学生-课程数据库信息的数据库表CREATETABLESTUDENT(SNOC
HAR(5)CONSTRAINTPK_SPRIMARYKEY(SNO),SNAMEVARCHAR(10)NOTNULL,SDEPTCHAR(2)NOTNULL,SCLASSCHAR(2)NOTNULL,SSEXCHAR(2)CHECK(SSEXIN('男
','女','')),SAGENUMBER(2)CHECK(SAGEBETWEEN16AND25));CREATETABLESTUDENT(SNOCHAR(5),SNAMEVARCHAR(10)NOTNULL,SDEPTCHAR(2)NOTNULL,S
CLASSCHAR(2)NOTNULL,SSEXCHAR(2)CHECK(SSEXIN('男','女','')),SAGENUMBER(2)CHECK(SAGEBETWEEN16AND25),CONSTRAINTPK_SPRIMARYKEY(SNO));CREATETA
BLESCORE(SNOCHAR(5),CNOCHAR(3),SCORENUMBER(5,2),CONSTRAINTPK_SCPRIMARYKEY(SNO,CNO),CONSTRAINTFK_SC_SFOREIGNKEY(SNO)REFERENCESSTU
DENT(SNO)ONDELETECASCADE,CONSTRAINTFK_SC_CFOREIGNKEY(CNO)REFERENCESCOURSE(CNO));CONSTRAINT<完整性约束名><完整性约束条件>②修改基本表结构修改已经定义的表的
结构修改已经定义的表的完整性约束:一般格式:ALTERTABLE<基本表名>[ADD<新列名><数据类型>[完整性约束]][DROPCOLUMN(<列名>)][ADDCONSTRAINT<完整性约束名><完整性约束>][DROPPRI
MARYKEY|UNIQUE(列名)|CONSTRAINT<完整性约束名>[CASCADE]][DROPCONSTRAINT<完整性约束名>][MODIFY<列名><数据类型>];说明ADD子句用于新增列及其完整性约束条件,新增加的字段只能作为表的最后一个字段;DROP子句用
于删除指定的完整性约束条件;MODIFY子句用于修改原有的列定义,包括修改列的数据类型和长度;Oracle9提供了删除属性列的功能。有些数据库软件产品的SQL没有提供删除属性列的语句,用户只能间接实现这一功能。方法
是先将表中要保留的列及其内容复制到一个新表中,然后删除原表,再将新表重新命名为原表;只有当一个表为空表时,即表中无数据时,新增列才可选择NOTNULL;只有当某列已有数据中未出现过空值时,才能将该列改为非空列(NOTNU
LL);若要改变列的类型或减小列的宽度,此列对应的数据必须全为空值。如何修改表的列名?ALTERTABLEtable_nameRENAMECOLUMNold_column_nameTOnew_column_name;这样的语法是从Oracle9.2的版本才开始支持,9.0.1及以前的版本
,是不支持这个语法的,只能通过重建表或添加/删除字段的方法来改变字段名。如果我们采用Oralce9.2早期版本,可以采用以下5步来间接地修改表的列名。针对要重命名的表列,取消施加其上的所有约束和索引。添加新的表列,给这些表列赋新
的名字。把数据从旧表列移动到新的表列。对新的表列重新创建所有的约束和索引。删除旧列。例53:为表STUDENT添加一个新的列。例54:将刚添加的列SID改为DATE类型。*建表后声明主关键字:altertabletable_nameaddconst
raintprimary_aprimarykey(column_name);注意:table_name是表的名字primary_a是定义了主键的约束名字column_name是要被定义为主键的字段名。也可以在定义主键时不添加约束名字:altertable
table_nameaddprimarykey(column_name);*建表后声明外关键字:altertabletable_name1addconstraintforeign_aforeignkey(column_na
me)referencestable_name2(column_name);注意:table_name1是要增加外部键的表的名字,table_name2是相对table_name1的主表。foreign_a是定义了外部键的约束名字column_name是要被定义为外键的字段名。alte
rtabletable_name1addforeignkey(column_name)referencestable_name2(column_name);③删除基本表定义一般格式:DROPTABLE<基本表名
>[CASCADECONSTRAINTS];说明:基本表一旦删除,表中的数据、此表上建立的索引和视图都将自动被删除。Oracle中,删除基本表后,建立在此表上的视图定义仍然保留在数据字典中,但是,用户不能使
用,使用将出错。如果要删除的表中包含有被其他表外码引用的主码或唯一性约束列,并且希望在删除该表的同时删除其他表中的相关的外码约束,需要使用CASCADECONSTRAINTS子句。例55:删除STU
DENT表。Oracle9.2的版本还提供了直接修改表名,直接删除表中的列。但要注意完整性约束问题。修改表名:RENAME<原表名>TO<新表名>;删除表中的列:ALTERTABLE<表名>DROPCOLUMN<列名>;2.
完整性约束的说明①域完整性保证一个数据库不包含任何无意义的或不合理的值,即保证表的某一列的任何一个值都是该列域(即合法的数据集合)的成员。通过使用列数据类型实现域完整性,SQL可自动实现域完整性。②实体完整性保证一个表的每行是唯一的。要实现实体完整性,必须指定一个表中的一列或一组列
作为表的主键。通过声明表级或列级的完整性约束条件PRIMARYKEY来定义一个表的主键,并实现实体完整性。③参照完整性保证相关的表在时间上的一致性。参照完整性定义了一个关系数据库中不同的列和不同的表之间的关系。通过声明一个FORE
IGNKEY完整性约束在表中定义一个或多个外键并实现参照完整性,用REFERENCES定义外键来自的表名,即主表或父表名。FOREIGNKEY:如表R的属性f引用表P的属性a:R(f)->P(a),则a是P的PrimaryKeyR(f)出现的
值必须在P(a)中有效参照完整性约束不仅决定了外键所属于的表中的这个外键可接受的数据,而且还定义了当参照完整性约束作用父键时,外键所能进行的引用操作。在Oracle中,通过在定义外键时加参照完整性选择项ONUPDATE/ONDELETE来实现当主
表被引用的主键被修改/删除时,为了不破坏参照完整性约束所有的二种可能的处理办法:RESTRICT:缺省选择项,称为限制引用操作。凡是被子表所引用的主键,不得进行任何操作;CASCADE:称为级联引用操作。凡是对主表的主键进行的操作,子
表中引用此主键的行也随之自动被修改/删除。insertintoscott1(gg,hh)values('dddd','04-7月-2008');insertintoscott1(gg,hh)values('eeee','04-6月-20
08');createtablescott1(ggchar(4)constraintpk_s1primarykey,hhdate);关于参照完整性约束条件举例:父表createtablescott2(ggchar(4),jjdate,constraintfk_s2_s1foreign
key(gg)referencesscott1(gg));insertintoscott2(gg,jj)values('eeee','04-10月-89');子表deletefromscott1wheregg
='eeee';对建立了主键和外部键的两个表scott1和scott2,执行下列删除运算后,会有什么结果?为什么?SQL>select*fromscott1;GGHH--------------dddd04-7月-89eeee04-6月-89SQL>selec
t*fromscott2;GGJJ--------------eeee04-10月-89ERROR位于第1行:ORA-02292:违反完整约束条件(SCOTT.SYS_C001233)-已找到子记录日志④用户自定义完整性业务规则的约束。在Oracle中,可以使用存储过程和触发器来定制业务规
则,实现用户自定义的完整性约束。1.索引的概念981019810298103982019820298101王萍98201黎明98102王萍98202成功98103阳光索引表学生表4.3.2索引2.建立索引的目的说明:使用索引加速数据查询的速度,减少磁盘I/O的次数;有序输出;实施唯一性约束(
与UNIQUE)。谁可以建立索引DBA或表的属主(即建立表的人)DBMS一般会自动建立以下列上的索引PRIMARYKEYUNIQUE谁维护索引DBMS自动完成使用索引DBMS自动选择是否使用索引以及使用哪些索引3.建立索引一般格式:CREATE
[UNIQUE]INDEX<索引名>ON<基本表名>(<列名>[ASC|DESC][,<列名>[ASC|DESC]]···);说明<基本表名>是要建立索引的基本表名字;索引可建立在一列或多列上,各列名之间用逗号分隔;ASC(升序)或DESC指定索引值的排列次序,缺省为ASC;[UNIQ
UE]指明此索引的每一个索引值只对应唯一的数据记录。(唯一性)当表中有数据时,建立索引将检查数据的唯一性,如果出现重复,将有下列提示:ORA-01452:无法CREATEUNIQUEINDEX;找到重复的关键字建立了唯一性索引后,以后对数据的修改将自动进行唯
一性验证。例56:对学生-课程关系数据库中的表建立索引。4.删除索引一般格式:DROPINDEX<索引名称>[ON<基本表名>];说明:ON子句是选择项,它导致索引与表名的校验;用户只能删除自己建立的索引;索引是不能修改的。5.索引的自动引用用户不必明显地标识出将使用什么
索引以及为何使用,即用户不必也不能在存取数据时选择索引,SQL将自动使用索引,存取路径的选择有系统自动选择。一般地,SQL优化程序将确定一个SQL语句是否适于使用索引。在以下情况下,Oracle将不使用索引:不存在有WHERE子句,即选择所有行;索引列被函
数引用或出现在表达式中;谓词中含有ISNULL或ISNOTNULL。注意:如果确信所要检索的行比例较大,则应抑制索引的使用。其常用的方法:把数字加上零;把字符与空值相连接。例如:GRADE+0=95‘’||SNAME=‘张三’6
.索引的说明表越大,索引越能有效地改善查询的响应时间,对于少于100行的表建立索引可能不合算;对WHERE子句中最常使用的列建立索引。对连接列建立索引,也可大大地改善连接查询的速度;只要可能,尽量将索引
列定义为NOTNULL;Oracle在一个表上最多可创建16个索引;应根据需要建立索引,应当在查询速度和插入更新速度之间进行权衡。通常不要在一个表上建立多于三个索引。数据操纵命令将导致数据库中数据的改变。SQL语言的数据操纵功能包括三部分:INSERT向表中插入数据UPDATE修改表
中已存在行中的数据DELETE删除表中的数据4.4SQL数据操纵---DML要求表必须是已存在的。1.单行插入一般格式:INSERTINTO<基本表名>[(<属性列1>[,<属性列2>]…)]VALUES(<值表达式1>[,<值表达式2>]…);4.4.1插入数据注意:在表定义时说明了N
OTNULL的属性列不能取空值,否则会出错。如果INTO子句中选择了列名,则VALUES子句中的值表达式,必须与列一一对应;如果没有指明任何列名,则新插入的纪录必须在每个属性列上均有值。字符型和日期型数据在插入时要加单引号。对于在INSERT语句中未出现的列,那么这些列则为NULL
;也可以显式地在VALUES子句中用NULL来代表空值进行插入数据。2.多行插入多行插入也称为表间拷贝,即从一个表中抽取若干行数据插入到另一个表中。一般格式:INSERTINTO<基本表名1>[(<属性列1>[,<属性
列2>]…)]SELECT[列表达式1[,列表达式2]…]FROM<表名2>WHERE<条件表达式>;子查询例57:向学生表STUDENT插入一行新的数据。例58:将学生表STUDENT中计算机系(‘CS’)中
的学生数据插入到表S1中。3.插入子查询结果产生一个表,但这个表的列是从子查询的结果中全部复制或部分复制,且子查询结果作为表的行插入到表中。一般格式:CREATETABLE<基本表名>[(<属性列1>[,<属性列2>]…)][A
S子查询];例59:求每一个学生的平均成绩,把结果存入表S_GR中。可以修改表中某些指定列的数据。一般格式:UPDATE<基本表名>[别名]SET<列名>=<表达式>[,<列名>=<表达式>]…[WHERE<条件表达式>];其中:表达式={表达式|常量|列名}3.4.
2修改数据1.修改一个或多个元组的值如果不选WHERE子句,则表中所有的行全被更新;如果选择了WHERE子句,则使WHERE中条件表达式为真的行被更新;例60:把所有学生的年龄加2。2.带子查询的修改语句当子查询只返回一行时:UPDATE<基本表名>[别名
]SET(<列名>[,<列名>]…)=(子查询);要求,被修改的列与子查询返回的列的列数相等,类型相同,且被修改的列必须出现在括号内,并以逗号隔开。例61:将数据库的课时改成与数据结构课程的课时相同。注意:如果SET子句中包含
子查询,则子查询必须且只返回一行,其返回数据个数应与SET后面的列数一致,类型相同;若子查询未返回任何行,则被修改的各行的有关列被置成NULL。删除基本表中某些行的数据。一般格式:DELETEFROM<基本表名>[WHERE<条件表达式>];其中:表达式={表达式|常量|列名};注意:
删除基本表中的全部记录后,该基本表的定义仍在数据字典中。3.4.3删除数据例62:删除所有学生的成绩记录。例63:删除计算机系全体学生的成绩记录。第四章作业:(第2次)1.P.1223。2.P.12210.⑴~⑶、⑼~⑾。3.P.12211.⑺~⑼。4.5视图(VIEW)视图可以
由一个表中选取的某些列或某些行组成,也可由若干表中满足一定条件的数据组成。简单地说,视图可以看成是一个窗口,它所反映的是一个表或若干表的局部数据。视图一经定义,用户就可以把它当作表一样来查询数据。视图和基本表不同,视图是一
个虚表,即视图所对应的数据不实际存在数据库中,数据库中只存储视图的定义(存在数据字典中),因此不占用存储空间。视图2视图4视图1视图3基本表1基本表2基本表3基本表4视图是定义在基本表上的,也可以定义在视图上;一个视图可在几个表或视图上建立,一个表或视图也可建立多个视图。视图的特点:视图如同
基本表,但不象基本表那样真实存在;视图的数据来源于基本表的数据。只存放视图的定义,不存放视图对应的数据;基表中的数据发生变化,从视图中查询出的数据也随之改变。1.视图的定义与删除任何一个查询结果其本身就是一个表,所以一
个查询可被用于定义一个视图。①视图的定义一般格式:CREATEVIEW<视图名>[(<列名1>[,<列名2>]…)]AS子查询[WITHCHECKOPTION];说明:执行CREATEVIEW语句时只是把视图定义存入数据字
典,并不执行其中的SELECT语句。其中子查询可以是任意复杂的SELECT语句,但通常不允许含有ORDERBY子句和DISTINCT短语。WITHCHECKOPTION表示对视图进行UPDATE,INSERT和DELETE操作时要保
证更新、插入和删除的行满足视图定义中的谓词条件。属性列名或者全部省略或者全部指定,没有第3种选择;如果子查询中包含有计算列,则必须指定列名(别名)。例64:建立计算机系的学生视图。例65:把学生的学号及它的平均成绩定义为另一个视图
。CREATEVIEWS_G(SNO,GAVG)ASSELECTSNO,AVG(SCORE)FROMSCOREGROUPBYSNO;②视图的删除一般格式:DROPVIEW<视图名>;说明:若导出视图的基本表删除,则由该
基本表导出的所有视图为不可用的视图;视图不能修改;视图删除后,与该视图相关的基本表的数据不受任何影响。2.视图的查询视图的查询通常是通过转换为基本表的查询来实现的。即首先把查询转换成等价的对基本表的查询,
然后执行修改了的查询(系统从数据字典中取出视图定义,然后把定义中的子查询和视图查询语句结合起来,形成一个修正的查询语句)。用户查询视图基表DB用户内部例66:求平均成绩为90分以上的学生的学号和成绩(用
例65的视图)。SELECT*FROMS_GWHEREGAVG>=90;注意:单表行列子集视图的查询均能进行正确转换,但对非单表行列子集的视图就不一定能进行正确的转换。例66中对视图查询的转换SELECTSno,AVG(Score)FROMSCOREGROUPBYSnoHAVING
AVG(Score)>=90;SELECTSno,AVG(Score)FROMSCOREWHEREAVG(Score)>=90GROUPBYSno;Oracle早期版本转换成的形式,不能进行正确操作。在9.2版本中能够转换为直接对原基本表操作,正确执
行。3.视图的更新对视图的更新最终要转换成对基本表的更新,但实际上,在RDBMS中,并非所有的视图都是可以更新的,有些视图的更新不能唯一地有意义地转换成对基本表的更新。例67:将‘96001’学生的平均成绩修改为90分。SQL>UPDATES_G2SETGAVG=903WHERES
NO='96001';UPDATES_G*ERROR位于第1行:ORA-01732:此视图的数据操纵操作非法视图的更新必须遵守以下约束:①视图的定义是从一个基本表导出的;②定义视图的SELECT语句中不含有GRO
UPBY、DISTINCT和组函数;③视图的任何要更新的列不是通过列表达式定义的;④表中的所有NOTNULL列都在视图的定义中。视图的删除操作:同时满足①和②约束;视图的修改操作:同时满足①、②和③约束;视图的插入操作:同时满足以上全部约
束;定义在多个表上的视图是不能进行更新的;一个不允许更新的视图上定义的视图也不允许更新。4.视图的优点简化了用户观点;提供逻辑数据独立性;例如:把学生关系S(SNO,SNAME,SDEPT,SAGE)分为SX(SNO,SANEM,SAGE)和SY(SNO,SDEPT)。这时,原表
S是SX,SY的自然连接的结果。因此可建立视图SCREATEVIEWS(SNO,SNAME,SDEPT,SAGE)ASSELECTSX.SNO,SX.SNAME,SY.SDEPT,SX.SAGEFROMSX,SYWHE
RESX.SNO=SY.SNO;对机密数据提供了安全保护功能。4.6SQL数据控制SQL数据控制功能是指控制用户对数据的存取权利。在Oracle数据中,所有数据是按用户划分的,各个用户一般不能存取别的用户的数据。如果要使各用户之间相互共享数据,就必须相互授予适当的权力。RDBMS的SQL数据控制
功能必须要能够做到:把授权的决定告之系统,这时由GRANT和REVOKE语句来完成的;把授权的结果存入数据字典;当用户提出操作请求时,根据授权情况进行检查,以决定是执行操作请求还是拒绝之。1.授权---GRANT授权就是给予用户一定的访问特权。有两种授权:①授予某类数据库用户的特权
,只能由DBA授予;②授予对某些数据对象进行某些操作的特权,可以由DBA授予,也可由数据对象的创建者授予。对象操作权限属性列SELECT、INSERT、DELETE、UPDATE、ALL视图同上基本表SELECT、INSERT、DELETE、UPDATE、ALTER、INDE
X、ALL不同对象允许的操作权限:一般格式:GRANT{操作权限|ALL}ON<对象>TO{<用户|PUBLIC>}[WITHGRANTOPTION];例68:给用户USER01授予在SCORE表上的SELECT、INSERT和UPDATE的权力。例69:给用户USER01
和USER02授予在STUDENT表上的SELECT和INSERT。例70:给用户USER01授予在COURSE表上的所有权力。例71:给所有用户授予SCORE表上的SELECT权力。例72:给LNX用户授予对表STUDENT的SELECT权力,并使该用户具
有给其它用户授予相同权力的用户。例73:把查询SCORE表和修改SCORE属性列的权限授予用户USER01。2.收回授权---REVOKE收回一些已授予用户的权限。一般格式:REVOKE{操作权限|ALL}ON<对象>FR
OM{<用户>[,<用户>]…|PUBLIC>};说明:授予链:A->B,B->C,C->D,…。一旦A从B那里收回权限,则B授予C的,C授予D的受用权,则B授予C的,C授予D的使用权也一起收回;收回属性列的操作权限要通过收
回整个表的操作权来进行;当删除表时,SQL自动地删除对该表授予的各种权限。例74:从用户LNX收回对STUDENT表的所有权限。4.7SQL的事务处理1.事务处理的概述所谓事务(Transaction)是指一
系列动作的组合,这些动作被当作一个整体或一个逻辑单元来处理。SQL以逻辑工作单元为单位保证数据一致性。在数据库中,一个动作是指一个SQL更新语句。事务是一组SQL语句组成的一个逻辑单位。事务是一个完整的活动序列,包含一组操作,这些操作或者全部成功地执行,此时整个活动序列的所有执
行结果都被保存到数据库中。或者都不执行并恢复到执行前的状态,我们说事务已经回滚。买东西是一个典型的事务过程:交钱、拿走货物。验货入库也是一个典型的事务过程:来货验收、入库。财务帐目转移:A帐户转到B帐户。2.事务的特性事务具有4个特性,简称ACID特性。
①原子性(Acomicity);②一致性(Consistency);③隔离性(Isolation);④持续性(Durability)。保证事务ACID特性是事务的重要任务。事务ACID特性可能遭破坏的因素有:①多个事务并行运行,不同事务的操作交叉执行;DBMS必须保证多个事务
的交叉运行不影响这些事务的原子性(并发机制)②事务在运行过程中,被强行停止。DBMS必须保证被强行终止的事务对数据库和其它事务没有任何影响(恢复机制)3.事务提交---COMMIT以明显方式提交当前事务中的所有操作,使之生效并结束当前事务。一般格式:COMM
IT;含义:提交当前事务所做的变更,同时释放该事务所做的任何封锁,标志该事务结束。说明:提交命令用于提交自上次提交以后对数据库中数据所作的改动。在Oracle数据库中,为了维护数据的一致性,系统为每个用户分别设置了一个工作区。对表中数据所作的增、删、改操
作都在工作区中进行,在执行提交命令之前,数据库中的数据(永久存储介质上的数据)并没有发生任何改变,用户本人可以通过查询命令查看对数据库操作的结果,但是整个网络上的其他用户并没有看到你对数据库所作的改动。提交命令就是使对数据的改变永久化。某
些SQL语句(DDL语句),在它们被执行时会生成隐含的COMMIT命令,将会马上导致事务提交。这些DDL语句包括:CREATEALTERTABLEDROPCREATEDROPGRANT,REVOKEV
IEW,INDEX在Oracle中,用户可以使用SET命令来设置自动提交环境。一旦设置了自动提交,则在每个更新SQL语句操作之后,系统就自动进行了提交。一般情况下,最好不要使用自动提交方式。设置自动提交的语句格式:SETA
UTOCOMMITIMMEDIATE;和SETAUTOCOMMITON;若想回到非自动提交方式,其语句为:SETAUTOCOMMITOFF;4.事务回退---ROLLBACK以明显方式取消当前事务所作的数据库改变,
以便恢复数据库并结束当前事务。一般格式:ROLLBACK;含义:取消当前事务所做的变更,并释放该事务所做的任何封锁,标志该事务结束(相当于回退到事务开始处,撤消事务中已执行的DML语句)。说明:在尚未对数据库提交的时候,可以用事务回退命令R
OLLBACK,将数据库回退到上次COMMIT后的状态。一旦事务已经提交,就不能再使用事务回退命令进行回退了。事务回退将回退整个事务,如果只需回退事务的一部分时,可以使用保存点,将整个事务划分为若干部分,这样就可以回退部分事务了。在发生下列情况时事务被自动回退(隐式或称自动回
退):①DML语句中的某些错误;(例如企图插入不正确记录)②执行时发现的错误;(例如向唯一索引的表中插入重复值,往数值列中插入非法数)③发现死锁或异常终止时。SQL语句的语法错误不会引起事务的回退。例75:将课程表COURSE中的程序设计课程的学时
改为80,微机原理课程的学时改为70,计算总学时数后,取消所有修改。再确定修改微机原理课程的学时为70学时,重新计算总学时数。UPDATECOURSESETCTIME=80WHERECNAME=‘程序设计’;UPDATECOURSESETCTIME=
70WHERECNAME=‘微机原理’;SELECTSUM(CTIME)FROMCOURSE;ROLLBACK;UPDATECOURSESETCTIME=70WHERECNAME=‘微机原理’;COMMIT;SELECTSUM(CTIME)F
ROMCOURSE;事务的开始和结束可以由用户显式控制。如果用户没有显式地定义事务,则由DBMS按缺省规定自动划分事务。每个事务开始于第一个可执行的DML语句。当出现以下情况之一时,则撤消或结束一个事务。①调用COMMIT或ROL
LBACK语句(显式控制事务);②发生DDL语句;③发生错误或故障;④从数据库退出(LOGOFF);⑤异常结束(强行中止)。如果没有上述五种情况,则在程序正常结束时将把整个程序作为一个事务进行提交。在Oracle中,系统会自动提交最后一个事务。4.8嵌入式SQ
L(自学)第四章作业:(第3次)1.P.1225。2.P.12210.⑾~⑿。3.P.12211.⑽~⑹。思考题1.P.1226。