# 存储过程:一组经过预先编译的SQL语句的封装
# 视图主要针对的是查询操作,存储过程可以是更为复杂的SQL语句,比如增删改
# 存储过程没有返回值。
# 存储过程的参数类型可以是IN、OUT和NOUT,可以分为:
# 1、没有参数(无参数无返回)
# 2、仅仅带IN类型(有参数无返回)
# 3、仅仅带OUT类型(无参数有返回)
# 4、既带IN又带OUT(有参数有返回值)
# 5、有INOUT(有参数有返回值)
# 设置新的结束标记
# DELIMITER 新的结束标记
DELIMITER $
SELECT * FROM demo.employees$
DELIMITER ;
# 存储过程:
# DELIMITER 新的结束标记
# CREATE PROCEDURE 存储过程名(IN\OUT\INOUT 参数名 参数类型 ...)
# BEGIN
# 存储过程体
# END 新的标识符
# DELIMITER ;
# 存储过程的调用
# CALL 存储过程名();
USE demo1;
SELECT DATABASE() FROM dual;
# 查看所有员工信息
DELIMITER $
CREATE PROCEDURE select_all()
BEGIN
SELECT * FROM demo1.employees;
END $
DELIMITER ;-- 这个软件不行,运行报错,这个是对的
CALL select_all();
# 查看员工的平均工资
DELIMITER $
CREATE PROCEDURE select_salary_avg()
BEGIN
SELECT AVG(salary) AS "平均月工资" FROM employees;
END $
DELIMITER ;
CALL select_salary_avg();
# 用上OUT
DELIMITER $
CREATE PROCEDURE
# 视图:一个或多个数据表里的数据的逻辑显示,视图并不存储数据,虚表。
# 视图是建立在已有表的基础上,视图赖以建立的这些表叫做基表。
# 可以理解为存储起来的SELECT语句,简化查询,控制视图的访问
# 对视图的创建和删除不会影响基表。
# 创建视图CREATE VIEW
# CREATE VIEW 视图名称 AS 查询语句
# 查询语句中的别名会作为视图的列名
# 如果想在视图起别名,可以在视图名称(别名1,别名2....),注意一一对应,不用加单引号
CREATE TABLE IF NOT EXISTS demo1.employees AS
SELECT * FROM demo.employees;
SELECT * FROM demo1.employees;
CREATE VIEW view_employees(名字,性别,月工资) AS SELECT name,sex,salary FROM demo.employees;
CREATE VIEW view_employees AS SELECT name,sex,salary FROM demo.employees;
# 查看具体的一个视图
# SELECT 列名 FROM 视图名;
SELECT * FROM view_employees;
# 基于视图来创建视图
# CREATE VIEW 视图名称 AS SELECT 列名... FROM 视图名称;
CREATE VIEW view_employees_copy AS SELECT * FROM demo.view_employees;
SELECT * FROM demo.view_employees_copy;
# 查看数据库下的视图
# 1、查看数据库下的表对象、视图对象
# SHOW TABLES;
# 2、查看具体视图的结构
# DESC/DESCRIBE 视图名称;
DESC view_employees;
# 3、查看视图的属性信息
# SHOW TABLE STATUS LIKE '视图名称';
SHOW TABLE STATUS LIKE 'view_employees';
# 4、查看视图的详细定义信息
# SHOW CREATE VIEW 视图名称;
SHOW CREATE VIEW view_employees;
# 对视图的更新
# UPDATE 视图名称 SET 列名 = 更改的数据 WHERE 过滤条件;
SELECT * FROM demo.view_employees_copy;
SELECT * FROM demo.employees;
UPDATE demo.view_employees_copy SET 月工资 = 12000 WHERE 名字 = '斯蒂芬.库里';
UPDATE demo.employees SET salary = 10000 WHERE name = '斯蒂芬.库里';
# 注意:基于一些多行函数,年工资(如AVG,SUM这种)得到的视图,对这个列进行修改,会报错误!
# 对视图的更新和删除是和基表有一对一关系才能运行。视图一般用于查询操作
# 对视图中数据的删除
# DELETE FROM 视图名称 WHERE 过滤条件;
# 删除整个视图
# DROP VIEW IF EXISTS 视图名称1,视图名称2;
SHOW TABLES;
DROP VIEW IF EXISTS view_employess;
# 如果删除了基于视图1创建的视图2,那么视图1也不能用了