MySQL事务与锁

MySQL事务与锁

1、事务的四大特性(ACID)

1.1、原子性,原子性指整个数据数据库的每个事务都是不可分割的单位。只有十五中所有SQL语句都执行成功,才算整个事务成功,事务才会被提交。如果事务中任何一句SQL执行失败,整个事务都应该被回滚。

1.2、一致性,是指数据库将一种一致性状态转换为另一种一致性状态。不允许数据中的数据出现新老数据都有的情况,要么都是老数据,要么都是新数据。用更书面化的表达就是:数据的完整性约束没有被破坏。

1.3、隔离性,是指一个事务在该事物提交前对其他事务都不可见,它通过锁机制实现。

1.4、持久性,是指事务一旦被提交,其结果是永久性的。即使发生宕机等故障,数据库也能将数据恢复。

2、事务的环依赖

MYISAM 引擎不支持事务,INNODB 引擎支持事务。

ps:两表引擎的其他区别见博文 https://blog.csdn.net/qq_35642036/article/details/82820178

3、事务的语法

#开启事务,两种语法

begin

start transaction

#提交事务

commit

#回滚事务

rollback

#建立保存点(一个事务可以有多个保存点)

savepoint xxx

#删除保存点(没有该保存点时会抛出异常)

release savepoint xxx

#回滚事务到某个保存点

rollback to [savepoint] xxx



#检查事务的自动提交状态

show variables like '%commit%';

#修改事务的自动提交方式(仅保持一个连接时间,断开连接就失效)

--全局修改
set global autocommit=0;

--局部修改
set session autocommit=0;

4、锁的类型

4.1、表级锁:锁住整张表。特点:开销小,加锁快,锁冲突概率高,并发度小。(myisam,innodb,memory存储引擎支持)

4.2、行级锁:锁住一条数据。特点:开销大,加锁慢,锁冲突概率性小,并发度大。(innodb存储引擎支持)

4.3、页级锁:锁住一页数据。特点:以上特点折中。(innodb中一页数据为16kb)(innodb,BDB存储引擎支持)

5、innodb锁的类型

5.1、排它锁:当某一事务给一行数据加上排他锁时,那么其他事务对此行数数据不能读,不能写,也不能喝其他事务一起使用

5.2、共享锁:当某一事务给一行数据加上共享锁时,其他事务可以对此行数据进行读操作,但是不能写,不能与排他锁一起使用

对于update、delete、insert语句,InnoDB会自动给涉及到的数据加排它锁。

对于select语句,InnoDB不会加任何锁

5.3、语法:

#排它锁

select xxx from 表名 where ... for update;


#共享锁

select xxx from 表名 where ... lock in share mode;

5.4、测试:

排它锁:

加排他锁后,另一个排它锁查询

加排他锁后,使用共享锁查询

共享锁:

加共享锁后使用另一个共享锁查询

加共享锁后,使用排他锁查询

加共享锁后,更新数据

6、事务的生命周期

check point:检查点,检查点前的事务都是已经提交或回滚过的。

ps:MySQLcheckpoint https://www.cnblogs.com/lintong/p/4381578.html

undo log:回滚日志,存储在共享表空间的ibdata*文件,存储的是 check point日志序列号。

redo log:重做日志,存贮子日志文件ib_logfile里。

6.1重做日志

mysql通过重做日志实现事务的持久性。重做日志有两部分组成,一是内存中的重做日志缓存区(易丢失),另一个是磁盘上的重做日志,它是持久的。

当在事务中执行写操作时,它会先把数据从磁盘读入内存,并更新内存中缓存的数据,然后生成一条重做日志并写入重做日志缓存,当事务真正提交时,MySQL会将重做日志中的内容刷新到重做日志文件,再将内存中的数据更新到磁盘上。

重做日志执行时间:

在mysql中事务执行commit提交后,但服务器挂了,数据并未写入磁盘,在mysql重启服务后会重新执行这个重做日志写入数据。

6.2、回滚日志

mysql通过回滚日志保证事务的原子性。事务回滚的本质是在sql执行之前在回滚日志中生成了一条相反的sql。

回滚日志执行时间:

1、执行rollback回滚语句时

2、在事务执行之后,提交命令执行之前出现异常,在下次mysql服务重启时会执行。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL事务机制是数据库管理系统中重要的概念。事务是一组数据库操作(例如插入、更新、删除等)的执行单元,要么全部成功执行,要么全部回滚。机制用于管理并发访问数据库时的数据一致性和并发控制。 在MySQL中,事务由以下四个特性组成,通常简称为ACID: 1. 原子性(Atomicity):事务中的操作要么全部完成,要么全部回滚,不存在部分完成的情况。 2. 一致性(Consistency):事务开始和结束时,数据库的状态必须是一致的。即事务执行前后,数据库中的数据必须满足预定义的完整性约束。 3. 隔离性(Isolation):并发执行的事务之间相互隔离,一个事务的执行不应该受其他事务的影响。 4. 持久性(Durability):一旦事务提交,其结果应该永久保存在数据库中,即使发生系统故障也不会丢失。 MySQL中的机制用于控制对数据的并发访问。主要有两种类型的:共享(Shared Lock)和排他(Exclusive Lock)。共享允许多个事务同时读取同一数据,但不允许并发写操作。排他则只允许一个事务独占地进行读写操作。 MySQL提供了多种级别的,包括表级、行级和页面。表级是最粗粒度的,对整个表进行加;行级是最细粒度的,只对操作的行进行加;页面介于表级和行级之间,对一定范围的行进行加。 通过合理使用事务机制,可以确保数据库的数据一致性和并发控制,避免脏读、不可重复读和幻读等问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值