视图,索引

58 阅读5分钟

视图

语法: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;