【MYSQL】MYSQL存储过程
存储过程就相当于编程语言里的函数,而它是mysql的函数
存储过程的简单创建:
delimiter $$ #先修改结束符,否则一遇到;就会结束语句导致创建不成功 create procedure f1() #创建一个没有参数的f1的存储过程 BEGIN#标志可以开始写函数体了 select * from text; END$$ delimiter;#把结束符修改回来
调用储存过程:
call f1();
存储过程,可以接收参数,其参数有三类:
- in 仅用于传入参数用
- out 仅用于返回值用
- inout 既可以传入又可以当作返回值
--创建有参数的存储过程 delimiter $$ create procedure f1( in i1 int, out o1 int, inout io1 int, ) BEGIN DECLARE tem int ;--定义储存过程int类型的局部变量 DECLARE tem1 int default 0; --定义储存过程int类型的局部变量,默认值为0 set tem=10; set tem1=20; set o1=i1+tem+tem1; set io1=i1+o1+io1=tem+tem1; END$$ delimiter; --执行储存过程查看结果 set @a=1;--创建并定义一个用户变量,用户变量当用户还连着mysql它都会存在 set @b=2; set @c=3; call f1(@a,@b,@c) select @b,@c
事务:
delimiter \\ create PROCEDURE p1( 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 = 0; END\\ delimiter ;
游标:
delimiter // create procedure p3() begin declare ssid int; -- 自定义变量1 declare ssname varchar(50); -- 自定义变量2 DECLARE done INT DEFAULT FALSE; DECLARE my_cursor CURSOR FOR select sid,sname from student; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; open my_cursor; xxoo: LOOP fetch my_cursor into ssid,ssname; if done then leave xxoo; END IF; insert into teacher(tname) values(ssname); end loop xxoo; close my_cursor; end // delimter ;
动态执行SQL:
delimiter \\ CREATE PROCEDURE p4 ( in nid int ) BEGIN PREPARE prod FROM 'select * from student where sid > ?'; EXECUTE prod USING @nid; DEALLOCATE prepare prod; END\\ delimiter ;
删除储存过程:
drop procedure proc_name;
pymysql执行存储过程:
#!/usr/bin/env python # -*- coding:utf-8 -*- import pymysql conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1') cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 执行存储过程 cursor.callproc('p1', args=(1, 22, 3, 4)) # 获取执行完存储的参数 cursor.execute("select @_p1_0,@_p1_1,@_p1_2,@_p1_3") result = cursor.fetchall() conn.commit() cursor.close() conn.close() print(result)
更多详情请戳https://www.cnblogs.com/wupeiqi/articles/5713323.html

浙公网安备 33010602011771号