视图

含义:理解成一张虚拟的表

视图和表的区别:

  1. 使用方式 占用物理空间
  2. 视图 完全相同 不占用,仅仅保存的是sql逻辑
  3. 完全相同 占用

视图的好处:

  1. 1sql语句提高重用性,效率高
  2. 2、和表实现了分离,提高了安全性

视图的创建

语法:
CREATE VIEW 视图名
AS
查询语句;

视图的增删改查

1、查看视图的数据 ★

  1. SELECT * FROM my_v4;
  2. SELECT * FROM my_v1 WHERE last_name='Partners';
  3. 2、插入视图的数据
  4. INSERT INTO my_v4(last_name,department_id) VALUES('虚竹',90);
  5. 3、修改视图的数据
  6. UPDATE my_v4 SET last_name ='梦姑' WHERE last_name='虚竹';
  7. 4、删除视图的数据
  8. DELETE FROM my_v4;

某些视图不能更新

包含以下关键字的sql语句:分组函数、distinct、group by、having、union或者union all
常量视图
Select中包含子查询
join
from一个不能更新的视图
where子句的子查询引用了from子句中的表

视图逻辑的更新

方式一:
CREATE OR REPLACE VIEW test_v7
AS
SELECT last_name FROM employees
WHERE employee_id>100;

  1. #方式二:
  2. ALTER VIEW test_v7
  3. AS
  4. SELECT employee_id FROM employees;
  5. SELECT * FROM test_v7;

视图的删除

DROP VIEW test_v1,test_v2,test_v3;
视图结构的查看
DESC test_v7;
SHOW CREATE VIEW test_v7;

存储过程和函数

含义:一组经过预先编译的sql语句的集合
好处:

  1. 1、提高了sql语句的重用性,减少了开发程序员的压力
  2. 2、提高了效率
  3. 3、减少了传输次数

分类:

  1. 1、无返回无参
  2. 2、仅仅带in类型,无返回有参
  3. 3、仅仅带out类型,有返回无参
  4. 4、既带in又带out,有返回有参
  5. 5、带inout,有返回有参
  6. 注意:inoutinout都可以在一个存储过程中带多个

创建存储过程

语法:

  1. create procedure 存储过程名(in|out|inout 参数名 参数类型,...)
  2. begin
  3. 存储过程体
  4. end

类似于方法:

  1. 修饰符 返回类型 方法名(参数类型 参数名,...){
  2. 方法体;
  3. }

注意

  1. 1、需要设置新的结束标记
  2. delimiter 新的结束标记
  3. 示例:
  4. delimiter $
  5. CREATE PROCEDURE 存储过程名(IN|OUT|INOUT 参数名 参数类型,...)
  6. BEGIN
  7. sql语句1;
  8. sql语句2;
  9. END $
  10. 2、存储过程体中可以有多条sql语句,如果仅仅一条sql语句,则可以省略begin end
  11. 3、参数前面的符号的意思
  12. in:该参数只能作为输入 (该参数不能做返回值)
  13. out:该参数只能作为输出(该参数只能做返回值)
  14. inout:既能做输入又能做输出

调用存储过程

call 存储过程名(实参列表)
函数

创建函数

学过的函数:LENGTH、SUBSTR、CONCAT等
语法:

  1. CREATE FUNCTION 函数名(参数名 参数类型,...) RETURNS 返回类型
  2. BEGIN
  3. 函数体
  4. END

调用函数

SELECT 函数名(实参列表)

函数和存储过程的区别

  1. 关键字 调用语法 返回值 应用场景
  2. 函数 FUNCTION SELECT 函数() 只能是一个 一般用于查询结果为一个值并返回时,当有返回值而且仅仅一个
  3. 存储过程 PROCEDURE CALL 存储过程() 可以有0个或多个 一般用于更新