Mysql Function and Procedure and Truncate

    Truncate
    Mysql的事务只有使用了 Innodb 数据库引擎的数据库或表才支持事务,它只能用在Procedur,Function与Tigger不能使用事务,而它只管理Insert/update/delete操作,
事务特性:
    Atomicity(原子性):一组事务,要么成功;要么撤回。
    Consistency(稳定性):有非法数据(外键约束之类),事务撤回。
    Isolation(隔离性):事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。
    Durability(可靠性):软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit 选项 决定什么时候吧事务保存到日志里。
Truncate语法如下:

-第一种
Begin
        //statement body
commit 

-第二种
start transaction 
   //statement body
commit 

-第三种
SET AUTOCOMMIT=0;  //不自动提交
     //statement body
SET AUTOCOMMIT=1;
注:事务可以使用于存储过程中,但函数与触发器中不能用,事务中执行多条SQL语句时,成功或不成功都不能返回值,需要自定义返回值,其语法如下:
DECLARE exit handler for sqlexception 
        Begin   //当出错时返回值
            ROLLBACK;
            select 0;
        end;

start transaction;
    //statement body
commit;

Procedure
  Mysql中的存储过程是存储在数据库服务器中的一组sql语句。
  它存在三种不同的参数其类型为:IN、OUT、INOUT
       IN: 表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值
       OUT: 该值可在存储过程内部被改变,并可返回
       INOUT: 调用时指定,并且可被改变和返回
Procedure语法如下:

CREATE DEFINER=`user`@`%` PROCEDURE `procedure_name `(IN `value1 ` int,IN ` value2` int)
BEGIN
    //statement body
    select 1; -- 可以返回值
END

Function

CREATE DEFINER=`user`@`%` FUNCTION `function_name`(`value1` int, `value2` int) RETURNS int(11) –result type
BEGIN
    //statement body
    Return result
END

Loop
      在Procedure与Function中存在一组SQL,满足某个条件时执行或多次循环调用,不满足时跳出结束整个过程,可将多条SQL语句中写入Loop语句体中,并给其取标签,在结束或循环调用时。
     若条件不成立时,需要跳出该Procedure或Functions。使用Loop关键字时,可对该语句体命标签,可用(leave + 标签名) 结束,或者直接return结束。
     若满足条件时需要循环调用Loop内的语句体时可用关键字(iterate+标签名)循环调用。
在Procedure中只能使用(2)结束,在Function中可用(2)、(3)语法结束。
Loop 语法如下:

--对主体内的一组SQL语句
[begin_label:] LOOP
   -- statement_list
    IF  THEN  iterate begin_label; //(1IF  THEN leave begin_label;  //(2)
    TF  THEN return ; //(3)
END LOOP [end_label]
--对整个主体使用
Label: BEGIN
  //statement body
END
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值