Mysql Function and Procedure and Truncate

来源:互联网 发布:中央电视台网络直播 编辑:程序博客网 时间:2024/06/14 23:58

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

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

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 typeBEGIN    //statement body    Return resultEND

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 bodyEND
原创粉丝点击