设为首页 加入收藏

TOP

MySQL视图,函数,触发器,存储过程(二)
2019-09-17 18:53:03 】 浏览:68
Tags:MySQL 视图 函数 触发器 存储 过程
果出现异常则执行{
set status = 1; rollback; } 开始事务 -- 由秦兵账户减去100 -- 方少伟账户加90 -- 张根账户加10 commit; 结束 set status = 2; END // delimiter ; =============================== delimiter \\ create PROCEDURE p5( OUT p_return_code tinyint ) BEGIN DECLARE exit handler for sqlexception BEGIN -- ERROR set p_return_code = 1; rollback; END; START TRANSACTION; DELETE from tb1; insert into tb2(name)values('seven'); COMMIT; -- SUCCESS set p_return_code = 2; END\\ delimiter ; 4.事务
delimiter //
create procedure p6()
begin 
    declare row_id int; -- 自定义变量1  
    declare row_num int; -- 自定义变量2 
    declare done INT DEFAULT FALSE;  -- 默认为false 表述循环未执行完
    declare temp int;
    
        -- 声明游标
    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   --  需要自己判断是否循环结束
                leave xxoo; -- 结束循环
            END IF;
            set temp = row_id + row_num;
            insert into B(number) values(temp);
        end loop xxoo;
    close my_cursor;
    
end  //
delimter ;
5.游标-实现循环语句

游标性能比较差,一般很少用,使用场景是:针对每一行都需要专门的处理计算的时候可能会用到,但是一般update+ 循环也能解决 如:UPDATE B set num=id+num;

delimiter //
create procedure p7(
    in tpl varchar(255),
    in arg int
)
begin 
    set @xo = arg;
    PREPARE prod FROM 'select * from student where sid > ?'; -- 1. 预检测某个东西 SQL语句合法性
    EXECUTE prod USING @xo; -- 2. SQL =格式化 tpl + arg 
    DEALLOCATE prepare prod; -- 3. 执行SQL语句
end  //
delimter ;

---------------------------
call p7("select * from tb where id > ?",9)
6. 动态执行SQL(防SQL注入)

 

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇数据库管理工具DataGrip使用总结(.. 下一篇Mapreduce概述和WordCount程序

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目