mysql 事务的实用小实例

mysql中事务想必大家都接触过,尽管你没有接触过事务,那起码你也应该听说过事务的一些概念。今天,我先不讲那些文邹邹的概念什么的,我直接给大家讲解一下它的一些常用运用。
按照书上或者是一些网上的教材来说,事务只支持innodb引擎的。不过,在我看了书之后,按我的理解,事务其实也存在于MyISAM,只是来说它的意义有些不太一样。
先来说说我们工作中常用的innodb引擎吧。我们都知道,在mysql5.7以后,它的默认引擎就是innodb,可能这也就是为了吏好的兼容事务而设计的吧(这也是我猜想的)。innodb事务是由锁构成。而它这个锁,通常有两种,一种是共享锁,另一种是排他锁。

共享锁,也叫是共享读锁,也就是多个事务之间,只能读取,不能做修改。

set autocommit = 0; ----让事务不自动提交(默认是自动提交的)
select * from table1 where id = 5 lock in share mode;
commit; ----提交

如果说第一个事务先获得了这个锁,那么,其他事务也只能获取共享读锁(不能是排他锁,不然,其他锁将会出现等待而卡住)

排他锁,也叫写锁。也就是多个事务之间,只能有一把锁是能读能写的状态,如果其他锁强进行来,那将会是等等而卡住。只有当前的事务提交后,后面的事务才能执行。

set autocommit = 0;
select * from table1 where id = 5 for update;
commit ;

当然,这儿有个需要注意的地方,那就是这两个共享锁和排他锁其实是行级锁,也就是只能是锁行的,并不能锁表。当然,这也是需要基于主键或者是索引。这儿我就先不展开来讲了。简单来说,如果事务的表没有主键或者是索引,那它就会成为“表”锁。

前面我也说了,从某种方面来说,MyISAM引擎也有索的概念。是的,只是来说MyISAM引擎它是表级锁。所谓表级锁,也就是说如果某个事务加了锁之后,另一个事务就会等待。

lock tables myTableName read #读锁,在这种情况下,所有的事务都只有读的权限,如果执行写入,则会报错。
#在这个阶段,当前事务能对当前表执行读的操作,而其他事务执行查询时,读到的是旧的数据。
unlock tables #执行提交后,其他事务才能执行写的操作。
lock tables myTableName write #写锁,在这种呢况下,基他事务不能读,也不能写。需要等到当前事务提交后,基他事务才能执行读和写。
#在这个阶段,当前事务能对当前事务执行读和写的操作,而其他事务如果强行进入(不管是读锁还是写锁),则会等待而卡住。
unlock tables #事务提交后,其他事务才能继续。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值