21 事务

1、什么是事务:数据库中的事务是指逻辑上的一组操作,这组操作要么都执行成功,要么都不执行成功。
2、事务的管理:默认情况下Mysql会自动管理事务,一条SQL语句独占一个事务。

事务的四大特性:
(1)原子性:是指事务是一个不可分割的整体,事务中的操作要么全部发生,要么一个都不发生。
(2)一致性:事务处理前后数据的完整性必须保持一致。
    完整性是指一个数据在某个时间点完全满足数据库中约束的要求。
(3)隔离性:是指多个用户访问同一个数据库时,一个用户的事务处理不能被其他用户的事务干扰,多个并发事务之间的数据要相互隔离。
(4)持久性:是指一个事务一旦被提交,它对数据库中的数据改变是永久的。

举例说明:

 
create table user2(
id int primary key auto_increment,
name char(32),
balance int
);

insert into user2(name,balance)
values
('wsb',1000),
('egon',1000),
('ysb',1000);


#原子操作
start transaction;
update user2 set balance=900 where name='wsb'; #买支付100元
update user2 set balance=1010 where name='egon'; #中介拿走10元
update user2 set balance=1090 where name='ysb'; #卖家拿到90元
commit;

#出现异常,回滚到初始状态
start transaction;
update user2 set balance=900 where name='wsb'; #买支付100元
update user2 set balance=1010 where name='egon'; #中介拿走10元
uppdate user2 set balance=1090 where name='ysb'; #卖家拿到90元,出现异常没有拿到
rollback;

mysql> select * from user;
+----+------+---------+
| id | name | balance |
+----+------+---------+
|  1 | wsb  |    1000 |
|  2 | egon |    1000 |
|  3 | ysb  |    1000 |
+----+------+---------+
rows in set (0.00 sec)
 

 

下面是操作:当p_return_code为1时,表示异常,立马回滚。当为2时,出现警告,立马回滚原始状态。0表示成功

 
delimiter //
create PROCEDURE b6(
    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; 
        insert into blog(name,sub_time) values('yyy',now());
    COMMIT; 

    -- SUCCESS 
    set p_return_code = 0; #0代表执行成功

END //
delimiter ;

set @res=123;
call b6(@res);
select @res;
 

 

posted @ 2018-12-11 21:43  领财  阅读(139)  评论(0编辑  收藏  举报