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; //(1)
IF THEN leave begin_label; //(2)
TF THEN return ; //(3)
END LOOP [end_label]
--对整个主体使用
Label: BEGIN
//statement body
END