day61

保存在MySQL上的一个别名   >   一坨SQL语句

-- delimiter //
-- create procedure p1()
-- BEGIN
-- select * from student;
-- INSERT into teacher(tname) values("ct");
-- END//
-- delimiter; call p1(); #把sql语句封装进p1中

注释内容(创建存储过程)执行完,可以通过call调用(执行存储过程)。

在函数中:

也可通过pymysql调用存储过程

 import pymysql

 #打开
conn = pymysql.connect(host= "localhost", user = 'root', password='', database = 'db3')
#拿
cursor = conn.cursor()
cursor.callproc('p1')#p1存储过程
result = cursor.fetchall() #拿 print(result)
#关闭数据库
cursor.close()
conn.close()
cursor.callproc('p1')

执行结果:

((1, '男', 1, '理解'), (2, '女', 1, '钢蛋'), (3, '男', 1, '张三'), (4, '男', 1, '张一'), (5, '女', 1, '张二'), (6, '男', 1, '张四'), (7, '女', 2, '铁锤'), (8, '男', 2, '李三'), (9, '男', 2, '李一'), (10, '女', 2, '李二'), (11, '男', 2, '李四'), (12, '女', 3, '如花'), (13, '男', 3, '刘三'), (14, '男', 3, '刘一'), (15, '女', 3, '刘二'), (16, '男', 3, '刘四'), (18, '女', 1, '触发'), (19, '女', 1, '触发'), (20, '女', 1, '触发'), (21, '女', 1, '啦啦'))

Process finished with exit code 0

传参查询

in

#传参数(in,out,inout)

delimiter //
create procedure p2(
in n1 int,
in n2 int
)
BEGIN select * from student where sid > n1;
END //
delimiter ;

調用方式:

call p2(12,2)
cursor.callproc('p2',(12,2))  #python中

out

delimiter //
create procedure p3(
in n1 int,
inout n2 int
)
BEGIN
set n2 = 123123;
select * from student where sid > n1;
END //
delimiter ; set @v1 = 0;
call p2(12,@v1)

set @v1 = 0,傳入p2后,n1为12,n2为@v1,@v1为123123,相当传一个引用。

调用call p2(12,@v1)

查看 select @v1;

注意该查询过程需保存,p3才会生效。

在pymysql中

上半部分对应

set @v1 = 10;
 call p2(12,@v1)

下半部分对应

select @v1;

其中@__p3_0,@__p3__1对应n1,n2。

存储过程在服务端,客户端可以调用。

事务 
delimiter //
create procedure p4(
                out status int
)
BEGIN
1. 声明如果出现异常则执行{
           set status = 1;    #出现错误
           rollback;             #回滚

}             
开始事务
         -- 由秦兵账户减去100
         -- 方少伟账户加90
         -- 张根账户加10
               commit;        #提交
          结束        
          set status = 2;          #说明没出错

END //
delimiter ;

事务:  

http://www.cnblogs.com/wupeiqi/articles/5713323.html

支持事务操作

delimiter \\
create PROCEDURE p5(
OUT p_return_code tinyint
)
BEGIN
DECLARE exit handler for sqlexception
BEGIN
-- ERROR
set p_return_code = 1; #出错
rollback;
END; DECLARE exit handler for sqlwarning
BEGIN
-- WARNING
set p_return_code = 2;
rollback;
END; START TRANSACTION; #开始事务
DELETE from tb1;
insert into tb2(name)values('seven');
COMMIT; -- SUCCESS
set p_return_code = 2; #未出错 END\\
delimiter ;

事务操作不会因为数据传输意外中断,而发生错账。

游标:

对表每一行都要进行操作,需要使用游标。

将表A导入B时,加上当前行的id。

delimiter //
create procedure p3()
begin
declare row_id int; -- 自定义变量1
declare row_num int; -- 自定义变量2
declare done INT DEFAULT FALSE;#设初始值 DECLARE my_cursor CURSOR FOR select id,num from A;#创建游标
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;#设初始值,循环结束 open my_cursor; #开始游标
xxoo: LOOP
fetch my_cursor into row_id,row_num;
if done then #如果数据取完done 为 TRUE
leave xxoo; #离开循环
END IF;
set temp = row_num + row_id; #导入B表后还需要加上当前行的id
insert into B(num) values(temp);
end loop xxoo;
close my_cursor;#关闭游标
end //
delimter ;

放在服务端,客户端通过p3名字调用。

A

B

删除:

drop procedure proc_name;

MySQL(存储过程,支持事务操作)的更多相关文章

  1. mysql事务的坑----MyISAM表类型不支持事务操作

    最近需要通过JDBC对数据库做事务型操作,实践时发现,并没有达到想要的效果,表现在:1.每次执行executeUpdate()后,数据就马上能在DB中查到.但按理来说,我还没执行commit(),DB ...

  2. MySQL存储过程之事务管理

    原文链接:http://hideto.iteye.com/blog/195275 MySQL存储过程之事务管理 ACID:Atomic.Consistent.Isolated.Durable 存储程序 ...

  3. mysql存储过程之事务篇

    mysql存储过程之事务篇 事务的四大特征: ACID:Atomic(原子性).Consistent(一致性).Isolated(独立性).Durable (持久性) MySQL的事务支持不是绑定在M ...

  4. 4、什么是事务?MySQL如何支持事务?

    什么是事务? 事务是由一步或几步数据库操作序列组成逻辑执行单元,这系列操作要么全部执行,要么全部放弃执行.程序和事务是两个不同的概念.一般而言:一段程序中可能包含多个事务.(说白了就是几步的数据库操作 ...

  5. 什么是事务?MySQL如何支持事务?

    什么是事务? 事务是由一步或几步数据库操作序列组成逻辑执行单元,这系列操作要么全部执行,要么全部放弃执行.程序和事务是两个不同的概念.一般而言:一段程序中可能包含多个事务.(说白了就是几步的数据库操作 ...

  6. 遇过的坑(2)—MyISAM表类型不支持事务操作

    最近需要通过JDBC对数据库做事务型操作,实践时发现,并没有达到想要的效果,表现在:1.每次执行executeUpdate()后,数据就马上能在DB中查到.但按理来说,我还没执行commit(),DB ...

  7. Mysql存储过程包括事务,且传入sql数据运行

    有这样一个需求.要求在mysql存储过程中使用到事务,并且运行的是动态的sql语句 代码例如以下: BEGIN DECLARE in_data TEXT; /** 标记是否出错 */ DECLARE ...

  8. MySql不支持事务解决

    用的是一个绿色版的mysql数据库,发现不支持事务,在网络上搜集资料找到解决方案: 1.执行语句  SHOW ENGINES; 如果发现InnoDB全部显示为“YES”,说明该版本的数据库支持事务 2 ...

  9. mysql 表支持事务的方法

    1.在mysql客户管,如:Navicate.SQLyog在导航面板中选择要转换为InnoDB存储引擎类型的数据库,例如选择db_yunping数据库.如下图所示: 2. 在查询窗口中输入 show ...

随机推荐

  1. iOS.NSString.pitfall-in-using-nsstring

    1. NSString的使用 在CodeReview中, 发现类似以下代码, 表示深深受伤了: NSString* fString = [NSString stringWithFormat:@&quo ...

  2. c++之boost share_ptr

    转载:https://www.cnblogs.com/welkinwalker/archive/2011/10/20/2218804.html

  3. Java NIO系列教程(十一) Java NIO 与 IO

    Java NIO系列教程(十一) Java NIO与IO 当学习了 Java NIO 和 IO 的 API 后,一个问题马上涌入脑海: 我应该何时使用 IO,何时使用 NIO 呢?在本文中,我会尽量清 ...

  4. jqgrid单元格合并

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx. ...

  5. part1:11-linux在线安装工具yum

    第三方的免费软件仓库安装包 1.Linux安装软件: rpm方式:rpm(Red Hat Package Manager)现在是Linux standard Base(LSB)中采用的包管理系统. 优 ...

  6. PTA第五次作业

    #include<stdio.h> #include<math.h> int main () { int n,m,i,j,a; scanf("%d",&am ...

  7. Maximum profit of stocks

    https://github.com/Premiumlab/Python-for-Algorithms--Data-Structures--and-Interviews/blob/master/Moc ...

  8. PythonWEB框架之Flask--3

    13.请求上下文源码分析 第一阶段:将ctx(request,session)放到Local对象上 第二阶段:视图函数导入:request/session request.method -LocalP ...

  9. Devexpress VCL Build v2013 vol 14.1.5 发布

    What's New in 14.1.5 (VCL Product Line)   New Major Features in 14.1 What's New in VCL Products 14.1 ...

  10. 在delphi XE5 里面编译kbmmw4.3

    Delphi XE5 仓促的发布了,虽然开始支持Android 开发了,但是经过试用,发现那个模拟器慢到无法用, 真机可以运行,但是调试也几乎无法用.由于XE5 的主要增加的是Android 的开发支 ...