Mysql
酷酷的李先生
博文仅供参考,适合初学者,如有错误之处请多多指正.
展开
-
MySQL InnoDB MVCC 能否完全解决幻读?
幻读是指多事务并发中一个事务读到了另一个事务insert的记录。在REPEATABLE READ隔离级别下,假设事务T1执行后,事务T2开始执行,并新增一条记录,然后事务T2提交,这时在事务T1中执行select是看不到事务T2新增的这条记录的。因为在事务T1生成readview的时刻,事务T2属于未来事务,所以是看不到事务T2新增的这条记录的。假设有如下场景:# 表结构如下CREATE TABLE hero ( number INT, name VARCHAR(100),转载 2020-07-31 13:59:24 · 417 阅读 · 1 评论 -
Mysql是如何用每个隔离级别去解决对应的问题?
1.Mysql的innodb引擎,数据库表会自动增加三个字段(记录当前事务的版本号,记录删除时事务版本号,记录回滚指针地址)数据库用共享锁和排它锁去解决脏读,用MVCC(多并发版本控制)不可重复读,用行锁+间隙锁=next-key锁去解决幻读...原创 2020-07-31 14:41:29 · 501 阅读 · 0 评论 -
MySQL 共享锁 (lock in share mode),排他锁 (for update)
共享锁 (lock in share mode)简介允许不同事务之前共享加锁读取,但不允许其它事务修改或者加入排他锁如果有修改必须等待一个事务提交完成,才可以执行,容易出现死锁共享锁事务之间的读取session1:start transaction;select * from test where id = 1 lock in share mode;session2:start transaction;select * from test where id = 1 lock in转载 2020-07-31 09:32:57 · 1495 阅读 · 0 评论 -
Innodb中的事务隔离级别实现原理
前言:我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式。同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理能力。所以对于加锁的处理,可以说就是数据库对于事务处理的精髓所在。这里通过分析MySQL中InnoDB引擎的加锁机制,来抛砖引玉,让读者更好的理解,在事务处理中数据库到底做了什么。#一次封锁or两段锁?因为有大量的并发访问,为了预防死锁,一般应用中推荐使用一次封锁法,就是在方法的开始阶段,已经预先知道会.转载 2020-07-30 09:55:09 · 259 阅读 · 0 评论 -
《MySQL重要知识点及面试总结》
前言:这篇花文章是我花了几天时间对之前总结的MySQL知识点做了完善后的产物,这篇文章可以用来回顾MySQL基础知识以及备战MySQL常见面试问题。什么是MySQL?MySQL 是一种关系型数据库,在Java企业级开发中非常常用,因为 MySQL 是开源免费的,并且方便扩展。阿里巴巴数据库系统也大量用到了 MySQL,因此它的稳定性是有保障的。MySQL是开放源代码的,因此任何人都可以在 GPL(General Public License) 的许可下下载并根据个性化的需要对其进行修改。MySQ转载 2020-07-30 09:53:01 · 294 阅读 · 1 评论 -
面试官问你:MYSQL事务和隔离级别,该如何回答
一、事务事务是由一组SQL语句组成的逻辑处理单元,是满足 ACID 特性的一组操作,可以通过 Commit 提交一个事务,也可以使用 Rollback 进行回滚。事务具有以下4个属性,通常简称为事务的ACID属性:原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。比如在同一个事务中的SQL语句,要么全部执行成功,要么全部执行失败。回滚可以用日志来实现,日志记录着事务所执行的修改操作,在回滚时反向执行这些修改操作即可。一致性(Consistent)转载 2020-07-30 09:49:45 · 163 阅读 · 0 评论