MySQL 8.0数据库管理与应用 课件第5、6章 MySQL语言、存储例程_第1页
MySQL 8.0数据库管理与应用 课件第5、6章 MySQL语言、存储例程_第2页
MySQL 8.0数据库管理与应用 课件第5、6章 MySQL语言、存储例程_第3页
MySQL 8.0数据库管理与应用 课件第5、6章 MySQL语言、存储例程_第4页
MySQL 8.0数据库管理与应用 课件第5、6章 MySQL语言、存储例程_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

第5章MySQL语言5.1.1常量1.字符串常量字符串是用单引号“'”或双引号“"”引起来的字节或字符的序列。例如:'Thisisastring.'"Thisisastring.“转义字符是反斜线(\)开头的字符序列。MySQL可识别的字符串转义序列在表5.1中列出。5.1常量和变量5.1.1常量2.数值常量数值常量分为整数常量和浮点数常量。整数常量用一系列阿拉伯数字表示。浮点数常量使用“.”作为小数点。两种类型的数值均可以在前面加一个“-”符号来表示负值。例如:12213,+3911,0,-32,+123456789,-21474836483.十六进制常量十六进制常量可以表示为X'val'或0xval形式,其中val包含十六进制数字(0~9,A~F)。数字中的字母和前导字符X都不区分大小写。但前导字符0x区分大小写,不能写为0X。例如:X'01AF',X'01af',x'01AF',x'01af',0x01AF,0x01af4.日期时间常量日期型常量的数据类型为DATE,其中包括年、月、日3个部分,可以用'2019-07-01'之类的日期字符串来表示。时间型常量的数据类型为TIME,其中包括小时数、分钟数、秒数以及微秒数4个部分,可以用'21:01:16.00026'之类的时间字符串来表示。日期时间型常量的类型为DATETIME或TIMESTAMP,其中包括日期和时间两个部分,可以用'2019-07-0121:07:36'之类的日期时间字符串来表示。DATETIME与TIMESTAMP的区别在于:DATETIME的年份范围为1000~9999,TIMESTAMP的年份范围则为1970~2037;此外,TIMESTAMP还支持时区,并且会忽略时间中的微秒部分。5.1常量和变量5.1.1常量5.位值常量位值常量使用b'val'或0bval形式表示,其中val是使用0和1表示的二进制值。前导字符0b是区分大小写的,不能写成0B。例如:b'01',B'01',0b016.布尔常量布尔常量有两个可能值:TRUE和FALSE,其中TRUE的数字值等于1,FALSE的数字值等于0。这两个常量的名称不区分大小写,写成大写、小写或首字符大写都可以。7.NULL值NULL值表示“没有数据”。NULL值不区分大小写,可以写成NULL、Null或null。NULL值与数值类型的值(如0)或字符串类型的空字符串("")不同。当使用ORDERBY查询结果进行排序时,升序排序中NULL值位于其他值之前,降序排序中NULL值位于其他值之后。5.1常量和变量5.1.2变量1.用户变量使用SET语句对一个或多个用户变量进行初始化:SET@var_name=表达式[,@var_name=表达式]...也可以使用SELECT语句来为用户变量分配一个值。此时赋值运算符必须使用“:=”,而不能使用“=”。2.系统变量MySQL服务器维护两种系统变量,即全局变量和会话变量,其中全局变量影响服务器整体操作,会话变量则影响具体客户端连接的操作。设置全局变量的值时应使用GLOBAL关键字或@@global.前缀设置会话变量的值时应使用SESSION关键字或@@session.前缀,也可以什么都不添加检索所有全局变量的清单:SHOWGLOBALVARIABLES;检索所有会话变量的清单:SHOWSESSIONVARIABLES;5.1常量和变量5.2.1算术运算符算术运算符用于对两个表达式进行数学运算,这两个表达式的值可以是任何数字数据类型。MySQL提供的算术运算符,包括:+(加法)、-(减法)、*(乘法)、/(除法)、DIV(整除)以及%(求余),其中求余运算符%用于计算两个相除得到的余数,也可以写成MOD。加法运算符“+”:用于计算两个或多个值相加得到的和,也可以用于对日期时间值进行算术运算。减法运算符“-”:用于计算两个值相减得到的差。与加法运算符一样,减法运算符也可以用于对日期时间值进行运算。乘法运算符“*”:用于计算两个或多个值相乘得到的积。除法运算符:包括“/”和DIV。其中“/”用于计算两个数相除得到的商,包括小数部分在内;DIV也用于计算两个数相除得到的商,但只取整数部分。在除法运算中,不允许以0作为除数,如果以0作为除数,则返回NULL。求余运算符:包括“%”和MOD,它们的作用完全相同。与除法运算一样,在求余运算中也不允许以0作为除数,如果以0作为除数,则返回NULL。5.2运算符和表达式5.2.2比较运算符等于运算符“=”:用于比较两个表达式的值是否相等,如果相等则返回1,否则返回0,如果两个表达式中有一个为NULL,则返回NULL。等于运算符可以用于比较两个数字表达式,也可以用于比较两个字符串表达式。比较字符串时是不区分大小的,如果要区分大小写,则需要使用BINARY关键字。不等于运算符:包括“<>”和“!=”,它们的作用完全相同。不等于运算符用于比较两个表达式是否不相等,如果不相等则返回1,否则返回0,如果两个表达式中有一个为NULL,则返回NULL。其他比较运算符:“>”、“>=”、“<”、“<=”运算符用于比较左边表达式的值是否大于、大于或等于、小于、小于或等于右边表达式的值,如果关系成立则返回1,否则返回0,如果两个表达式中有一个为NULL,则返回NULL。这些运算符可以用于比较数字和字符串。5.2运算符和表达式5.2.3逻辑运算符逻辑非运算符:包括“NOT”和“!”两种形式,它们的作用完全相同。逻辑非运算符是一个单目运算符,即只有一个操作数。如果操作数为0,则结果为1;如果操作数不为0,则结果为0,NOTNULL返回NULL。逻辑与运算符:包括“AND”和“&&”两种形式,它们的作用完全相同。逻辑与运算符用于测试两个或多个操作数的有效性,如果所有操作数都不为零且不为NULL,则结果为1,如果一个或多个操作数为0,则结果为0;如果任一操作数为NULL,则返回NULL。逻辑或运算符:包括“OR”和“||”两种形式,它们的作用完全相同。当两个操作数都不是NULL时,如果任何操作数非零,则结果为1,否则为0。使用NULL操作数时,如果另一个操作数非零,则结果为1,否则为NULL。如果两个操作数均为NULL,结果为NULL。逻辑异或运算符“XOR”:用于测试两个操作数的值。其运算规则如下:如果任一操作数为NULL,则返回NULL。对于非NULL操作数,如果奇数个操作数非零,则结果为1;否则结果为0。5.2运算符和表达式5.2.4位运算符位取反运算符“~”:是一个一元运算符,其功能是对运算对象按二进制位逐位执行取反操作,即1变0,0变1,并返回一个64位整型数。位与运算符“&”:用于对两个操作数按二进制位执行逐位执行与运算,即两个对应位同时为1则结果为1,两个对应位只要一个为0则结果为0。位与运算符“|”:用于对两个操作数按二进制位执行逐位执行或运算,即两个对应位只要有一个为1则结果为1,两个对应位同时为0则结果为0。位与运算符“^”:用于对两个操作数按二进制位执行逐位执行异或运算,即两个对应位上的数字相等时结果为0,两个对应位上的数字不相等时结果为1。位右移运算符“>>”:将左操作数的各个二进制位向右移动,移动的位数由右操作指定,向右移动一位相当于除以2,移动后左边的空位补0,一个数向右移动n位相当于对这个数除以2n。位右移运算符“<<”:将左操作数的各个二进制位向左移动,移动的位数由右操作指定,向左移动一位相当于乘以2,移动后左边的空位补0,一个数向左移动n位相当于对这个数乘以2n。5.2运算符和表达式5.2.5运算符优先级当一个表达式包含多个运算符时,运算的先后顺序取决于运算符的优先级,运算的顺序将对运算结果产生影响。下面由低到高的顺序列出了运算符的优先级,排列在同一行的运算符具有相同的优先级。BINARY,COLLATE!-(一元运算符,负号),~(一元运算符,位取反)^*,/,DIV,%,MOD-,+<<,>>&|=(比较运算符,相等),<=>,>=,>,<=,<,<>,!=,IS,LIKE,REGEXP,INBETWEEN,CASE,WHEN,THEN,ELSENOTAND,&&XOROR,||=(赋值运算符),:=5.2运算符和表达式5.2.6表达式表达式是由常量、变量、列名、函数和运算符组合而成的式子。一个表达式通常可以计算出一个值,该值称为表达式的值。与常量和变量一样,表达式也具有某种数据类型,可能的数据类型包括字符串型、数值型以及日期时间型。根据表达式的值的数据类型,可以将表达式分为字符串表达式、数值表达式和日期时间表达式。表达式的值有各种形式,可以一个值,也可以是一组值。如果表达式的值可以是一个值,例如一个字符串、一个数值或一个日期,则这种表达式称为标量表达式。例如,1+2*3、'MySQL'以及'A'>='B'等都是标量表达式。如果表达式的值是由不同数据类型组成的一行值,则这种表达式称为行表达式。例如,下面的数据表示一条学生记录,这就是一个行表达式:'18161001','张三','男','1999-09-09','数学',80*0.4+92*0.6如果表达式是由0个、1个或多个行表达式构成的集合,则这种表达式称为表表达式。在MySQL中,表达式一般用于SELECT语句的输出列表和WHERE子句中。5.2运算符和表达式5.3.1数学函数数学函数用于执行各种数学运算,例如计算三角函数、指数函数以及对数函数的值等等。如果在调用数学函数的过程中出现错误,则所有数学函数将返回NULL值。5.3系统内置函数5.3.2字符串函数字符串函数主要用于处理数据库中的字符串数据,例如计算字符串长度、合并字符串、替换字符串以及提取子字符串等。5.3系统内置函数5.3.3日期时间函数日期和时间函数主要用于处理日期和时间数据。用于处理日期值的函数通常会接受日期时间值而忽略时间部分,而用于时间值的函数通常接受日期时间值而忽略日期部分。此外,许多日期函数还可以接受数值和字符串类型的参数。5.3系统内置函数5.3.5系统信息函数MySQL提供了一些系统信息函数,可以用来获取MySQL服务器的版本号、当前连接的用户和数据库以及字符串的字符集和排序方式等信息。5.3系统内置函数5.3.4流程控制函数1.IF()函数IF(表达式1,表达式2,表达式3)2.IFNULL()函数IFNULL(表达式1,表达式2)3.NULLIF()函数NULLIF(表达式1,表达式2)4.CASE()函数将某个表达式与一组表达式进行比较以确定结果:CASE输入表达式

WHEN[匹配表达式]THEN结果表达式

[WHEN[匹配表达式]THEN结果表达式...]...[ELSE结果表达式]END计算一组表达式的值以确定结果:CASEWHEN[条件]THEN结果

[WHEN[条件]THEN结果...]...[ELSE结果]END5.3系统内置函数5.3.6加密函数1.MD5()函数MD5()函数用于计算字符串的128位MD5校验和:MD5(str)2.SHA1()和SHA2()函数SHA1()函数用于计算字符串的160位SHA-1校验和:SHA1(str)SHA2()函数用于计算SHA-2系列散列函数(SHA-224、SHA-256、SHA-384和SHA-512):SHA2(str,hash_length)3.AES_ENCRYPT()和AES_DECRYPT()函数AES_ENCRYPT()函数使用密钥字符串key_str对字符串str进行加密,并返回包含加密输出的二进制字符串:AES_ENCRYPT(str,key_str[,init_vector])AES_DECRYPT()函数使用密钥字符串key_str对已加密字符串crypt_str进行解密并返回原始的明文字符串:AES_DECRYPT(crypt_str,key_str[,init_vector])5.3系统内置函数5.3.7类型转换函数1.CAST()函数CAST()函数用于将一个表达式的值转换为另一种数据类型:CAST(exprAStype)其中参数expr给出要转换的表达式;type指定要转换的目标数据类型。也可以使用CAST()函数将一个字符串转换到一个不同的字符集:CAST(character_stringAScharacter_data_typeCHARACTERSETcharset_name)2.CONVERT()函数CONVERT()函数用于转换表达式的数据类型或字符串的字符集,有以下两种语法格式。CONVERT(expr,type)CONVERT(exprUSINGtranscoding_name)5.3系统内置函数5.3.8杂项函数1.处理IPv4网址(1)INET_ATON()函数用于返回IPv4网址的数值:INET_ATON(expr)(2)INET_NTOA()函数用于从数值返回IPv4地址:INET_NTOA(expr)(3)IS_IPV4()函数用于判断传入的参数是否为有效的IPv4网址:IS_IPV4(expr)2.处理IPv6网址(1)INET6_ATON()用于返回IPv6网址的数值:INET6_ATON(expr)(2)INET6_NTOA()函数用于从数值返回IPv6地址:INET6_NTOA(expr)(3)IS_IPV6()用于判断传入的参数是否为有效的IPv6网址:IS_IPV6(expr)5.3系统内置函数5.3.8杂项函数3.处理UUID(1)UUID()函数用于生成一个通用唯一标识码(UUID):UUID()(2)UUID_TO_BIN()函数将字符串形式的UUID转换为二进制UUID并返回结果:UUID_TO_BIN(string_uuid[,swap_flag])(3)BIN_TO_UUID()函数将二进制UUID转换为字符串并返回结果:BIN_TO_UUID(binary_uuid[,swap_flag])(4)IS_UUID()函数用于测试传入的参数是否是有效的UUID:IS_UUID(string_uuid)4.暂停函数SLEEP()函数用于休眠几秒钟:SLEEP(duration)5.3系统内置函数第6章存储例程6.1.1创建存储过程使用CREATEPROCEDURE语句在数据库中创建存储过程:CREATE[DEFINER={用户|CURRENT_USER}]PROCEDURE存储过程名称([参数[,...]])[特征...]过程体参数:[IN|OUT|INOUT]参数名称数据类型特征:COMMENT'字符串'|LANGUAGESQL|[NOT]DETERMINISTIC|{CONTAINSSQL|NOSQL|READSSQLDATA|MODIFIESSQLDATA}|SQLSECURITY{DEFINER|INVOKER}6.1存储过程6.1.2调用存储过程使用CALL语句调用存储过程:CALL存储过程名称[()]CALL存储过程名称([参数[,...]])CALL语句调用先前使用CREATEPROCEDURE定义的存储过程。默认情况下,CALL语句将调用包含在当前数据库中的存储过程。如果要调用包含在指定数据库中的存储过程,则应以“数据库名称.存储过程名称”格式来指定存储过程。1.调用无参存储过程存储过程名称后面的圆括号可以省略不写。2.调用带IN参数的存储过程将常量、用户变量或其他表达式作为输入参数传入存储过程,然后在存储过程中使用所传入的参数值。在CALL语句中使用的输入参数应与创建存储过程时定义的IN参数数量相同,数据类型一致。3.调用带OUT参数和INOUT参数的存储过程要使用OUT或INOUT参数从存储过程中获取值,可以通过用户变量向存储过程传递参数,并在存储过程返回后检查和使用用户变量的值。6.1存储过程6.1.2调用存储过程4.在预处理语句中调用存储过程使用预处理语句可以通过以下3个SQL语句来实现。(1)使用PREPARE语句准备一个SQL语句并为其分配名称,以便稍后引用该语句:PREPAREstmt_nameFROMpreparable_stm;(2)使用EXECUTE语句执行先前通过PREPARE命名的语句:EXECUTEstmt_name[USING@var_name[,@var_name]...];(3)使用DEALLOCATEPREPARE语句解除先前用PREPARE生成的预处理语句,语法格式如下。{DEALLOCATE|DROP}PREPAREstmt_name在与PREPARE和EXECUTE一起使用的预处理的CALL语句中,占位符可以用于IN参数、OUT参数和INOUT参数。6.1存储过程6.1.3修改存储过程使用ALTERPROCEDURE语句对存储过程的特征进行修改:ALTERPROCEDURE存储过程名称[特征...]特征:COMMENT'字符串'|LANGUAGESQL|{CONTAINSSQL|NOSQL|READSSQLDATA|MODIFIESSQLDATA}|SQLSECURITY{DEFINER|INVOKER}其中各个特征的作用与CREATEPROCEDURE语句相同。6.1存储过程6.1.4删除存储过程使用DROPPROCEDURE语句从数据库中删除存储过程:DROPPROCEDURE[IFEXISTS]存储过程名称这个语句可以用于删除存储过程,即从服务器中删除指定的例程。要使用这个语句,必须拥有该过程的ALTERROUTINE权限。如果启用了automatic_sp_privileges系统变量,则在创建过程时会自动将该特权和EXECUTE权限授予过程的创建者,并在过程被删除时从创建者中删除。IFEXISTS子句是MySQL扩展。如果存储过程不存在,使用该子句可以防止发生错误。6.1存储过程6.2.1复合语句编写存储例程时可以使用BEGIN...END复合语句来包含多个语句:[开始标签:]BEGIN[语句列表]END[结束标签]其中语句列表可以包含一个或多个语句,每个语句都必须用分号“;”来结束。复合语句可以使用标签来标记。例如:lable1:BEGINUSEtest;SHOWTABLES;...ENDlabel1使用多重语句需要客户端能发送包含语句定界符“;”的查询字符串。这个符号在命令行客户端被用DELIMITER命令来处理,即对语句结束符“;”进行修改,例如更改为“//”,这样就使得默认的语句结束符“;”可以用在子程序体中使用。除了BEGIN...END之外,标签也可以用于LOOP、REPEAT和WHILE语句。6.2编写例程语句6.2.2声明局部变量1.使用DECLARE语句声明局部变量DECLARE变量名[,...]类型[DEFAULT值]使用DECLARE语句声明局部变量时,需要指定变量的名称和数据类型,还可以给变量提供一个默认值。与用户变量不同,命名局部变量时不要以@符号开头。DEFAULT子句用于给局部变量提供一个默认值,该默认值可以指定为一个表达式。如果没有DEFAULT子句,则变量的初始值为NULL。2.使用SET语句设置局部变量SET变量=表达式[,变量=表达式]...其中变量可以是子程序内声明的局部变量,也可以是用户变量或系统变量。在存储例程中使用的SET语句是一般SET语句的扩展版本,允许使用SETa=x,b=y,...这样的扩展语法。3.使用SELECT...INTO语句将列值存储到局部变量中SELECT列名[,...]INTO变量名[,...]FROM表名6.2编写例程语句6.2.2声明局部变量1.使用DECLARE语句声明局部变量DECLARE变量名[,...]类型[DEFAULT值]使用DECLARE语句声明局部变量时,需要指定变量的名称和数据类型,还可以给变量提供一个默认值。与用户变量不同,命名局部变量时不要以@符号开头。DEFAULT子句用于给局部变量提供一个默认值,该默认值可以指定为一个表达式。如果没有DEFAULT子句,则变量的初始值为NULL。2.使用SET语句设置局部变量SET变量=表达式[,变量=表达式]...其中变量可以是子程序内声明的局部变量,也可以是用户变量或系统变量。在存储例程中使用的SET语句是一般SET语句的扩展版本,允许使用SETa=x,b=y,...这样的扩展语法。3.使用SELECT...INTO语句将列值存储到局部变量中SELECT列名[,...]INTO变量名[,...]FROM表名6.2编写例程语句6.2.3条件语句1.IF语句在存储例程中使用IF语句实现来一个基本的选择结构:IF条件THEN

语句序列[ELSEIF条件THEN

语句序列]...[ELSE

语句序列]ENDIFIF语句的执行流程是:首先对IF后面的条件表达式进行计算,如果计算结果为真,则执行THEN后面的语句序列;否则计算ELSEIF后面的条件,如果计算结果为真,则执行相应的THEN后面的语句序列,以此类推。如果所有条件都不为真,则执行ELSE子句中的语句序列。语句序列可以包含一个或多个语句,不允许使用空的语句序列。6.2编写例程语句6.2.3条件语句2.CASE语句(1)将一个输入表达式的值与一组匹配表达式的值进行比较以确定要执行的语句序列:CASE输入表达式

WHEN匹配表达式THEN

语句序列

[WHEN匹配表达式THEN

语句序列]...[ELSE

语句序列]ENDCASE执行这种格式的CASE语句时,首先计算CASE后面的输入表达式的值,然后将该值与第一个WHEN关键字后面的匹配表达式进行比较,如果两者相等,则执行第一个THEN后面的语句序列;否则与第二个WHEN匹配表达式进行比较,如果两者相等,则执行相应的THEN后面的语句序列,以引类推。如果WHEN输入表达式的值与任何WHEN匹配表达式的值都不相等,则执行ELSE关键字后面的语句序列。6.2编写例程语句6.2.3条件语句2.CASE语句(2)计算一组表达式的值以确定要执行的语句序列,语法格式如下。CASEWHEN条件THEN

语句序列

[WHEN条件THEN

语句序列]...[ELSE

语句序列]ENDCASE执行这种格式的CASE语句时,首先计算第一个WHEN关键字后面的条件的值,如果该值为TRUE,则执行第一个THEN后面的语句序列;否则计算第二个WHEN条件的值,如果该值为TRUE,则执行相应的THEN后面的语句序列,以此类推。如果所有条件均为FALSE,则执行ELSE后面的语句序列。6.2编写例程语句6.2.4循环语句1.WHILE语句WHILE语句的功能在循环条件为真时重复执行一组语句:[开始标签:]WHILE条件DO

语句序列ENDWHILE[结束标签]WHILE语句的执行流程如下:首先计算WHILE关键字后面的循环条件的值,如果该值为真,则执行一次DO关键字后面的语句序列(循环体);然后再次计算循环条件的值,如果该值仍为真,则继续执行循环体,以此类推;直至循环条件变为假,结束循环。WHILE语句可以使用标签进行标注。除非存在开始标签,才能使用结束标签。如果两者都存在,则它们必须是相同的。6.2编写例程语句6.2.4循环语句2.REPEAT语句REPEAT语句的功能是当给定条件为假时重复执行一组语句,语法格式如下。[开始标签:]REPEAT

语句序列UNTIL条件ENDREPEAT[结束标签]REPEAT语句的执行流程如下:首先执行一次循环体内的语句序列(循环体),然后计算UNTIL关键字后面的条件表达式的值,如果该值为假,则继续执行循环体,以此类推;直至条件表达式变为真,结束循环。REPEAT语句可以使用标签进行标注。除非存在开始标签,结束标签才能使用。如果两者都存在,则它们必须是一样的。6.2编写例程语句6.2.4循环语句3.LOOP语句LOOP语句用于无条件重复执行一组语句,语法格式如下。[开始标签:]LOOP

语句序列ENDLOOP[结束标签]LOOP语句用于实现一个简单的循环结构,可以一直重复执行循环体内的语句,直至退出循环。LOOP语句可以使用标签进行标注。LOOP语句本身并不能进行条件判断。要退出循环,通常需要在循环体内使用一个IF语句,当给出条件为真时执行一个LEAVE语句,从而结束循环体的执行。LEAVE语句用于退出任何被标注的流程控制结构,它与BEGIN...END或循环一起被使用,语法格式如下。LEAVE标签在循环语句中,还可以与IF语句一起使用ITERATE语句,当给出条件为真时提前结束本轮循环,继续执行下一轮循环,语法格式如下。ITERATE标签6.2编写例程语句6.2.5错误处理程序1.命名条件DECLARE条件名称CONDITIONFOR条件值条件值:MySQL错误代码|SQLSTATE[VALUE]SQLSTATE值2.声明处理程序DECLARE处理程序操作HANDLERFOR条件值[,条件值]...处理语句处理程序操作:CONTINUE|EXIT|UNDO条件值:MySQL错误代码|SQLSTATE[VALUE]SQL状态值|条件名称|SQLWARNING|NOTFOUND|SQLEXCEPTION6.2编写例程语句6.2.5错误处理程序声明处理程序的常见格式:(1)基于MySQL错误代码命名一个条件并在声明处理程序时引用该名称(2)基于SQLSTATE值命名一个错误条件并在声明处理程序时引用该名称(3)基于SQLWARNING条件声明处理程序(4)基于NOTFOUND条件声明处理程序(5)基于SQLEXCEPTION条件声明处理程序6.2编写例程语句6.2.6游标1.声明游标DECLARE游标名称CURSORFORSELECT语句2.打开游标OPEN游标名称3.使用游标FETCH[[NEXT]FROM]游标名称INTO变量名[,变量名]...4.关闭游标CLOSE游标名称6.2编写例程语句6.3.1创建存储函数使用CREATEFUNCTION语句在数据库中创建存储函数:CREATE[DEFINER={用户|CURRENT_USER}]FUNCTION存储函数名称([参数[,...]])RETURNS类型[特征...]函数体参数:参数名类型类型:任何有效的MySQL数据类型特征:COMMENT'字符串'|LANGUAGESQL|[NOT]DETERMINISTIC|{CONTAINSSQL|NOSQL|READSSQLDATA|MODIFIESSQLDATA}|SQLSECURITY{DEFINER|INVOKER}函数体:有效的SQL例程语句6.3存储函数6.3.2调用存储函数在数据库中创建存储函数之后,可以像调用MySQL系统内置函数一样在表达式中引用该函数:存储函数名称([参数[,...]])在表达式求值过程中存储函数会返回一个值。不能使用CALL语句来调用存储函数。6.3.3修改存储函数使用ALTERFUNCTION语句修改现有存储函数的特征:ALTERFUNCTION存储函数名称[特征...]特征:COMMENT'字符串'|LANGUAGESQL|{CONTAINSSQL|NOSQL|READSSQLDATA|MODIFIESSQLDATA}|SQLSECURITY{DEFINER|INVOKER}6.3存储函数6.3.4删除存储函数对于不再需要的存储函数,可以使用DROPFUNCTION语句将其删除,语法格式如下。DROPFUNCTION[IFEXISTS]存储函数名称其中存储函数名称指定要删除的存储函数。IFEXISTS子句是MySQL扩展。如果存储函数不存在,使用该子句可以防止发生错误。要使用DROPFUNCTION语句,必须拥有该函数的ALTERROUTINE权限。例如,下面的语句从test数据库中删除名为sf的存储函数。USEtest;DROPFUNCTIONsf;6.3存储函数6.4.1创建触发器使用CREATETRIGGER创建一个新的触发器:

温馨提示

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

评论

0/150

提交评论