视图
语法:CREATE VIEW 视图名 AS SELECT 字段名 FROM 表 WHERE 条件
创建一个视图存储 工资大于1210的员工信息
CREATE VIEW zgview AS SELECT zg_num,wh_num FROM zg WHERE zg_gz>1210
查看视图
SELECT * FROM information_schema.VIEWS;
DESC zgview
获取视图映射数据
SELECT * FROM zgview
CREATE VIEW allwhdatd
AS SELECT wh.*,zg.*,po.*,gy.*
FROM wh,zg,po,gy WHERE
wh.wh_num=zg.zwh_num AND
zg.zg_num=po.pzg_num AND
po.pgy_num=gy.gy_num
SELECT * FROM allwhdatd
DESC wh
plsql:类似于C的语法的完整的数据库端的编程语言【完整度--数据库大小】
MySQL中plsql
因为MySQL对plsql支持的比较晚,支持语法有所欠缺
MySQL中支持两种方式编写业务脚本
存储过程
自定义函数
不能做的
离开这个载体自由编写业务代码块
mysql中的存储过程
解释:
存储类似函数的一种定义规范,或者封装代码规范
创建语法:
crezte procedure 【if not exists]】存储名(【[in/out/inout] 参数名 参数类型,……】)
定义信息
begin
定义变量
存储过程需要的业务内容
end
备注:存储过程名按标识符的定义语法规范 要求以 pro_ 开头
参数:可以有0个或多个参数,参数是我们在调用存储过程的时候
需要传入的数据,参数前面可以加in/out/inout等标识
in ---- 调用者传入的数据
out ---- 用于存储过程执行过程需要返回给调用者的数据,存储
定义信息:编写注释信息
定义变量:用于定义变量存储信息
存储过程业务:编写业务
解决分号问题 --- 提供方式就是临时将;改为其他符号
语法:
delimiter 临时结束符号; -- // 或$$
调用存储过程:
call 存储过程名(实参列表)
删除
DROP PROCEDURE 【if not exists]】存储名
创建一个简单的存储过程 -- 获取所有员工和供应商信息
-- 修改结束符号 DELIMITER // -- 创建 CREATE PROCEDURE pro_empandsup() COMMENT'这是一个存储所有员工和供应商信息的过程' BEGIN -- 查询所有的员工 SELECT * FROM zg;
-- 查询所有供应商 SELECT * FROM gy;
-- 当前用户 SELECT USER();
END// -- 结束符修改回来 DELIMITER;
-- 调用 CALL pro_empandsup();
-- 删除 DROP PROCEDURE pro_empandsup;
存储过程中的变量定义
分类:
MySQL用户变量--全局变量
set @变量名=初始值
使用:sql语句直接调用
局部变量:
是定义存储过程和函数里面的变量,只有在begin和end之间有效
定义语法
declare 变量名 变量类型(长度)【default 默认值】
解释:
变量名:标识符定义 为了区分 以var_开头
变量类型:按照数据库的字段类型定义
默认值:就是变量初始化信息
赋值以及运算:
set 变量名=表达式
set 变量名:=表达式
变量类型:
按照数据库中字段类型
-- 用户变量
SET @mydatd=1234;
-- 查看
SELECT @mydatd;
-- 数据库中的数据赋值
SELECT zg_gz INTO @mydatd FROM zg WHERE zg_num='E1'
-- 局部变量
DELIMITER //
CREATE PROCEDURE pro_vardata()
COMMENT'这是一个定义局部变量的存储过程'
BEGIN
-- 定义变量
DECLARE var_num INT DEFAULT 1;
SELECT var_num;
-- 计算
SET var_num=var_num+1;
SELECT var_num;
-- 计算
SET var_num:=var_num*10;
-- 查询
SELECT var_num;
END//
DELIMITER;
-- 调用
CALL pro_vardata();
-- 删除
DROP PROCEDURE pro_vardata;
流程控制语句
条件判断
if elseif else end if
语法
1)if 条件表达式 then
执行语句
else
执行语句
end if
2)if 条件表达式 then
执行语句
end if
3)if 条件表达式1 then
执行语句
slseif 条件表达式2 then
执行语句
else
执行语句
end if
选择:
case when else end case
语法:
case 【条件值】
when 条件 then
执行语句
when 条件 then
执行语句
else
执行语句
end case
if 条件运算存储过程
DELIMITER //
CREATE PROCEDURE pro_ifdemo()
COMMENT'if 条件语句'
BEGIN
-- 定义变量
DECLARE var_num INT DEFAULT 1;
-- 计算
SET var_num=2;
-- 判断
IF var_num<2 THEN
-- 输出
SELECT var_num*10;
ELSEIF var_num=2 THEN
SELECT var_num*100;
ELSE
SELECT var_num*1000;
END IF;
END//
DELIMITER ;
-- 调用
CALL pro_ifdemo();
-- 删除
DROP PROCEDURE pro_ifdemo;
-- 选择语句 case
DELIMITER //
CREATE PROCEDURE pro_casedemo()
COMMENT'case 条件语句'
BEGIN
-- 定义变量
DECLARE var_num INT DEFAULT 5;
-- 选择
CASE var_num
WHEN 2 THEN
SELECT var_num*10;
WHEN 5 THEN
SELECT var_num*100;
ELSE
SELECT var_num*5;
END CASE;
END//
DELIMITER ;
DELIMITER //
-- 调用
CALL pro_casedemo();
-- 删除
DROP PROCEDURE pro_casedemo;
/*
循环语句
1.while
while 条件表达式 do
执行语句
end while;
2.loop
名字:loop
执行语句
leave 名字
end loop;
3.repeat
repeat
执行语句;
until 结束条件 end repeat;
*/
-- 计算1—100的和
-- 循环 while
DELIMITER //
CREATE PROCEDURE pro_whiledemo()
COMMENT'while 循环语句'
BEGIN
-- 定义变量
DECLARE var_num INT DEFAULT 1;
DECLARE var_sum INT DEFAULT 0;
-- 循环计算
WHILE var_num<=100 DO
-- 计算
SET var_sum=var_sum+var_num;
-- 计数器变化
SET var_num=var_num+1;
-- 结束
END WHILE;
-- 显示
SELECT var_sum;
END//
DELIMITER ;
-- 调用
CALL pro_whiledemo();
-- 删除
DROP PROCEDURE pro_whiledemo;
-- loop 循环
DELIMITER //
CREATE PROCEDURE pro_loopdemo()
COMMENT'loop 循环语句'
BEGIN
-- 定义变量
DECLARE var_num INT DEFAULT 1;
DECLARE var_sum INT DEFAULT 0;
-- loop 循环
mloop:LOOP
-- 累加
SET var_sum=var_sum+var_num;
-- 判断计数器
IF var_num=100 THEN
-- 离开loop 结束循环
LEAVE mloop;
END IF;
-- 自增
SET var_num=var_num+1;
END LOOP;
-- 显示
SELECT var_sum;
END//
DELIMITER ;
-- 调用
CALL pro_loopdemo();
-- 删除
DROP PROCEDURE pro_loopdemo;
-- repeat 循环
DELIMITER //
CREATE PROCEDURE pro_repeatdemo()
COMMENT'repeat 条件语句'
BEGIN
-- 定义变量
DECLARE var_num INT DEFAULT 1;
DECLARE var_sum INT DEFAULT 0;
-- repeat 循环
REPEAT
-- 累加
SET var_sum=var_sum+var_num;
-- 计数器变化
SET var_num=var_num+1;
-- 结束循环
UNTIL var_num>100
END REPEAT;
-- 显示
SELECT var_sum;
END//
DELIMITER ;
-- 调用
CALL pro_repeatdemo();
-- 删除
DROP PROCEDURE pro_repeatdemo;