视图
视图就是将一条sql查询语句封装起来,之后使用sql时,只需要查询视图即可,查询视图时会将这条sql语句再次执行一遍。视图不保存数据,数据还是在表中。
SELECT 语句所查询的表称为视图的基表,而查询的结果集称为虚拟表,视图本身并不存储具体的数据,视图的数据存在于视图的基表中,基本表数据发生了改变,视图的数据也会跟着改变,因为查询语句时不变的,使用视图时会将sql语句再调用一次。
-- 定义视图:
create view 视图名 as 查询语句(select 列1,列2...from 表)
-- 使用视图
select * from 视图名
-- 删除视图
drop view 视图名
存储过程
存储过程是什么?
如果实现用户的某些需求时,需要编写一组复杂的 SQL 语句才能实现,那么可以将这组复杂的 SQL 语句集编写在数据库中,由 JDBC 调用来执行这组 SQL语句。把编写在数据库中的 SQL 语句集称为存储过程。
存储过程也就是将逻辑处理的过程是放在数据库中,而不放在java后端代码中,就类似于java语言中的方法,需要先定义,使用时调用。将一些逻辑处理的代码可以事先存储在数据库中,然后使用时直接调用即可。可以减少应用程序与数据库之间的交互次数。
语法格式
存储过程事先需要创建好(包含逻辑),存储过程中可以传入参数。参数分为3种,in(输入参数) out(输出参数) inout(即可以输入还可以输出):
create procedure 存储过程名([in 变量名 类型,out 参数 2,…])
begin
[declare 变量名 类型 [DEFAULT 值];]
存储过程语句块;
end;
CREATE VIEW test ASSELECT * FROM admin; -- 创建视图
SELECT * FROM test -- 使用视图
DROP VIEW test -- 删除视图
-- 创建存储过程
DELIMITER $$
CREATE PROCEDURE `gradedb`.`test1`(IN namess INT)
BEGIN
DECLARE a INT DEFAULT 0;
SELECT a;
SET namess=10;
SELECT namess;
END$$
DELIMITER ;
-- 调用存储过程
CALL test1(1);
-- 流程控制语句
DELIMITER $$
CREATE PROCEDURE `gradedb`.test2(IN t_day INT )
BEGIN
IF t_day=1 THEN
SELECT"星期一";
ELSEIF t_day =2 THEN
SELECT"星期二";
ELSE SELECT"无效日期";
END IF;
END$$
DELIMITER ;
-- 调用存储过程
CALL test2(2);
-- case when
DELIMITER $$
CREATE PROCEDURE `gradedb`.test3 (IN t_day INT)
BEGIN
CASE
WHEN t_day = 1
THEN
SELECT
"星期一";
WHEN t_day = 2
THEN
SELECT
"星期二";
END CASE;
END $$
-- 调用存储过程
CALL test3(1);
-- 循环
DELIMITER $$
CREATE PROCEDURE `gradedb`.test4 ()
BEGIN
DECLARE v_num INT DEFAULT 0;
-- 循环开始
addnum :LOOP
SET v_num = v_num + 1;
IF v_num = 10
THEN LEAVE addnum;
END IF;
END LOOP;
-- 循环结束
SELECT
v_num;
END $$
-- 调用存储过程
CALL test4()
举例:
创建存储过程,完成一个逻辑实现