MySQL基础篇(04):存储过程和视图,用法和特性详解

  
  

本文源码:GitHub·点这里| | GitEE·点这里

     

一、存储过程

  

1,概念简介

  

存储程序是被存储在服务器中的组合SQL语句,经编译创建并保存在数据库中,用户可通过存储过程的名字调用执行。存储过程核心思想就是数据库SQL语言层面的封装与重用性。使用存储过程可以较少应用系统的业务复杂性,但是会增加数据库服务器系统的负荷,所以在使用时需要综合业务考虑。

  

2,基本语法格式

  
 <代码类=" sql语言">创建过程sp_name ([proc_parameter […]])
  (特征……]routine_body  
  
      <李>案例一:计算消费折扣李   
  
 <代码类=" sql语言">——创建存储过程
  下降过程中如果存在p01_discount;
  创建过程p01_discount(在消费数字(5,2),payfee数字(5,2))
  开始
  ——判断收费方式
  如果(consume> 100.00和consume<=300.00)
  设置payfee=消费* 0.8;
  ELSEIF (consume> 300.00)
  设置payfee=消费* 0.6;
  其他的
  设置payfee=消费;
  如果;
  选择payfee作为结果;
  结束;
  ——调用存储过程
  调用p01_discount (100.0, @discount);  
  
      <李>案例二:虽然. .做写数据李   
  

<代码>提供一张数据表

  
 <代码类=" sql语言">创建表“t03_proced”(
  “id”int (11) NOT NULL AUTO_INCREMENT评论的主键id”,
  temp_name varchar(20)默认空评论的名称”,
  主键(“id”)
  )引擎=InnoDB默认字符集=utf8评论=按シ⑵餍词莸? 
  

<代码>存储程序

  

根据传入的参数,判断写入t03_proced表的数据条数。

  
 <代码类=" sql语言">下降过程中如果存在p02_batch_add;
  创建过程p02_batch_add(在计数INT (11))
  开始
  宣布临时int默认0;
  而临时& lt;数做
  插入t03_proced (temp_name)值(“pro_name”);
  设置临时=temp + 1;
  结束时;
  结束;
  
  ——测试:写入10条数据
  调用p02_batch_add(10);  
  

3注意事项

  
      <李>业务场景李   
  

存储过程在实际开发中的应用不是很广泛,通常复杂的业务场景都在应用层面开发,可以更好的管理维护和优化。

  
      <李>执行速度   
  

假如在单表数据写入的简单场景下,基于应用程序写入,或者数据库连接的客户端写入,相比存储过程写入的速度就会慢很多,存储过程在很大程度上没有网络通信开销,解析开销,优化器开销等。

  

二、MySQL视图

  

1,基本概念

  

视图本身是一张虚拟表,不存放任何数据。在使用SQL语句访问视图的时候,获取的数据是MySQL从其它表中生成的,视图和表在同一个命名空间。视图查询数据相对安全,视可以隐藏一些数据和结构,只让用户看见权限内的数据,使复杂的查询易于理解和使用。

  

2,视图用法

  

现在基于用户和订单管理演示视图的基本用法。

  
      <李>基础表结构李   
  
 <代码类=" sql语言">创建表v01_user (
  id INT (11) NOT NULL AUTO_INCREMENT评论的主键id”,
  user_name VARCHAR(20)默认空评论的用户名”,
  电话VARCHAR(20)默认空评论的手机号”,
  pass_word VARCHAR(64)默认空评论“密码”,
  card_id VARCHAR(18)默认空评论的身份证身份证”,
  pay_card VARCHAR(25)默认空评论“卡”号,
  主键(id)
  )引擎=InnoDB的默认字符集=utf8评论的用户表”;
  
  创建表v02_order (
  id INT (11) NOT NULL AUTO_INCREMENT评论的主键id”,
  user_id INT (11) NOT NULL评论的用户身份证”,
  order_no VARCHAR(32)默认空评论“订单编号”,
  good_name VARCHAR(60)默认空评论的商品名称”,
  good_id INT(11)默认空评论的商品ID”,
  num INT(11)默认空评论“购买数量的,
  total_price小数(10,2)默认空评论的总价格”,
  主键(id)
  )引擎=InnoDB的默认字符集=utf8评论“订单表的; 
  
      <李>基本语法   
  
 <代码类=" sql语言">创建或替换view_name视图
  作为select_statement  
  

注意事项:表和视图共享数据库中相同的名称空间,因此,数据库不能包含具有相同名称的表和视图。

  
      <李>用户订单视图   
  
 <代码类=" sql语言">创建或替换
  认为user_order_view选择
  t1.id、t1.user_name t2.order_no t2.good_id,
  t2.good_name、t2.num t2.total_price
  从v01_user t1
  离开加入v02_order t2> SELECT *从user_order_view user_name=安酢?

MySQL基础篇(04):存储过程和视图,用法和特性详解