《php第7章 MySQL数据库基础》.ppt

【例7.44】 创建PXSCJ数据库上的计算机专业学生的平均成绩视图CS_KC_AVG,包括学号(在视图中列名为num)和平均成绩(在视图中列名为score_avg)。 CREATE VIEW CS_KC_AVG(num, score_avg) AS SELECT 学号,AVG(成绩) FROM CS_KC GROUP BY 学号; 视图定义后,就可以像查询基本表那样对视图进行查询。 【例7.45】 在视图CS_KC中查找计算机专业的学生学号和选修的课程号。 SELECT 学号, 课程号 FROM CS_KC; 【例7.46】 查找平均成绩在80分以上的学生的学号和平均成绩。 本例首先创建学生平均成绩视图XS_KC_AVG,包括学号(在视图中列名为num)和平均成绩(在视图中列名为score_avg)。 创建学生平均成绩视图XS_KC_AVG: CREATE VIEW XS_KC_AVG ( num,score_avg ) AS SELECT 学号, AVG(成绩) FROM CJB GROUP BY 学号; 再对XS_KC_AVG视图进行查询。 SELECT * FROM XS_KC_AVG WHERE score_avg>=80; 查询结果为: 语法格式如下: DROP VIEW [IF EXISTS] view_name [, view_name] ... 其中view_name是视图名,声明了IF EXISTS,若视图不存在的话,不会出现错误信息。使用DROP VIEW一次可删除多个视图。例如: DROP VIEW CS_KC, XS_KC_AVG; 将删除视图CS_KC和XS_KC_AVG。 7.8.1 存储过程 使用存储过程的优点如下: 存储过程在服务器端运行,执行速度快。 存储过程执行一次后,其执行规划就驻留在高速缓冲存储器,在以后的操作中,只需从高速缓冲存储器中调用已编译好的二进制代码执行,提高了系统性能。 确保数据库的安全。使用存储过程可以完成所有数据库操作,并可通过编程方式控制上述操作对数据库信息访问的权限。 1. 创建存储过程 存储过程可以由声明式SQL语句(如CREATE、UPDATE和SELECT等语句)和过程式SQL语句(如IF-THEN-ELSE语句)组成。创建存储过程使用CREATE PROCEDURE语句,语法格式如下: CREATE PROCEDURE sp_name ([[ IN | OUT | INOUT ] param_name type [,...]]) 是存储过程的主体部分,也叫做存储过程体。它包含了在过程调用的时候必须执行的语句,这个部分总是以BEGIN开始,以END结束。当然,当存储过程体中只有一个SQL语句时可以省略BEGIN-END标志。另外,BEGIN-END复合语句还可以嵌套使用。 在开始创建存储过程之前,先介绍一个很实用的命令:DELIMITER命令。在MySQL中,服务器处理语句的时候是以分号为结束标志的。但是在创建存储过程的时候,存储过程体中可能包含多个SQL语句,每个SQL语句都是以分号为结尾的,这时服务器处理程序遇到第一个分号的时候就会认为程序结束,这肯定是不行的。所以这里使用DELIMITER命令将MySQL语句的结束标志修改为其他符号。例如: DELIMITER $$ 执行完这条命令后,程序结束的标志就换成两个美元符“$$”了。 要想恢复使用分号“;”作为结束符,运行下面命令即可: DELIMITER ; 存储过程体中可以包含所有类型的SQL语句,另外还可以包含以下内容。 (1)局部变量 使用DECLARE语句声明局部变量,例如,声明一个整型变量和两个字符变量: DECLARE num INT(4); DECLARE str1, str2 VARCHAR(6); 说明:局部变量只能在BEGIN_END语句块中声明。 (2)使用SET语句赋值 要给局部变量赋值,可以使用SET语句,例如: SET num=1, str1= 'hello'; 说明:这条语句无法单独执行,只能在存储过程和存储函数中使用。 (3)SELECT...INTO语句 使用SELECT…INTO语句可以把选定的列值直接存储到变量中。因此,返回的结果只能有一行。例如: SELECT 姓名,专业 INTO name, project FROM XSB WHERE 学号= '081101'; (4)流程控制语句 在MySQL中,常见的过程式SQL语句可以用在一个存储过程体中。例如,IF语句、CASE语句、WHILE语句等。 IF语句。IF-THEN-ELSE语句可根据不同的条件执行