一 视图

  预先定义一种对应关系,如:temp_table <-----> select * from class where student_id >10,那么这种对应关系叫做视图。

它仅仅是一种对应关系,当以后调用时,是会重新从内存中拿右侧的真正的表。视图是临时的,没有真是存在内存中的。

  创建视图:

create view temp_table as select * from class where student_id >10

  删除视图:

drop view temp_table

  修改视图:

alter view temp_table as .......

  使用视图:

select * from temp_table

二 存储过程

  先预先定义一个语句,如 tmp_table  <==> select * from class where student_id >10, 当我们调用这个语句的时候会返回给我们结果,相当于函数。

  创建存储过程:

delimiter ..  #delimiter 用来修改执行语句的结尾符,默认是';' ,这里修改为'..'
create procedure tmp_table()
begin
  select * from class;
end ..

  调用存储过程:

call tmp_table()

  存储过程不推荐修改,就直接删掉然后重建。

  pymysql中使用存储过程:

import pymysql

connection = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='test', charset="utf8")

cursor = connection.cursor(cursor=pymysql.cursors.DictCursor)

cursor.callproc('tmp_table')

result = cursor.fetchall()

cursor.close()

connection.close()

pymysql中使用存储过程

  

  存储过程可以接受参数,参数有三种:

    a. in  用于传入参数

    b. out 用于返回值用

    c. inout 即可以传入又可以当返回值 创建带有参数的存储过程:

delimiter //
create procedure tmp_table(
in arg1 int,
out arg2 int,
inout arg3 int
)
begin
  declare temp1 int;
  declare temp2 int default 1;
  
  set temp1 = 2;
  set arg2 = temp1 + temp2;
  set arg3 = arg2 + 10;
end//
delimiter ;

declare @arg2 int default 1; 声明变量, 默认值为1
declare @arg3 int default 1; 声明变量, 默认值为1
set @arg2 = 4; 给变量赋值
set @arg3 = 5
call tmp_table(1, @arg2, @arg3)
select @arg2,@arg3;

  pymysql执行带有参数的存储过程:

import pymysql

connection = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='test', charset="utf8")

cursor = connection.cursor(cursor=pymysql.cursors.DictCursor)

cursor.callproc('tmp_table', args=(1,22,33))

cursor.execute("select @_tmp_table_0,@_tmp_table_1,@_tmp_table_2") #取出返回参数的固定用法

print(cursor.fetchall())

connection.commit()
cursor.close()
connection.close()

pymysql执行带有参数的存储过程

 例子:创建存储过程:

 

  pymysql执行代码就是上面的,结果:

  

  如果在存储过程中有类似select * from '表名', 那么只需在python代码中,cursor.callproc()下面紧跟着执行 cursor.fetchall()就能拿到结果。

  条件语句

delimiter \\
CREATE PROCEDURE proc_if ()
BEGIN declare i int default 0;
if i = 1 THEN
SELECT 1;
ELSEIF i = 2 THEN
SELECT 2;
ELSE
SELECT 7;
END IF; END\\
delimiter ;

条件语句

  循环语句

delimiter \\
CREATE PROCEDURE proc_while ()
BEGIN DECLARE num INT ;
SET num = 0 ;
WHILE num < 10 DO
SELECT
num ;
SET num = num + 1 ;
END WHILE ; END\\
delimiter ;

while循环

delimiter \\
CREATE PROCEDURE proc_repeat ()
BEGIN DECLARE i INT ;
SET i = 0 ;
repeat
select i;
set i = i + 1;
until i >= 5
end repeat; END\\
delimiter ;

repeat循环

BEGIN

    declare i int default 0;
loop_label: loop set i=i+1;
if i<8 then
iterate loop_label;
end if;
if i>=10 then
leave loop_label;
end if;
select i;
end loop loop_label; END

loop循环

  动态执行SQL语句

delimiter \\
DROP PROCEDURE IF EXISTS proc_sql \\
CREATE PROCEDURE proc_sql ()
BEGIN
declare p1 int;
set p1 = 11;
set @p1 = p1; PREPARE prod FROM 'select * from tb2 where nid > ?';
EXECUTE prod USING @p1;
DEALLOCATE prepare prod; END\\
delimiter ; 动态执行SQL

动态执行语句

  以上语句参考了本片文章:https://www.cnblogs.com/wupeiqi/articles/5713323.html 十分感谢!

MySQL学习(4)的更多相关文章

  1. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  2. 我的MYSQL学习心得(二) 数据类型宽度

    我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  3. 我的MYSQL学习心得(三) 查看字段长度

    我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  4. 我的MYSQL学习心得(四) 数据类型

    我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(五) 运 ...

  5. 我的MYSQL学习心得(五) 运算符

    我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...

  6. 我的MYSQL学习心得(六) 函数

    我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

  7. 我的MYSQL学习心得(七) 查询

    我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

  8. 我的MYSQL学习心得(八) 插入 更新 删除

    我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得( ...

  9. 我的MYSQL学习心得(九) 索引

    我的MYSQL学习心得(九) 索引 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

  10. 我的MYSQL学习心得(十) 自定义存储过程和函数

    我的MYSQL学习心得(十) 自定义存储过程和函数 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心 ...

随机推荐

  1. ES插件升级

    #!/bin/bash mkdir -p /home/esuser cd /home/esuser wget http://10.12.xx.xx:8090/search_plugins/sd_wai ...

  2. 广州CVTE招聘-测试开发工程师

    内推邮箱:keweisheng@cvte.com 地点:广州 公司简介 CVTE成立于2005年,总部位于广州科学城,旗下设有多家独立的子公司,在香港设有全球服务中心,在国内设有21个营销服务中心和近 ...

  3. Google Hacking --你真的会用Google吗?

    你真的会用Google吗?Google Hacking提升工作效率 阅读本文需要6.66分钟 Google hacking,也叫作google dorking.如果在 Google 上搜索 Googl ...

  4. python基础-流程控制语句

    所谓流程控制,就是在程序里面设定一些条件判断语句,满足哪条,就执行哪条 #if 单分支 if 条件: 满足条件后执行的代码 #例子 > : print()#结果为666 双分支 if 条件: 满 ...

  5. Dubbo源码解析之SPI(一):扩展类的加载过程

    Dubbo是一款开源的.高性能且轻量级的Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用.智能容错和负载均衡,以及服务自动注册和发现. Dubbo最早是阿里公司内部的RPC框架,于 ...

  6. Kali虚拟机的扩容经历

    Kali虚拟机的扩容经历 0x01 起因 更新了一下软件包,竟然提示我空间不足. 升级了 687 个软件包,新安装了 82 个软件包,要卸载 0 个软件包,有 8 个软件包未被升级. 需要下载 1,5 ...

  7. SPA那点事

    前端猿一天不学习就没饭吃了,后端猿三天不学习仍旧有白米饭摆于桌前.IT行业的快速发展一直在推动着前端技术栈在不断地更新换代,前端的发展成了互联网时代的一个缩影.而单页面应用的发展给前端猿分了一杯羹. ...

  8. 微信小程序中图片上传阿里云Oss

    本人今年6月份毕业,最近刚在上海一家小公司实习,做微信小程序开发.最近工作遇到一个小问题. 微信小程序图片上传阿里云服务器Oss也折腾了蛮久才解决的,所以特意去记录一下. 第一步:配置阿里云地址: 我 ...

  9. LeetCode 278.First Bad Version(E)(P)

    题目: You are a product manager and currently leading a team to develop a new product. Unfortunately, ...

  10. js实现box(2)(3)这种调用方式的方法

    box(2)(3)函数的调用方法有两种: 第一种: var box = function(num1){ return function(num2){ return num1+num2; }; }; a ...