-
MySQL 面试路线最全整理(附面试题精选及答案)
MySQL 面试路线最全整理,附 MySQL 高频必考面试题及答案。 搞定 MySQL 面试题,看这一篇就够了,不用四处找资料,节约大量时间。 1 MySQL 面试题及答案 MySQL – 数据类型 MySQL 中 TEXT 数据类型的最大长度 MySQL 中有哪些时间字段 MySQL 的数据类型有哪些 MySQL 的常用函数有哪些 MySQL – 存储引擎 MySQL 存储引擎有哪些 My…... -
MySQL 学习进阶路线及资料(附大厂面试题合集)
高性能、高并发和高可用的系统开发,一定绕不开 MySQL 数据库。 在 Java 面试中,MySQL 数据库也属于高频考题,中大厂面试更是必考必问。 其重要性不言而喻。 想要深入学习 MySQL ,就要先了解 MySQL 的完整知识体系。 我最新总结的这份 MySQL 学习进阶路线及资料,包含了 MySQL 涉及的所有核心知识点,可以用来参考学习、构建知识体系、复盘技术栈。 MySQL 学习进阶路…... -
MySQL如何设置事务的开启、禁用自动提交
参考答案 MySQL 默认开启事务自动提交模式,即除非显式的开启事务(BEGIN 或 START TRANSACTION)。否则每条 SOL 语句都会被当做一个单独的事务自动执行。 但有些情况下,我们需要关闭事务自动提交来保证数据的一致性。 一、设置事务自动提交模式 实例: mysql> SHOW VARIABLES LIKE 'autocommit'; +…... -
MySQL默认的事务隔离级别是什么
参考答案 MySQL的4个事务隔离级别: MySQL默认的事务隔离级别: MySQL 的默认事务隔离级别是 Repeatable Read(可重复读)。 Repeatable Read(可重读) 可以完全保证事务的隔离性要求,即达到了 SQL标准的SERIALIZABLE(可串行化)隔离级别,InnoDB 存储引擎默认使用 Repeatable Read(可重读),不会有任何性能损失。  …... -
MySQL有哪些事务隔离级别
参考答案 MySQL的4个事务隔离级别: 1. READ-UNCOMMITTED(读取未提交) 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。 2. READ-COMMITTED(读取已提交) 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。 3. REPEATABLE-READ(可重复读) 对同一字段的多次读取结果都是一致的,…... -
MySQL的高可用方案有哪些
参考答案 本篇详解:MySQL的高可用方案选型,MySQL的5个常见高可用方案、以及其各自的优缺点。 一、 MySQL的高可用方案选型 在考虑MySQL数据库的高可用的架构时,主要参考如下几个方面: 如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障而中断。 用作备份、只读副本等功能的非主节点的数据应该和主节点的数据实时或者最终保持…... -
MySQL分区表有哪些限制因素
参考答案 MySQL分区表的限制因素: 1. 禁止构建 分区表达式不支持以下几种构建: 存储过程,存储函数,UDFS或者插件。 声明变量或者用户变量。 2. 算术和逻辑运算符 分区表达式支持+,-,*算术运算,但是不支持DIV和/运算。 3. 服务器SQL模式 如果要用用户自定义分区的表,在创建分区表时的SQL模式是不保留的。 4. 文件系统操作 分区或者重新分区(比如ALTER…... -
MySQL支持的分区类型有哪些
参考答案 MySQL支持的分区类型: RANGE分区:基于属于一个给定连续区间的列值,把多行分配给分区。 LIST分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。 HASH分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含MySQL 中有效的、产生非负整数值的任何表达式。 KEY…... -
MySQL分库分表会产生哪些问题
参考答案 分库分表能有效的环节单机和单库带来的性能瓶颈和压力,突破网络IO、硬件资源、连接数的瓶颈,同时也带来了一些问题。 MySQL分库分表会产生的问题如下: 1. 事务一致性问题 1) 分布式事务 当更新内容同时分布在不同库中,不可避免会带来跨库事务问题。跨分片事务也是分布式事务,没有简单的方案,一般可使用"XA协议"和"两阶段提交"处理。 分布式事…... -
MySQL分库分表工具有哪些?
参考答案 1. 金山的Kingshard https://github.com/flike/kingshard/blob/master/README_ZH.md 2. 百度的heisenberg https://github.com/brucexx/heisenberg 3. 58同城的Oceanus https://github.com/58code/Ocean…... -
MySQL分库分表怎么操作
参考答案 一、MySQL分库分表的原因 随着用户的增多,当数据量大到一定程度,仅一张表的数据可能就超过千万时,执行查询或修改等操作就比较耗时,这时就需要进行数据库切分的操作。 二、MySQL分库分表的方式 1. MyBatis实现分表最简单步骤 1)模拟用户表数据量已超过千万。 2)用户表原来的名字叫做user_tab,我们切分为user_tab_0和user_tab_1,这样就能把原来千万的数…... -
MySQL为什么要分库分表
参考答案 使用分库分表的3个原因: 1. 性能 关系型数据库多以B+树类型的索引,在数据量超过阈值的情况,索引深度的增加使得磁盘访问的IO次数增加,导致性能下降,同时,高并发访问使得集中数据库成为系统瓶颈。 2. 可用性 服务化的无状态型,能够达到较小成本的随意扩容,导致系统的最终压力都落到数据库上。 3. 运维成本 当一个数据库实例中的数据达到阈值,对于DBA的运维压力就会增大。 &n…... -
MySQL死锁怎么排查
参考答案 死锁异常,一般要在特定时间、特定数据和特定业务操作才会复现。 例如,线上业务复杂,各种业务操作之间可能会产生锁冲突,有些就会导致死锁异常。 出现MySQL死锁问题,可以按照以下思路来排查处理。 一、MySQL死锁排查思路及步骤 线上错误日志报警发现死锁异常。 查看错误日志的堆栈信息。 查看 MySQL 死锁相关的日志。 根据 binlog 查看死锁相关事务的执行内容。 根据上述信息找出两…... -
MySQL产生死锁有哪些必要条件
参考答案 MySQL产生死锁的4个必要条件: 1. 互斥条件 资源是独占的且排他使用,进程互斥使用资源,即任意时刻一个资源只能给一个进程使用,其他进程若申请一个资源,而该资源被另一进程占有时,则申请者等待直到资源被占有者释放。 2. 不可剥夺条件 进程所获得的资源在未使用完毕之前,不被其他进程强行剥夺,而只能由获得该资源的进程资源释放。 3. 请求和保持条件 进程每次申请它所需要的一部分资源,…... -
MySQL什么情况会发生死锁
参考答案 死锁DeadLock是指两个或两个以上的进程,在执行过程中争夺资源,从而造成的一种互相等待的现象。 若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等竺的进程称为死锁进程. 表级锁不会产生死锁,所以解决死锁主要还是针对于最常用的InnoDB. 死锁的关键在于:两个(或以上)的Session加锁的顺序不一致。 例如: 1. session1 执行 …... -
MySQL中行锁实现的几种算法
参考答案 MySQL中行锁实现的三种算法: 1. Record Lock 单个记录上的锁。 锁总会锁住索引记录,锁住的时key。 如果InnoDB存储引擎表在建立的时候没有设置任何一个索引,那么这时InnoDB会使用隐式的主键进行锁定。 2. Gap Lock 间隙锁,锁定一个范围,但不包含记录本身。 锁定索引记录间隙,确保索引记录的间隙不变。 间隙锁是针对事务隔离级别,为可重复读或以上级别…... -
MySQL中的自增锁有什么用
参考答案 MySQL中自增锁的作用: 自增锁是表级锁。 自增锁是用于自增类型的操作。 自增锁的作用是为了保证数据库的主键是自动递增的,用于拥有自增主键的数据表的插入操作,两个事务先后执行插入操作,第二个事务的插入操作则会被阻塞,因为需要保证主键是递增操作。 以上,是MySQL面试题【MySQL中的自增锁有什么用】的参考答案。 输出,是最好的学习方法。 欢迎在评论区留下你的问题、笔记或知识点补充~ …... -
MySQL中意向锁的分类
参考答案 意向锁是一种不与行级锁冲突的表级锁,用于行锁和表锁共存,当获取行锁时,MySQL会隐式的获得意向锁。 意向锁的作用是:当需要获得表锁时,可以判断是否有事务已经获得意向锁,而不必遍历所有索引查看具体被谁占用。 意向锁分为两种类型: 意向共享锁(intention shared lock, IS); 意向排他锁(intention exclusive lock, IX)。 以上,是MySQL…... -
MySQL中的意向锁有什么用
参考答案 MySQL中的意向锁的作用: 1. 在MySQL中有表锁 LOCK TABLE my_tabl_name READ; 用读锁锁表,会阻塞其他事务修改表数据。 LOCK TABLE my_table_name WRITe; 用写锁锁表,会阻塞其他事务读和写。 2. Innodb引擎又支持行锁 行锁分为: 共享锁,一个事务对一行的共享只读锁。 排它锁,一个事务对一行的排他读写锁。 3. …... -
MySQL InnoDB支持什么锁
参考答案 InnoDB有七种类型的锁: 共享/排它锁(Shared and Exclusive Locks) 意向锁(Intention Locks) 记录锁(Record Locks) 间隙锁(Gap Locks) 临键锁(Next-key Locks) 插入意向锁(Insert Intention Locks) 自增锁(Auto-inc Locks 以上,是MySQL面试题【My…... -
MySQL支持哪三种级别的锁
参考答案 MySQL支持这三种级别的锁:页级、表级、行级。 页级的典型代表引擎为BDB。 表级的典型代表引擎为MyISAM,MEMORY以及很久以前的ISAM。 行级的典型代表引擎为INNODB。 在实际应用中,使用最多的是行锁。 1. 行级锁 当很多连接分别进行不同的查询时减小LOCK状态。 如果出现异常,可以减少数据的丢失。因为一次可以只回滚一行或者几行少量的数据。 比页级锁和…... -
MySQL中的for update锁的是什么
参考答案 MySQL中的for update锁的概念: for update是一种行级锁,又叫排它锁。 如果用户对某个行施加了行级加锁: 则该用户可以查询也可以更新被加锁的数据行。 其它用户只能查询,但不能更新被加锁的数据行。 如果其它用户想更新该表中的数据行,则也必须对该表施加行级锁。 即便多个用户对一个表均使用了共享更新,也不允许两个事务同时对一个表进行更新,真正对表进行更新时,是以独占方式锁…... -
如何实现分库分表
参考答案 一、分库分表的实现方案 有如下两种: 1. 增加一个中间层,中间层实现 MySQL 客户端协议,可以做到应用程序无感知地与中间层交互。由于是基于协议层的代理,可以做到支持多语言,但需要多启动一个进程、SQL 的解析也耗费大量性能、由于协议绑定仅支持单个种类的数据库库。 2. 在代码层面增加一个路由程序,控制对数据库与表的读写。路由程序写在项目里,与编程语言绑定、连接数高、但相对轻量(…... -
项目中如何实现读写分离
参考答案 关于读写分离的使用 在项目中使用读写分离,可以增加数据库服务器资源 + 网络带宽,来分摊对数据库的读写请求,从而提高了性能和可用性。 很多大型网站所处理的业务中,有大约70%是查询(select)相关的业务操作,而剩下的30%是写操作(insert、delete、update),所以可以使用读写分离的方式,去提升数据库的负载能力。 读写分离的实现方式 大部分企业在项目中,是…...