《操作系统与数据库搭建》课件-第6章 存储过程与事务_第1页
《操作系统与数据库搭建》课件-第6章 存储过程与事务_第2页
《操作系统与数据库搭建》课件-第6章 存储过程与事务_第3页
《操作系统与数据库搭建》课件-第6章 存储过程与事务_第4页
《操作系统与数据库搭建》课件-第6章 存储过程与事务_第5页
已阅读5页,还剩70页未读, 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

存储过程概述创建和执行存储过程管理存储过程存储函数事务第六章存储过程与事务MySQL程序设计基础6.1存储过程概述6.26.3创建和执行存储过程目录管理存储过程6.4存储函数6.56.6事务目录在MySQL中最常见的变量类型有局部变量和用户自定义变量两种。1.局部变量要定义局部变量必须使用DECLARE来声明,定义的同时可以使用default对局部变量初始化赋值。DECLARE语句格式如下:DECLAREvar_name[,…]type[DEFAULTvalue]value是给变量提供一个默认值,包含在一个DEFAULT子句中,它的值可以被指定为一个表达式,如果没有DEFAULT子句,初始值为NULL。例如:DECLAREnumintDEFAULT0;6.1MySQL程序设计基础6.1.1变量2.用户自定义变量用户自定义变量的声明以“@”开头,形如:@var_name。为了实现不同SQL语句中进行值的传递,可以把一些数值存储在自定义的用户变量中,不同的SQL语句都可以对它进行访问。用户变量在客户端和数据库的连接建立时被定义,当连接断开时,用户变量将会被释放。用户变量无需用DECLARE关键字进行定义,可以直接使用。例如:SET@c1=1,@c2=2,@c3=4;在编写存储过程和存储函数时,可以使用流程控制语句对SQL语句进行组织,使其成为符合业务逻辑的代码块。MySQL中常见的流程控制语句主要有:IF语句、CASE语句、LOOP语句、WHILE语句、ITERATE语句、REPEAT语句等。6.1.2流程控制语句1.IF语句IF语句可以通过判断一个逻辑条件是TRUE还是FALSE,转去执行相应的语句,它的语法格式如下:IFexpr_conditionTHENstatement_list[ELSEIFexpr_conditionTHENstatement_list][ELSEstatement_list]ENDIF2.CASE语句CASE也是一个条件判断语句,多用于多分支判断的程序结构,它的常用语法格式如下:CASEcase_exprWHENwhen_valueTHENstatement_list[WHENwhen_valueTHENstatement_list]……[ELSEstatement_list]ENDCASE3.LOOP语句LOOP是一个循环语句,用来进行一个语句块的循环操作。LOOP语句并不进行条件判断,会一直执行循环体的语句,如果要退出语句的执行,需要使用LEAVE等语句退出循环。LOOP语句的语法格式如下:[loop_label:]LOOPStatement_listENDLOOt_listP[loop_label]4.LEAVE语句在循环语句LOOP使用过程中,当循环条件不满足时,可以使用LEAVE语句跳出循环体。LEAVE语句用于跳出有循环标志的流程控制语句,基本语法结构如下:LEAVElabel5.ITERATE语句与LEAVE语句结束整个循环不同,ITERATE语句用于无条件转到语句段的开头处。ITERATE语句的格式如下:ITERATElable6.REPEAT语句REPEAT语句用于循环执行一个语句块,采用的方式是先无条件执行语句块后再进行条件表达式判断,如果表达式为真,则循环结束,否则重复执行语句块。REPEAT语句的格式如下:[repeat_lable:]REPEATstatement_listUNTILexpr_conditionENDREPEAT[repeat_lable]7.WHILE语句WHILE语句也用于循环执行一个语句块,但是与REPEAT语句不同,WHILE语句执行时首先判断条件表达式是否为真,如果为真则继续执行循环体内语句,否则直接退出循环体。WHILE语句的格式如下:[while_lable:]WHILEexpr_conditionDOStatement_listENDWHILE[while_lable]使用QL语句进行查询过程中,查询结果将返回很多记录,如果记录量很大时,需要使用光标来对查询结果集中的记录进行逐条读取,它可以对多行数据进行轻松的处理。6.1.3光标1.光标的声明在使用光标对结果集中的数据进行处理时,需要首先声明光标,光标的声明必须在声明变量、条件之后,声明处理程序之前。光标的声明格式如下:DECLAREcursor_nameCURSORFORselect_statement其中cursor_name表示光标的名字,select_statement代表SELECT语句的内容,返回一个用于创建光标的结果集。下面声明一个名为cur_teacher的光标。代码如下:DECLAREcur_teacherCURSORFORSELECTname,ageFROMteacher;2.光标的使用MySQL中使用OPEN关键字来打开光标,打开光标之后就可以使用光标了。其语法的基本形式如下:OPENcursor_name;FETCHcursor_nameINTOvar_name[,var_name…];下面我们使用一个名为cur_teacher的光标。将查询出来的数据存入teacher_name和teacher_age这两个变量中,代码如下:FETCHcur_teacherINTOteacher_name,teacher_age;3.光标的关闭MySQL中使用CLOSE关键字来关闭光标。其语法的基本形式如下:CLOSEcursor_name;其中,cursor_name参数表示光标的名称。示例:下面关闭一个名为cur_teacher的光标。代码如下:CLOSEcur_teacher;下面举一个例子,使用光标查询显示teacher表中所有教师姓名和学历的字段信息,代码段如下:DECLAREno_more_recordINTDEFAULT0;DECLAREt_namevarchar(4);DECLAREt_eduvarchar(10);DECLAREcur_recordCURSORFORSELECTtname,tedufromteacher;/*首先对游标进行定义*/DECLARECONTINUEHANDLERFORNOTFOUNDSETno_more_record=1;/*条件处理,针对NOTFOUND的条件,当没有记录时no_more_record赋值为1*/OPENcur_record;/*使用OPEN打开游标*/FETCHcur_recordINTOt_name,t_edu;WHILEno_more_record!=1DOSELECTt_name,t_edu;FETCHcur_recordINTOt_name,t_edu;ENDWHILE;CLOSEcur_record;/*用完后需要用CLOSE把资源释放掉*/存储过程是数据库服务器上一组预先编译好的SQL语句的集合,作为一个单元存储在数据库中,可以被应用程序作为一个整体来进行调用。在调用过程中,存储过程可以接收参数,执行后返回参数值。6.2存储过程概述数据库开发人员在进行数据库开发时,为了实现一定的功能,经常会将负责不同功能的语句集中起来而且按照用途分别独立放置,以便能够反复调用,而这些独立放置且拥有不同功能的语句块,称之为“过程”(Procedure)。存储过程(StoredProcedure)是一组完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过过程名和给出参数值来调用它们。6.2.1存储过程基本概念MySQL的存储程序可分以下四大类:(1)存储函数(storedfunction)。返回一个计算结果,该结果可以用在表达式里。(2)存储过程(storedprocedure)。不直接返回一个结果,但可以用来完成一般的运算或是生成一个结果集并传递回客户。(3)触发器(trigger)。与数据表相关联,当那个数据表被INSERT、DELETE、UPDATE语句修改时,触发器将自动执行。(4)事件(event)。根据时间表在预订时刻自动执行。6.2.2存储过程的类型(1)存储过程的使用,提高了程序设计的灵活性,增强了SQL语言的功能。(2)存储过程把一组功能代码作为单位组件。(3)使用存储过程有利于提高程序的执行速度。(4)使用存储过程能减少网络访问的负荷。(5)作为一种安全机制,系统管理员可以充分利用存储过程对相应的数据的访问权限的进行限制。6.2.3存储过程的作用创建存储过程语法格式如下:CREATEPROCEDUREsp_name([proc_parameter[,...]])[characteristic...]routine_body其中:

proc_parameter:[IN|OUT|INOUT]param_nametypecharacteristic:LANGUAGESQL|[NOT]DETERMINISTIC|{CONTAINSSQL|NOSQL|READSSQLDATA|MODIFIESSQLDATA}|SQLSECURITY{DEFINER|INVOKER}|COMMENT'string'routine_body:ValidSQLprocedurestatementorstatements6.3创建和执行存储过程6.3.1创建和执行不带参数的存储过程使用SQL语句在“学生选课”数据库中创建一个名为p_jiaoshi1的存储过程。该存储过程返回“教师”表中所有学历为“硕士研究生”的记录。对应的SQL语句如下:DELIMITER//CREATEPROCEDUREp_jiaoshi1()BEGINSELECT*FROMteacherWHEREtedu='硕士研究生';ENDEND//DELIMITER;实例6-1使用SQL语句执行例6-1中创建的存储过程。对应的SQL语句如下:执行结果如图6.1所示。执行结果如下所示:USE学生选课;CALLp_jiaoshi1();+------+--------+---------+------------+----------+|tno|tname|tgender|tedu|tpro|+------+--------+---------+------------+----------+|t002|李琦|男|硕士研究生|副教授||t003|王艳红|女|硕士研究生|讲师||t005|万丽|女|硕士研究生|助理讲师|+------+--------+---------+------------+----------+3rowsinset(0.00sec)实例6-21.创建带输入参数的存储过程输入参数是指由调用程序向存储过程传递的参数,在创建存储过程语句中定义输入参数,而在执行该存储过程中给出参数相应的值。6.3.2创建和执行带输入参数的存储过程(1)使用变量名传递参数值在执行存储过程的语句中,通过语句SET@parameter_name=value设定给参数的传递值,然后按位置传递参数。其语法格式如下:CALLprocedure_name([@parameter_name=value][,…n]);使用SQL语句在“学生选课”数据库中创建一个名为p_jiaoshi2的存储过程。该存储过程能根据用户给定的学历值查询返回“教师”表中对应的记录SET@输入学历='本科';CALLp_jiaoshi2(@输入学历);SET@输入学历='博士研究生';CALLp_jiaoshi2(@输入学历);实例6-4+------+--------+---------+------+------+|tno|tname|tgender|tedu|tpro|+------+--------+---------+------+------+|t001|吴亚飞|男|本科|讲师|+------+--------+---------+------+------+1rowinset(0.19sec)QueryOK,0rowsaffected(0.19sec)mysql>SET@输入学历='博士研究生';QueryOK,0rowsaffected(0.00sec)mysql>CALLp_jiaoshi2(@输入学历);+------+--------+---------+------------+------+|tno|tname|tgender|tedu|tpro|+------+--------+---------+------------+------+|t004|马志超|男|博士研究生|教授|+------+--------+---------+------------+------+1rowinset(0.00sec)运行结果:2.执行带输入参数的存储过程执行带输入参数的存储过程,有两种方法:一种是使用变量名传递参数值;另一种是按给定表达式值传递参数值。用参数名传递参数值的方法执行存储过程p_jiaoshi2,分别查询学历为“本科”和“博士研究生”的记录。

DELIMITER//SET@输入学历='本科';CALLp_jiaoshi2(@输入学历);SET@输入学历='博士研究生';CALLp_jiaoshi2(@输入学历);//DELIMITER;实例6-4(2)按给定表达式值传递参数在执行存储过程的语句中,当存储过程含有多个输入参数时,采用这种方式传递值,给定参数值的顺序必须与存储过程中定义的输入变量的顺序一致。其语法格式如下:CALLprocedure_name(value1,value2,…)用按给定表达式值传递参数的方式执行存储过程p_jiaoshi2,分别查找学历为“本科”和“博士研究生”的记录。对应的SQL语句如下:运行结果和例6.4运行结果相同。CALLp_jiaoshi2('本科');CALLp_jiaoshi2('博士研究生');实例6-5如果需要从存储过程中返回一个或多个值,可以通过在创建存储过程的语句中定义输出参数来实现。定义输出参数,需要在CREATEPROCEDURE语句中定义参数时在参数名后面指定OUT关键字。语法格式如下:OUTparameter_namedatatype[=default]6.3.3创建和执行带输出参数的存储过程创建存储过程p_jiaoshi3,要求能根据用户给定的学历值,统计出“教师”表的所有教师中,学历为该值的教师人数,并将结果以输出变量的形式返回给调用者。DELIMITER//CREATEPROCEDUREp_jiaoshi3(INtedu1varchar(10),OUTteachernumsmallint)BEGINSELECTCOUNT(*)INTOteachernumFROMteacherWHEREtedu=tedu1;END//DELIMITER;实例6-6执行存储过程p_jiaoshi3,统计教师表中学历为“硕士研究生”的教师人数。运行结果:CALLp_jiaoshi3('硕士研究生',@abc);SELECT@abc;mysql>SELECT@abc;+------+|@abc|+------+|3|+------+1rowinset(0.00sec)实例6-7

DELIMITER//USE学生选课;CREATEPROCEDUREp_jiaoshi4(in_sexchar(2),outout_numint)BEGINIFin_sex='男'THENSELECTCOUNT(tgender)INTOout_numFROMteacherWHEREtgender='男';ELSESELECTCOUNT(tgender)INTOout_numFROMteacherWHEREtgender='女';ENDIF;END//delimite;实例6-8执行存储过程p_jiaoshi4,统计教师表中性别为“男”的教师人数。运行结果:CALLp_jiaoshi4('男',@abc);SELECT@abc;+------+|@abc|+------+|3|+------+1rowinset(0.00sec)实例6-9(1)我们可以用SELECTnameFROMcWHEREdb=’数据库名’,或者SELECTroutine_nameFROMinformation_schema.routinesWHEREroutine_schema=‘数据库名’,或者SHOWPROCEDURESTATUSWHEREdb=‘数据库名’用于显示数据库内存储过程的列表。(2)使用SHOWCREATEPROCEDURE数据库.存储过程名;就可以查看当前存储过程的详细。6.4管理存储过程6.3.1查看存储过程查看“学生选课”数据库存储过程的信息。对应的SQL语句如下:运行结果如下:USE学生选课;SELECT*fromcWHEREdb='学生选课';实例6-10查看存储过程p_jiaoshi3的定义语句等信息。对应的SQL语句如下:执行结果如图6.7所示:USE学生选课;SHOWCREATEPROCEDUREp_jiaoshi3;实例6-11修改存储过程是由ALTERPROCEDURE语句来完成的,其语法格式如下:ALTER{PROCEDURE|FUNCTION}sp_name[characteristic...]characteristic:{CONTAINSSQL|NOSQL|READSSQLDATA|MODIFIESSQLDATA}|SQLSECURITY{DEFINER|INVOKER}|COMMENT'string’6.4.2修改存储过程修改存储过程p_jiaoshi1的定义。将读写权限改为MODIFIESSQLDATA,并指明调用者可以执行。对应的SQL语句如下:ALTERPROCEDUREp_jiaoshi1MODIFIESSQLDATASQLSECURITYINVOKER;实例6-12查询修改后存储过程p_jiaoshi1的信息。运行结果如下所示:SELECTSPECIFIC_NAME,SQL_DATA_ACCESS,SECURITY_TYPEFROMinformation_schema.RoutinesWHEREROUTINE_NAME='p_jiaoshi1';mysql>SELECTSPECIFIC_NAME,SQL_DATA_ACCESS,SECURITY_TYPEFROMinformation_schema.RoutinesWHEREROUTINE_NAME='p_jiaoshi1';+---------------+-------------------+---------------+|SPECIFIC_NAME|SQL_DATA_ACCESS|SECURITY_TYPE|+---------------+-------------------+---------------+|p_jiaoshi1|MODIFIESSQLDATA|INVOKER|+---------------+-------------------+---------------+1rowinset(0.00sec)实例6-13存储过程的删除是通过DROPPROCEDURE语句来实现的。其语法格式为:DROP{PROCEDURE|FUNCTION}[IFEXISTS]sp_nameIFEXISTS子句是一个MySQL的扩展。如果程序或函数不存储,它防止发生错误。6.4.3删除存储过程使用Transact-SQL语句删除存储过程p_jiaoshi2。对应的SQL语句如下:USE学生选课;DROPPROCEDUREp_jiaoshi2;实例6-14存储过程与存储函数一样,都是由sql语句和过程式语句所组成的代码片段,并且可以被应用程序和其他sql语句调用。它们之间的区别在于:(1)存储函数不能拥有输出参数,因为存储函数自身就是输出参数;而存储过程可以拥有输出参数。(2)可以直接对存储函数进行调用,而不需要使用call语句;而对存储过程的调用,需要使用call语句。(3)存储函数中必须包含一条return语句,而这条特殊的sql语句不允许包含于存储过程中。6.5存储函数6.4.1存储过程与存储函数联系与区别MySQL中,创建存储函数的基本形式如下:CREATEFUNCTIONsp_name([func_parameter[,...]])RETURNStype[characteristic...]routine_bodyReturn子句用于声明存储函数返回值的数据类型。6.5.2创建和执行存储函数创建存储函数返回两个数相加之和。对应的SQL语句如下:DELIMITER//CREATEFUNCTIONaddTwoNumber(xSMALLINTUNSIGNED,ySMALLINTUNSIGNED)RETURNSSMALLINTBEGINDECLAREa,bSMALLINTUNSIGNEDDEFAULT10;SETa=x,b=y;RETURNa+b;END//DELIMITER;实例6-16可建立查询语句调用该自定义函数的语句如下:运行结果如下:set@num1=10;set@num2=20;set@result=addTwoNumber(@num1,@num2);select@result;+---------+|@result|+---------+|30|+---------+1rowinset(0.00sec)为了能更好的为用户服务,MySQL提供了丰富的系统函数,这些函数无需定义就能直接使用,其中包括数学函数、聚合函数、字符串函数、日期和时间函数等。6.5.3MySQL的系统函数数学函数ABS(x):返回x的绝对值。BIN(x):返回x的二进制。CEILING(x):返回大于x的最小整数值。EXP(x):返回值自然对数e的x次方。FLOOR(x):返回小于x的最大整数值。LN(x):返回x的自然对数。LOG(x,y):返回x的以y为底的对数。MOD(x,y):返回x/y的余数。PI():返回圆周率的值。RAND():返回0到1内的随机数。ROUND(x,y):返回参数x的四舍五入的有y位小数的值SIGN(x):返回代表数字x的符号的值SQRT(x):返回一个数的平方根聚合函数AVG(col):返回指定列的平均值。COUNT(col):返回指定列中非NULL值的个数。MIN(col):返回指定列的最小值。MAX(col):返回指定列的最大值。SUM(col):返回指定列的所有值之和。字符串函数ASCII(char):返回字符的ASCII码值。CONCAT(s1,s2...,sn):将s1,s2...,sn连接成字符串。INSERT(str,x,y,instr):将字符串str从第x位置开始,y个字符长的子串替换为字符串instr,返回结果。LCASE(str)或LOWER(str):返回将字符串str中所有字符改变为小写后的结果。LEFT(str,x):返回字符串str中最左边的x个字符。LENGTH(s):返回字符串str中的字符数。LTRIM(str):从字符串str中切掉开头的空格。POSITION(substr,str):返回子串substr在字符串str中第一次出现的位置。REVERSE(str):返回颠倒字符串str的结果。RIGHT(str,x):返回字符串str中最右边的x个字符。STRCMP(s1,s2):比较字符串s1和s2。TRIM(str):去除字符串首部和尾部的所有空格。UCASE(str)或UPPER(str):返回将字符串str中所有字符转变为大写后的结果。日期和时间函数CURDATE()或CURRENT_DATE():返回当前的日期。CURTIME()或CURRENT_TIME():返回当前的时间。DAYOFWEEK(date):返回date所代表的一星期中的第几天(1~7)。DAYOFMONTH(date):返回date是一个月的第几天(1~31)。DAYOFYEAR(date):返回date是一年的第几天(1~366)。HOUR(time):返回time的小时值(0~23)。MINUTE(time):返回time的分钟值(0~59)。MONTH(date):返回date的月份值(1~12)。MONTHNAME(date):返回date的月份名。NOW():返回当前的日期和时间。QUARTER(date):返回date在一年中的季度(1~4)。WEEK(date):返回日期date为一年中第几周(0~53)。YEAR(date):返回日期date的年份(1000~9999)。

所谓的事务是指由用户定义的一系列数据库更新操作,这些操作,要么都执行,要么都不执行,是一个不可分割的逻辑工作单元。这里的更新操作主要指对数据库内容产生修改作用的操作,比如:insert、delete、update等操作。6.5.1事务概述6.6事务事务处理首先要开启事务,使用的语句如下所示:STARTTRANSACTION;开启事务之后,就开始执行事务内的SQL语句,当SQL语句执行完毕后,必须使用语句提交事务,使用的语句如下:COMMIT;开启事务之后,事务中的SQL语句只有在提交事务之后才能运行生效。在提交事务之前,还可以使用语句取消当前事务,叫做回滚语句,具体如下:ROLLBACK;

事务处理在数据库操作中对保持数据的一致性具有重要的作用,它的实现一般要满足一些特性,这些特性不需要开发者管理,被称为ACID特性,分别是:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durabilily)。

1.原子性

原子性体现事务所有操作是否被全部完成。事务处理的操作要么全都完成,要么全都不做,如果有操作失败,整个事务将要回滚,从而保证事务所有操作成功必将完成所有的数据库修改任务,如果有操作失败数据库将恢复到事务开始之前的状态。2.一致性

一致性是指事务必须在执行前后都要处于一致性状态。事务操作全部正确执行,数据库的变化将生效,从而处于有效状态;如果事务处理失败,系统将会回滚,从而恢复到执行前的状态,由于执行前系统处于一致性状态,所以回滚后系统仍然处于一致性状态。

3.隔离性

隔离性是面对多用户并发对数据库访问时,要保证所有并发事务认为只有自己在使用系统,而不为其他事务的操作所干扰。4.持久性

持久性是指一旦一个事务被完成,那么系统中的数据的改变将会是永久的,即使系统遭遇了故障的情况下,也不会丢失提交事务的操作。6.5.2事务的提交

在进行事务处理过程中,为了能使SQL语句执行的修改操作永久保存在数据库中,事务处理结束时必须由用户提交确定(使用COMMIT语句),实务的操作才会成功执行。

在手动提交的方式下,启动一个事务,在表teacher中插入两条记录,具体语句如下:STARTTRANSACTION;INSERTINTOteachervalues('t006','张君瑞','男','硕士研究生','副教授');INSERTINTOteachervalues('t007','赵楠','女','博士研究生','教授');+------+--------+---------+------------+----------+|tno|tname|tgender|tedu|tpro|+------+--------+---------+------------+----------+|t001|吴亚飞|男|本科|讲师||t002|李琦|男|硕士研究生|副教授||t003|王艳红|女|硕士研究生|讲师||t004|马志超|男|博士研究生|教授||t005|万丽|女|硕士研究生|助理讲师||t006|张君瑞|男|硕士研究生|副教授||t007|赵楠|女|博士研究生|教授|+------+--------+---------+------------+----------+mysql>select*fromteacher;执行结果如下所示:

在手动提交的方式下,启动一个事务,在表teacher中插入两条记录,具体语句如下:STARTTRANSACTION;INSERTINTOteachervalues('t006','张君瑞','男','硕士研究生','副教授');INSERTINTOteachervalues('t007','赵楠','女','博士研究生','教授');+------+--------+---------+------------+----------+|tno|tname|tgender|tedu|tpro|+------+--------+---------+------------+----------+|t001|吴亚飞|男|本科|讲师||t002|李琦|男|硕士研究生|副教授||t003|王艳红|女|硕士研究生|讲师||t004|马志超|男|博士研究生|教授||t005|万丽|女|硕士研究生|助理讲师||t006|张君瑞|男|硕士研究生|副教授||t007|赵楠|女|博士研究生|教授|+------+--------+---------+------------+----------+mysql>select*fromteacher;执行结果如下所示:mysql>select*fromteacher;+------+--------+---------+------------+----------+|tno|tname|tgender|tedu|tpro|+------+--------+---------+------------+----------+|t001|吴亚飞|男|本科|讲师||t002|李琦|男|硕士研究生|副教授||t003|王艳红|女|硕士研究生|讲师||t004|马志超|男|博士研究生|教授||t005|万丽|女|硕士研究生|助理讲师|+------+--------+---------+------------+----------+5rowsinset(0.00sec)但是退出数据库重新登陆后,再次进行查询。结果如下:从以上结果可以看出,事务中的记录插入操作最终并未完成,这是因为事务处理未经提交(COMMIT)就已经退出数据库了,由于采用的是手动提交模式,当前操作被自动取消了。在下面语句中,在事务处理结束后加入COMMIT语句,就可以最终完成整个事务的提交,具体代码如下:STARTTRANSACTION;INSERTINTOteachervalues('t006','张君瑞','男','硕士研究生','副教授');INSERTINTOteachervalues('t007','赵楠','女','博士研究生','教授');COMMIT;+------+--------+---------+------------+----------+|tno|tname|tgender|tedu|tpro|+------+--------+---------+------------+----------+|t001|吴亚飞|男|本科|讲师||t002|李琦|男|硕士研究生|副教授||t003|王艳红|女|硕士研究生|讲师||t004|马志超|男|博士研究生|教授||t005|万丽|女|硕士研究生|助理讲师||t006|张君瑞|男|硕士研究生|副教授||t007|赵楠|女|博士研究生|教授|+------+--------+---------+------------+----------+7rowsinset(0.00sec)执行结果如下所示:显然,两条记录成功永久性插入到数据表teacher中。

在进行事务处理时,如果事务尚未提交时发现某些操作不合理,可以通过事务的回滚来取消当前事务,把数据库恢复到事务处理之前的状态。6.6.3事务的回滚下面仍以上节实例说明事务回滚的作用,首先在表teacher中插入两个记录,并先不提交,语句如下:STARTTRANSACTION;INSERTINTOteachervalues('t006','张君瑞','男','硕士研究生','副教授');INSERTINTOteachervalues('t007','赵楠','女','博士研究生','教授');+------+--------+---------+------------+----------+|tno|tname|tgender|tedu|tpro|+------+--------+---------+------------+---------

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论