首页 > 数据库技术 > 详细

MySQL之事务

时间:2018-11-21 23:19:53      阅读:197      评论:0      收藏:0      [点我收藏+]

一,介绍

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;

 

 

MySQL之事务

原文:https://www.cnblogs.com/glh-ty/p/9998094.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!