本文源码: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):存储过程和视图,用法和特性详解