美文网首页
Mysql事务

Mysql事务

作者: 布尔教育 | 来源:发表于2017-02-11 14:31 被阅读0次

    生活中我们讲求做事有始有终,特别是针对一件重要的事
    编程从生活而来并高于生活
    那么事务的概念也是由实际的需求而产生的

    那么我们先来普及一下事务是什么?

    官方解释:

    事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transactionend transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。

    bank.jpg

    联系生活:

    银行转帐操作
    张三需要转账给李四500
    这时张三的钱-500 , 李四的钱+500 **
    需要执行两个
    update**操作 这次事务完成

    事务的特点:

    事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
    原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
    一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
    隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
    持久性(durability)。持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

    存储引擎:

    存储引擎要选innodb , 因为myisam不支持事务

    建表:

    create table t(
    id int,
    name char(20),
    money int
    )engine=innodb default charset=utf8;
    

    插入zhangsan与lisi的数据:

    insert into t values (1,'zhangsan',5000),(2,'lisi',5000);
    

    zhangsan借给lisi500,给lisi的钱+500

    update t set money=money+500 where id=2;
    

    在另外一个窗口查看lisi的钱是否多了500

    select * from t;
    

    此时这个事务还没完成
    zhangsan的钱还没减500,lisi不应该看到自己多的500

    之前就有这种骗术,一个人在柜台存钱,另一个人在ATM取钱
    银行职员经过一系列操作,已经将钱转过去了
    存钱的人在最后一步确认签字前,告诉银行职员,自己不存钱了
    而取钱的人在收到钱的时候立刻就取出来

    所以为了防止这种情况的发生,我们可以开启事务,查看一下效果:

    start transaction;
    

    先查看两个人各有多少钱,再次给lisi+500

    select * from t;
    update t set money=money+500 where id=2;
    

    B窗口查看lisi的钱

    select * from t;
    

    A窗口应该给zhangsan-500

    update t set money=money-500 where id=1;
    

    事务完成,A窗口结束事务

    commit;
    

    到这儿,这一整个事务才算完成.这时再去个窗口查看时就都没有问题了;

    commite之后,事务就结束了
    如果再想使用事务,需要重新 start transaction;
    并且想在commit之前,撤回借出的钱
    需要用到:rollback(回滚)

    start transaction;
    
    update t set money=money+500 where id=2;
    update t set money=money-300 where id=1;
    
    rollback;
    

    希望该篇文章对大家有所帮助

    相关文章

      网友评论

          本文标题:Mysql事务

          本文链接:https://www.haomeiwen.com/subject/qqhoittx.html