MySQL面试题--事务

MySQL面试题-事务(答案版) 事务是由 MySQL 的引擎来实现的,我们常见的 InnoDB 引擎它是支持事务的。不过并不是所有的引擎都能支持事务,比如 MySQL 原生的 MyISAM 引擎就不支持事务,也正是这样,所以大多数 MySQL 的引擎都是用 InnoDB。 阅读详情

目录

1.什么是数据库事务?事务的特性是什么?

2.什么是ACID?

3.并发事务会有哪些问题?

4.什么是 脏读、丢失修改、不可重复读、幻读

5.不可重复读和幻读有什么区别?

6.Mysql是如何避免事务并发问题的?

7.什么是事务隔离级别?

8.默认的级别是什么?

9.如何选择事务隔离级别?

10.靠缓存可以提升高事务隔离级别的性能吗?

11.Mysql事务隔离是如何实现的?

12什么是一致性非锁定读和锁定读?

13.说一下MVCC内部细节

14.Mysql事务一致性,原子性是如何实现的?

15.Mysql事务的持久性是如何实现的?

16.级锁和行级锁有什么区别?

17.什么是行级锁?Mysql如何完成的?

18.什么是共享锁(读锁)?

19.什么是排它锁(写锁/独占锁)?

20.什么是意向锁?

21.InnoDB支持哪几种锁?

22.当前读和快照读分别是什么?

23.什么是XA协议?

24.什么是mysql xa事务?

25.事务与普通事务区别是什么?

26.什么是2pc 3pc?

27.是否使用过select for update?会产生哪些操作?

28.说一下mysql死锁的原因和处理方法

29.Mysql会产生几种日志?

30.bin log作用是什么?

31.redo log作用是什么?

32.undo log作用是什么?

33.Mysql日志是否实时写入磁盘? bin log刷盘机制是如何实现的?redo log刷盘机制是如何实现的? undo log刷盘机制是如何实现的?

34.MySQL的binlog有有几种录入格式?分别有什么区别?

35.Mysql集群同步时为什么使用binlog?优缺点是什么?


1.什么是数据库事务?事务的特性是什么?

事务:

  • 是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;

  • 这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;

  • 事务是一组不可再分割的操作集合(工作逻辑单元)

事务都有 ACID 特性

2.什么是ACID?

1 、原子性 atomicity

过程的保证

只做一个步骤

1 给钱

2 去买

3 交回来

事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做

2 、一致性 consistency

结果的保证

保证要吃完 刚张嘴挂了,失去一致性

事 务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统 运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是 不一致的状态。

3 、隔离性 isolation

并发事务互相干扰

不被干扰 刚张嘴别人塞了东西

一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。

4 、持续性 永久性 durability

保存 吃到肚子里

也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。

3.并发事务会有哪些问题?

多个事务并发执行一定会产生相互争夺资源的问题

4.什么是 脏读、丢失修改、不可重复读、幻读

脏读(Dirty read)

是一个事务在处理过程中读取了另外一个事务未提交的数据

当一个事务正在访问数据并且对其进行了修改,但是还没提交事务,这时另外一个事务也访问了这个数据,然后使用了这个数据,因为这个数据的修改还没提交到数据库,所以另外一个事务读取的数据就是“脏数据”,这种行为就是“脏读”,依据“脏数据”所做的操作可能是会出现问题的。

修改丢失(Lost of modify)

是指一个事务读取一个数据时,另外一个数据也访问了该数据,那么在第一个事务修改了这个数据之后,第二个事务也修改了这个数据。这样第一个事务内的修改结果就被丢失,这种情况就被称为*修改丢失

不可重复读(Unrepeatableread)

*指在一个事务内多次读取同一数据,在这个事务还没结束时,另外一个事务也访问了这个数据并对这个数据进行了修改,那么就可能造成第一个事务两次读取的数据不一致,这种情况就被称为*不可重复读。

幻读(Phantom read)

是指同一个事务内多次查询返回的结果集总数不一样(比如增加了或者减少了行记录)。

幻读与不可重复读类似,幻读是指一个事务读取了几行数据,这个事务还没结束,接着另外一个事务插入了一些数据,在随后的查询中,第一个事务读取到的数据就会比原本读取到的多,就好像发生了幻觉一样,所以称为**幻读**。

5.不可重复读和幻读有什么区别?

不可重复读 针对的是一份数据的修改

幻读 针对的是行数修改

6.Mysql是如何避免事务并发问题的?

避免事务并发问题是需要付出性能代价的,此时和分布式系统设计一样(CAP定理及base理论),为了保证一致性就一定会牺牲性能,要做取舍

在mysql内部通过加锁的方式实现好了解决方案可供选择,就是配置事务隔离级别

7.什么是事务隔离级别?

8.默认的级别是什么?

MySQL InnoDB存储引擎默认的事务隔离级别是可重复读(REPEATABLE-READ)

 MySQL 5.7 SELECT @@tx_isolation;
 MySQL 8.0 SELECT @@transaction_isolation;
9.如何选择事务隔离级别?

隔离级别越低,事务请求的锁越少相应性能也就越高,如没有特殊要求或有错误发生,使用默认的隔离级别即可,如果系统中有高频读写并且对一致性要求高那么就需要比较高的事务隔离级别甚至串行化。

10.靠缓存可以提升高事务隔离级别的性能吗?

提升事务级别的目的本质是提供更高的数据一致性,如果前置有缓存,那么缓存只能提供高效读并不能保证数据及时一致性,相反的我们还需要对缓存管理有额外的开销。

11.Mysql事务隔离是如何实现的?

隔离的实现主要是读写锁和MVCC

12什么是一致性非锁定读和锁定读?

锁定读:使用到了读写锁

读写锁是最简单直接的的事务隔离实现方式

  • 每次读操作需要获取一个共享(读)锁,每次写操作需要获取一个写锁。

  • 共享锁之间不会产生互斥,共享锁和写锁之间、以及写锁与写锁之间会产生互斥。

  • 当产生锁竞争时,需要等待其中一个操作释放锁后,另一个操作才能获取到锁。

锁机制,解决的就是多个事务同时更新数据,此时必须要有一个加锁的机制

  • 行锁(记录锁):解决的就是多个事务同时更新一行数据

  • 间隙锁:解决的就是多个事务同时更新多行数据

下列操作属于锁定读

 select ... lock in share mode
 select ... for update
 insert、update、delete

非锁定读

v10 -> age=18

v11 ->age=19

v12 ->age=15

使用mvcc 多版本控制实现

13.说一下MVCC内部细节

MySQL :: MySQL 5.7 Reference Manual :: 14.3 InnoDB Multi-Versioning

Multi-Version Concurrency Control 多版本并发控制,MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问

InnoDB是一个多版本的存储引擎。它保存有关已更改行的旧版本的信息,以支持并发和回滚等事务特性。这些信息存储在一个称为回滚段的数据结构中的系统表空间或undo表空间中。参见第14.6.3.4节“撤消表空间”。InnoDB使用回滚段中的信息来执行事务回滚所需的撤消操作。它还使用这些信息构建行的早期版本,以实现一致的读取

MVCC 的实现依赖于:隐藏字段、Read View、undo log

隐藏字段

  • A 6-byte DB_TRX_ID 用来标识最近一次对本行记录做修改 (insert 、update) 的事务的标识符 ,即最后一次修改本行记录的事务 id。 如果是 delete 操作, 在 InnoDB 存储引擎内部也属于一次 update 操作,即更新行中的一个特殊位 ,将行标识为己删除,并非真正删除。

  • A 7-byte DB_ROLL_PTR 回滚指针,指向该行的 undo log 。如果该行未被更新,则为空.

  • A 6-byte DB_ROW_ID 如果没有设置主键且该表没有唯一非空索引时,InnoDB 会使用该 id 来生成聚簇索引.

Read View

不同的事务隔离级别中,当有事物在执行过程中修改了数据(更新版本号),在并发事务时需要判断一下版本链中的哪个版本是当前事务可见的。为此InnoDB有了ReadView的概念,使用ReadView来记录和隔离不同事务并发时此记录的哪些版本是对当前访问事物可见的。

undo log

除了用来回滚数据,还可以读取可见版本的数据。以此实现非锁定读

14.Mysql事务一致性,原子性是如何实现的?

首先是通过锁和mvcc实现了执行过程中的一致性和原子性

其次是在灾备方面通过Redo log实现,Redo log会把事务在执行过程中对数据库所做的所有修改都记录下来,在之后系统崩溃重启后可以把事务所做的任何修改都恢复出来。

15.Mysql事务的持久性是如何实现的?

使用Redo log保证了事务的持久性。当事务提交时,必须先将事务的所有日志写入日志文件进行持久化,就是我们常说的WAL(write ahead log)机制,如果出现断电重启便可以从redolog中恢复,如果redolog写入失败那么也就意味着修改失败整个事务也就直接回滚了。

16.级锁和行级锁有什么区别?

表级锁:串行化(serializable)时,整表加锁,事务访问表数据时需要申请锁,虽然可分为读锁和写锁,但毕竟是锁住整张表,会导致并发能力下降,一般是做ddl处理时使用

行级锁:除了串行化(serializable)时 InnoDB使用的都是行级锁,只锁一行数据,其他行数据不影响,并发能力强。

17.什么是行级锁?Mysql如何完成的?

行级锁实现比较复杂不是单纯锁住一行数据,是由mvcc完成的。

18.什么是共享锁(读锁)?

共享锁或S锁,其它事务可以继续加共享锁,但不能加排它锁

19.什么是排它锁(写锁/独占锁)?

排它锁或X锁,在进行写操作之前要申请并获得,其它事务不能再获得任何锁。

20.什么是意向锁?

它分为意向共享锁(IS)和意向排他锁(IX)

一个事务对一张表的某行添加共享锁前,必须获得对该表一个IS锁或者优先级更高的锁。 一个事务对一张表的某行添加排他锁之前,它必须对该表获取一个IX锁。

意向锁属于表锁,它不与innodb中的行锁冲突,任意两个意向锁之间也不会产生冲突,但是会与表锁(S锁和X锁)产生冲突

21.InnoDB支持哪几种锁?

表锁,行锁,间隙锁,Next-Key锁等

在Serializable中读加共享锁,写加排他锁,读写互斥

两段锁协议,将事务分成两个阶段,加锁阶段和解锁阶段(所以叫两段锁)

22.当前读和快照读分别是什么?

当前读 :在锁定读(使用锁隔离事物)的时候读到的是最新版本的数据

快照读:可重复读(repeatable-read)下 mvcc生效读取的是数据的快照,并不是最新版本的数据(未提交事物的数据)

23.什么是XA协议?

MySQL :: MySQL 8.0 Reference Manual :: 15.3.8 XA Transactions

  • AP(Application Program):应用程序,定义事务边界(定义事务开始和结束)并访问事务边界内的资源。

  • RM(Resource Manger)资源管理器: 管理共享资源并提供外部访问接口。供外部程序来访问数据库等共享资源。此外,RM还具有事务的回滚能力。

  • TM(Transaction Manager)事务管理器:TM是分布式事务的协调者,TM与每个RM进行通信,负责管理全局事务,分配事务唯一标识,监控事务的执行进度,并负责事务的提交、回滚、失败恢复等。

  • 应用程序AP向事务管理器TM发起事务请求

  • TM调用xa_open()建立同资源管理器的会话

  • TM调用xa_start()标记一个事务分支的开头

  • AP访问资源管理器RM并定义操作,比如插入记录操作

  • TM调用xa_end()标记事务分支的结束

  • TM调用xa_prepare()通知RM做好事务分支的提交准备工作。其实就是二阶段提交的提交请求阶段。

  • TM调用xa_commit()通知RM提交事务分支,也就是二阶段提交的提交执行阶段。

  • TM调用xa_close管理与RM的会话。

    • 这些接口一定要按顺序执行,比如xa_start接口一定要在xa_end之前。此外,这里千万要注意的是事务管理器只是标记事务分支并不执行事务,事务操作最终是由应用程序通知资源管理器完成的。另外,我们来总结下XA的接口

  • xa_start:负责开启或者恢复一个事务分支,并且管理XID到调用线程

  • xa_end:负责取消当前线程与事务分支的关系

  • xa_prepare:负责询问RM 是否准备好了提交事务分支 xa_commit:通知RM提交事务分支

  • xa_rollback:通知RM回滚事务分支

24.什么是mysql xa事务?

mysql的xa事务分为两部分:

  1. InnoDB内部本地普通事务操作协调数据写入与log写入两阶段提交

  2. 外部分布式事务

 5.7 SHOW VARIABLES LIKE '%innodb_support_xa%';
 8.0 默认开启无法关闭

XA 事务语法示例如下:

 XA START '自定义事务id';
 ​
 SQL语句...
 ​
 XA END '自定义事务id';
 XA PREPARE '自定义事务id';
 XA COMMIT\ROLLBACK '自定义事务id';

XA PREPARE 执行成功后,事务信息将被持久化。即使会话终止甚至应用服务宕机,只要我们将【自定义事务id】记录下来,后续仍然可以使用它对事务进行 rollback 或者 commit。

25.事务与普通事务区别是什么?

xa事务可以跨库或跨服务器,属于分布式事务,同时xa事务还支撑了InnoDB内部日志两阶段记录

普通事务只能在单库中执行

26.什么是2pc 3pc?

两阶段提交协议与3阶段提交协议,额外增加了参与的角色保证分布式事务完成更完善

27.是否使用过select for update?会产生哪些操作?
 ​
 查询库存 = 100  0 扣减库存  = -1 99
 记录日志 = log
 提交  commit

select本身是一个查询语句,查询语句是不会产生冲突的一种行为,一般情况下是没有锁的,用select for update 会让select语句产生一个排它锁(X), 这个锁和update的效果一样,会使两个事务无法同时更新一条记录。

MySQL :: MySQL 8.0 Reference Manual :: 17.7.3 Locks Set by Different SQL Statements in InnoDB

MySQL :: MySQL 8.0 Reference Manual :: 15.2.13 SELECT Statement

  • for update仅适用于InnoDB,且必须在事务块(BEGIN/COMMIT)中才能生效。

  • 在进行事务操作时,通过“for update”语句,MySQL会对查询结果集中每行数据都添加排他锁,其他线程对该记录的更新与删除操作都会阻塞。排他锁包含行锁、表锁。

  • InnoDB默认是行级别的锁,在筛选条件中当有明确指定主键或唯一索引列的时候,是行级锁。否则是表级别。

示例:

 SELECT … FOR UPDATE [OF column_list][WAIT n|NOWAIT][SKIP LOCKED];
 select * from t for update 会等待行锁释放之后,返回查询结果。
 select * from t for update nowait 不等待行锁释放,提示锁冲突,不返回结果
 select * from t for update wait 5 等待5秒,若行锁仍未释放,则提示锁冲突,不返回结果
 select * from t for update skip locked 查询返回查询结果,但忽略有行锁的记录
28.说一下mysql死锁的原因和处理方法
 ​
 事务 a
 ​
 表 t  id=100 更新  加行锁
 表 t  id=200 更新  已加锁

 ​
 事务 b
 ​
 表 t  id=200 更新 加行锁
 表 t  id=100 更新 已加锁
  • 死锁与锁等待是两个概念

    • 如未开启事务,多个客户端执行的insert操作

  • 当多个事务同时持有和请求同一资源上的锁而产生循环依赖的时候就产生了死锁。

排查:

  • 正在运行的任务

    • show full processlist; 找到卡主的进程

  • 解开死锁

    • UNLOCK TABLES ;

  • 查看当前运行的事务

    • SELECT * FROM information_schema.INNODB_TRX;

  • 当前出现的锁

    • SELECT * FROM information_schema.INNODB_LOCKS;

  • 观察错误日志

  • 查看InnoDB锁状态

    • show status like "innodb_row_lock%";

lnnodb_row_lock_current_waits:当前正在等待锁定的数量; lnnodb_row_lock_time :从系统启动到现在锁定的总时间长度,单位ms; Innodb_row_lock_time_avg :每次等待所花平均时间; Innodb_row_lock_time_max:从系统启动到现在等待最长的一次所花的时间; lnnodb_row_lock_waits :从系统启动到现在总共等待的次数。

  • kill id 杀死进程

解决:

  • 死锁无法避免,上线前要进行严格的压力测试

  • 快速失败

    • innodb_lock_wait_timeout 行锁超时时间

  • 拆分sql,严禁大事务

  • 充分利用索引,优化索引,尽量把有风险的事务sql使用上覆盖索,优化where条件前缀匹配,提升查询速度,引减少表锁

  • 无法避免时:

    • 操作多张表时,尽量以相同的顺序来访问避免形成等待环路

    • 单张表时先排序再操作

    • 使用排它锁 比如 for update

29.Mysql会产生几种日志?
  • 错误日志(error log)

error log主要记录MySQL在启动、关闭或者运行过程中的错误信息,在MySQL的配置文件my.cnf中,可以通过log-error=/var/log/mysqld.log 执行mysql错误日志的位置。

  • 慢查询日志(slow query log)

0.1秒

Ø MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。

Ø long_query_time的默认值为10,意思是运行10秒以上的语句。

Ø 由他来查看哪些SQL超出了我们的最大忍耐时间值,比如一条sql执行超过5秒钟,我们就算慢SQL,希望能收集超过5秒的sql,结合之前explain进行全面分析。

Ø 默认情况下,MySQL数据库没有开启慢查询日志,需要我们手动来设置这个参数。

Ø 当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件。

在生产环境中,如果要手工分析日志,查找、分析SQL,显然是个体力活,MySQL提供了日志分析工具mysqldumpslow。

  • 一般查询日志(general log)

general log 记录了客户端连接信息以及执行的SQL语句信息,通过MySQL的命令

  • 重写日志(redo log)

  • 回滚日志(undo log)

  • 二进制日志(bin log)

30.bin log作用是什么?

MySQL的bin log日志是用来记录MySQL中增删改时的记录日志。

当你的一条sql操作对数据库中的内容进行了更新,就会增加一条bin log日志。查询操作不会记录到bin log中。

bin log最大的用处就是进行主从复制,以及数据库的恢复。

31.redo log作用是什么?

redo log是一种基于磁盘的数据结构,用来在MySQL宕机情况下将不完整的事务执行数据纠正,redo日志记录事务执行后的状态。

当事务开始后,redo log就开始产生,并且随着事务的执行不断写入redo log file中。redo log file中记录了xxx页做了xx修改的信息,我们都知道数据库的更新操作会在内存中先执行,最后刷入磁盘。

redo log就是为了恢复更新了内存但是由于宕机等原因没有刷入磁盘中的那部分数据。

32.undo log作用是什么?

undo log主要用来回滚到某一个版本,是一种逻辑日志。

undo log记录的是修改之前的数据,比如:当delete一条记录时,undolog中会记录一条对应的insert记录,从而保证能恢复到数据修改之前。在执行事务回滚的时候,就可以通过undo log中的记录内容并以此进行回滚。

undo log还可以提供多版本并发控制下的读取(MVCC)。

33.Mysql日志是否实时写入磁盘? bin log刷盘机制是如何实现的?redo log刷盘机制是如何实现的? undo log刷盘机制是如何实现的?

磁盘写入固然是比较慢的。

参数:sync_binlog

binlog 写入策略:

1、sync_binlog=0 的时候,表示每次提交事务binlog不会马上写入到磁盘,而是先写到page cache,相对于磁盘写入来说写page cache要快得多,不过在Mysql 崩溃的时候会有丢失日志的风险。

2、sync_binlog=1 的时候,表示每次提交事务都会执行 fsync 写入到磁盘 ;

3、sync_binlog的值大于1 的时候,表示每次提交事务都 先写到page cach,只有等到积累了N个事务之后才fsync 写入到磁盘,同样在此设置下Mysql 崩溃的时候会有丢失N个事务日志的风险。

很显然三种模式下,sync_binlog=1 是强一致的选择,选择0或者N的情况下在极端情况下就会有丢失日志的风险,具体选择什么模式还是得看系统对于一致性的要求。

innodb_flush_log_at_trx_commit

 取值0:每秒(一秒钟内提交的事务)写入磁盘  每秒触发一次缓存日志回写磁盘操作,并调用操作系统fsync刷新IO缓存。
 取值1:有事务提交就立即刷盘     每次提交事务都立即调用操作系统fsync刷新IO缓存。
 取值2:每次事务提交 都写给操作系统 由系统接管什么时候写入磁盘   每次都把redo log写到系统的page cache中,由系统接管什么时候写入磁盘

时机顺序:

  • 1 开启事务

  • 2 查询数据库中需要更新的字段,加载到内存中 形成数据脏页

  • 3 记录undo log到内存缓冲区(用于回滚和mvcc)并关联redo log -> 可刷盘

  • 4 记录 redo log到内存缓冲区 (用于失败重放)准备提交事务 -> 可刷盘

  • 5 修改内存中的脏页数据

  • 6 提交事务触发redolog刷盘

  • 7 undo log 和脏页 刷盘

  • 8 事务成功

    redo log 与 binlog 的两阶段提交

redo log 的写入拆成了两个步骤:prepare 和 commit

  • prepare:redolog写入log buffer,并fsync持久化到磁盘,在redolog事务中记录2PC的XID,在redolog事务打上prepare标识

  • commit:binlog写入log buffer,并fsync持久化到磁盘,在binlog事务中记录2PC的XID,同时在redolog事务打上commit标识

34.MySQL的binlog有有几种录入格式?分别有什么区别?

logbin格式:

  • binlog_format=STATEMENT(默认):数据操作的时间,同步时不一致 每一条会修改数据的sql语句会记录到binlog中。优点是并不需要记录每一 条sql语句和每一行的 数据变化,减少了binlog日志量,节约IO,提高性能。缺点是在某些情况下会导致 master-slave 中的数据不一致( 如sleep()函数, last_insert_id(),以及user-defined functions(udf)等会 出 现 问题)

  • binlog_format=ROW:批量数据操作时,效率低 不记录每条sql语句的上下文信息,仅需记录哪条数据被修改了,修改成什么样 了。而且不会出 现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的 问题。缺 点是会产生大量的日志,尤其是alter table的时候会让日志暴涨。

  • binlog_format=MIXED:是以上两种level的混合使用,有函数用ROW,没函数用STATEMENT,但是无法识别系统变量

35.Mysql集群同步时为什么使用binlog?优缺点是什么?
  • binlog是mysql提供的日志,所有存储引擎都可用。

  • 支持增量同步

  • binlog还可以供其他中间件读取,比如同步到hdfs中

  • 如果复制表数据:

    • 不支持某个阶段回放

    • 直接复制数据过程中一旦中断复制(比如断网),很难确定复制的offset

MySQL面试题--MySQL内部技术架构icon-default.png?t=N7T8https://blog.youkuaiyun.com/Timebro/article/details/136946046?spm=1001.2014.3001.5501


MySQL面试题--最全面-索引icon-default.png?t=N7T8https://blog.youkuaiyun.com/Timebro/article/details/136895455?spm=1001.2014.3001.5501

java开发视频直播服务,mysql事务面试题 其实关于Kafka,能问的问题实在是太多了,扒了几天,最终筛选出44问:基础篇17问、进阶篇15问、高级篇12问,个个直戳痛点,不知道如果你不着急看答案,又能答出几个呢? 阅读详情

相关推荐

MySQL面试题(含答案),从简单到深入

MySQL面试题(含答案),从简单到深入!

qq_33525062的博客 645

MySQL事务高频面试题

对于一个事务,要么事务内的SQL全部执行,要么都不执行脏读 Dirty Read(读未提交数据)当事务A正在访问一个数据并进行了修改,但这种修改还没有提交到数据库中,此时事务B也访问到了这个数据,并且使用了这个数据。由于这个数据是还没有提交的数据,那么事务B读取的这个数据是“脏数据”,那么之后的操作都是不正确的。这种情况常发生于转账与取款操作中。幻读 Phantom Read(前后多次读取,数据总量不一致)

weixin_51991615的博客 1757

MySQL 事务的面试题总结

事务是什么? 事务是一系列的数据库操作,是数据库应用的基本单位。MySQL 事务主要用于处理操作量大,复杂度高的数据。 事务有哪些特性? 在 MySQL 中只有 InnDB 引擎支持事务,它的四个特性如下: 原子性(Atomic):要么全部执行,要么全部不执行; 一致性(Consistency):事务的执行使得数据库从一种正确状态转化为另一种正确状态; 隔离性(Isolation):在事务正确提...

磊哥聊Java 456

mysql面试题(事务篇)

mysql

fanjia2shao的博客 1344

Cox构建预测模型(5):如何用R语言绘制校准曲线(附全套代码)

这篇文献通过绘制两个模型的DCA曲线来评估模型的临床决策实际需求,一个是列线图模型,包括纳入列线图的全部变量,一个是TNM模型,只纳入TNM分期3个变量。A图是训练集1年、3年、5年患者的总生存期的DCA曲线;B图是训练集1年、3年、5年患者的总生存期的DCA曲线,红色线条代表列线图模型(包括构建模型的10个变量),黄色线条代表TNM模型(仅纳入TNM分期3个变量),两个模型对比,在绘制校准图之前,必须要完成数据的导入、拆分数据集的工作、预测因子的筛选,校准图的绘制是分别在训练集与验证集独立进行的。

qq_37610365的博客 1360

更新3ds时和用读卡器读取传输文件操作不当导致的tf卡损坏无法读取需要格式化时出现的问题以及不想丢失文件并且修复的详细解决方法

前言: 不小心按了同意更新而且tf/sd卡损坏导致了3ds打开后都是出现 Anerror has occurred:(红色的) Failed to apply 1 FIRM patch(es). Press any button to shotdown 这样的画面,按了任意键后就关机,我找了很多资料和大佬的回答解决了这些问题,现在记录一下。 一.不小心按了更新导致上述的画面 原因:是因为系统升级了,但是里面的Luma3DS还没有更新,属于是更新了但没有完全更新的状态。 **修复方法** 1.首先请按

give_me_fish的博客 1万+

MySQL最常问的10道面试题(2023详解版)

1.什么是聚集索引和非聚集索引简单来说,聚集索引就是基于主键创建的索引,除了主键索引以外的其他索引,称为非聚集索引,也叫做二级索引。由于在InnoDB引擎里面,一张表的数据对应的物理文件本身就是按照B+树来组织的一种索引结构,而聚集索引就是按照每张表的主键来构建一颗B+树,然后叶子节点里面存储了这个表的每一行数据记录。所以基于InnoDB这样的特性,聚集索引并不仅仅是一种索引类型,还代表着一种数据的存储方式。

weixin_46781683的博客 2万+

SAC-IA算法点云粗配准

SAC-IA(Sample Consensus Initial Alignment)是PCL库中的一种初始点云配准算法,它使用特征匹配和RANSAC(随机抽样一致性)框架来估计两个点云之间的初始刚性变换。其目标是通过特征描述符找到一组可靠的匹配点对,并使用这些点对估计初始对齐的变换矩阵。

twnkie的博客 1445

MySQL面试题 (事务+索引)

代写。

路漫漫其修远兮,吾将上下而求索。 2133

数仓建模—数据治理框架选型

全名主要亮点覆盖面最广:从数据治理、架构、质量、安全到元数据、主数据、数据仓库等等,几乎所有数据管理主题都能在DMBOK里找到相应章节。概念权威统一:帮助组织建立通用术语和知识基础,减少“部门之间说法不一致”的沟通成本。适用场景:如果你所在公司(或团队)正准备系统梳理数据管理的方方面面,DMBOK是一份非常全面的指导手册,尤其适合培养新人或为整个组织统一认知。需要注意:DMBOK偏“知识指引”,不直接提供成熟度模型或实施路线图。想要落地,还需要结合其他评估模型或项目管理方法。小案例举例:某。

2401_84052244的博客 4745

PyTorch生成式人工智能(1)——神经网络与模型训练过程详解

在本节中,我们介绍了传统机器学习与人工神经网络间的差异,并了解了如何在实现前向传播之前连接网络的各个层,以计算与网络当前权重对应的损失值;实现了反向传播以优化权重达到最小化损失值的目标。并实现了网络的所有关键组成——前向传播、激活函数、损失函数、链式法则和梯度下降,从零开始构建并训练了一个简单的神经网络。

盼小辉丶的博客 1万+

mysql事物面试题_15个 MySQL事务 面试题总结(题目+解析):你能全答对吗?

上篇我们讲解了MySQL事务面试前的前半部分,同样这篇我们继续来完善。建议一起看:程序员MySQL面试金点:MySQL 事务的面试题总结(上)我始终相信一句话:成功是留给有准备了人。现在好多人都不注重理论基础知识,知识喜欢学习一些平时很浮夸的内容,比如MySQL集群、主从、双机热备等等,这些你在工作中使用占比多少?在这里不是说这些没用,是想告诉你:万丈高楼平地起,基础最主要,下面我们一起来学习吧。...

weixin_30739835的博客 1242

Multica 自托管部署与使用入门:从上线到让 AI Agent 真正干活

Multica是一个将AI Agent作为团队成员的任务协作平台,支持自托管部署。本文介绍了完整的单机部署流程: 核心架构包括前端界面、后端服务、PostgreSQL数据库和Runtime执行机器 推荐使用Docker Compose部署,需配置数据持久化目录 提供详细的docker-compose.yml和.env配置文件说明 重点注意事项:数据库密码和JWT密钥必须修改,生产环境配置必须设为production 需正确配置前端访问地址和WebSocket连接 部署完成后,用户可创建AI Agent并将其

q742971636的博客 1721

MySQL 面试系列:MySQL 事务的面试题总结

MVCC 全称是多版本并发控制系统,InnoDB 和 Falcon 存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决幻读问题。

qq_24428851的博客 1586

机器人动力学仿真软件:Webots_(14).机器人声音仿真

Webots 中的声音仿真主要通过Sound和两种节点来实现。Sound节点用于播放预定义的音频文件,而节点则允许在仿真过程中动态生成和播放声音。这些节点可以用于模拟机器人的语音输出、报警声、环境噪音等。以下是一个示例,展示如何在控制器代码中播放预定义的声音。// 控制器代码(.c) # include <webots/robot.h> # include <webots/sound.h> # define TIME_STEP 64 const char * sound_name = "sound";

kkchenjj的博客 1312

【同等学力】2005-数学⭐✨

有r个正方形排成一行,今用红、黄、白、蓝四种颜色给这个r个正方形染色,每个正方形只能染一种颜色,如果要求染红、黄、白色的正方形分别至少出现一个,问有多少种不同的染法?3、(4分)设G是一个有n个结点m条边的连通简单平面图,若n≥3,则m≤3n-6.4、(4分)证明:任何连通简单平面图至少有一个结点的度数不超过5

super_mochi1 306

【吊打面试官系列-MySQL面试题】MySQL 支持事务吗?

MySQL 支持事务吗?

java1234的博客 302

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

mysql事务的面试题

1.Mysql中InnoDB支持的四种事务隔离级别名称,以及逐级之间的区别? SQL标准定义的四个隔离级别为: read uncommited :读到未提交数据 read committed:脏读,不可重复读 repeatable read:可重读 serializable :串行事物 2.MYSQL支持事务吗? 在缺省模式下,MYSQL是autocommit模式的,所...

小马哥的博客 8711

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

MySQL事务面试题

MySQL事务面试题 事务有哪几种隔离级别呢?可以详细谈谈吗? MySQL中InnoDB存储引擎实现了SQL标准的4种隔离级别,主要用来限定事务内哪些改动是可见的,哪些是不可见的。低级别的隔离一般支持更高的并发处理,并拥有更低的系统开销。 MySQL中可以通过show variables like '%tx_isolation%'查看当前事务的隔离级别。默认使用的是REPEATABLE-READ。记忆技巧:isolate 孤立 e改 tion 表名词。读音:[aslen] 读未提交(read uncommi

lixuanfeng blog 2079

MySQL 事务常见面试题总结 | JavaGuide

《Java 面试指北》来啦!这是一份教你如何更高效地准备面试的小册,涵盖常见八股文(系统设计、常见框架、分布式、高并发 ......)、优质面经等内容。 本文原发于MySQL知识点&面试题总结。 你好,我是 Guide。分享一道群友面试虾皮遇到的 MySQL 事务相关的面试真题。 这篇文章我除了会对群友面试遇到的面试真题进行了解答,还会顺带总结一下 MySQL 事务​部分其他比较常见的问题,希望对你有帮助。 下面是最近更新的一些面试真题: 招银网络一面:Spring,Spring MVC,...

JavaGuide 558

MySQL 事务的面试题总结--事务

事务是什么? 一系列的数据库操作 事务是一系列的数据库操作,是数据库应用的基本单位。MySQL 事务主要用于处理操作量大,复杂度高的数据。 事务有哪些特性? 在 MySQL 中只有 InnDB 引擎支持事务,它的四个特性如下: 全部执行,要么全部不执行 一种正确状态到一种正确状态 在事务正确提交之前,不和其它事务交流 提交后 永久保存 原子性(Atomic):要么全部执行,要么全部不执行;...

凯凯的博客 993

数据库基础面试题-MySQL回滚事务的关键字

2.MySQL的回滚事务的关键字是? A. rollback B. runback C. rallback D. rqllback 正确答案是:A 数据库基础面试题-高级32题

songfelicity的博客 1651

MySQL面试题-事务

什么是数据库事务? 事务是一个不可分割的数据库操作序列,也是数据库并发控制的基本单位,其执行的结果必须使数据库从一种一致性状态变到另一种一致性状态。事务是逻辑上的一组操作,要么都执行,要么都不执行。 事务最经典也经常被拿出来说例子就是转账了。 假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明的余额减少1000元,将小红的余额增加1000元。万一在这两个操作之间突然出现错误...

qq_44545083的博客 258

MYSQL篇--事务机制高频面试题

四大特性也就是原子性,一致性,隔离性,持久性首先我们看原子性说白了就是当前事务的操作要么同时成功,要么同时失败,而原子性其实是由undo log日志来保证的(这里简单介绍下undo log,undo log他其实是一种用于撤销回退的日志,也就是说在事务没提交之前 mysql会先记录更新前的数据到undo log日志文件中,当事务回滚时,可以用undo log来进行数据回滚,其实说白了undolog就是用执行的反向sql语句来进行回滚)接着看隔离性。

m0_37900506的博客 1657

6.10 Mysql 事务 锁 面试题

是通过行级锁来实现的,序列化隔离级别下,普通的 select 查询是会对记录加 S 型的 next-key 锁,其他事务就没没办法对这些已经加锁的记录进行增删改操作了,从而避免了脏读、不可重复读和幻读现象。尽量在开启事务之后,马上执行 select …执行 update 的时候,会加行级别锁,保证了一个事务更新一条记录的时候,不会被其他事务干扰。执行 update 的时候,会加行级别锁,保证了一个事务更新一条记录的时候,不会被其他事务干扰。是原子性,主要通过锁+undolog 日志保证原子性的。

weixin_54385104的博客 668

MYSQL事务面试题记录

数据库事务是数据库管理系统执行过程种的一个逻辑单位,由一个有限的数据库操作序列构成,这些操作要嘛全部执行,要嘛都不执行,是一个不可分割的工作单位。读未提交和串行化基本上是不需要考虑的隔离级别,前者不加锁限制,后者相当于单线程执行,效率太差。读提交解决了脏读问题,行锁解决了并发更新的问题。并且 MySQL 在可重复读级别解决了幻读问题,是通过行锁和间隙锁的组合 Next-Key 锁实现的。

suliaodaidai的博客 2049
上一篇: MySQL面试题--MySQL内部技术架构
下一篇: MySQL面试题--开发(最全,涵盖SQL基础、架构、事务)
共勉浩浩
博客等级 码龄4年 508粉丝 37原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

共勉浩浩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值