后端知识点链接(四):数据库、Redis、分布式

MySQL

  • 数据库面试题 MySQL数据库面试题(2020最新版)

  • mysql为什么要用自增id作为主键 为什么要使用自增ID作为主键
    直接原因是其存储机制。MySQL采用数据页进行数据存储。如果采用自增主键,在原先数据页写满的情况下,MySQL对于新数据,直接开辟新页进行写操作。如果不采用自增主键,为保障索引有序,新数据需插入到合适位置上,由此针对页数据满的情况下,MySQL需要申请新页,并将一部分之前的页数据挪到新页上,保证按索引有序存储,相对自增主键IO开销更大。

  • select count 1 和 select count 字段 有什么区别 ? Select count(*)、Count(1)、Count(0)的区别和执行效率比较
    1)结果区别
    a、count(1) 会统计表中的所有的记录数,包含字段为null 的记录。
    b、count(字段) 会统计该字段在表中出现的次数,忽略字段为null 的情况。即不统计字段为null 的记录。
    2)效率区别
    a、列名为主键,count(列名)会比count(1)快
    b、列名不为主键,count(1)会比count(列名)快

  • 最好的前几个查询 第二高的薪水SQL查询语句中的 limit 与 offset 的区别

  • SQL分页查询语句?MySql实现分页查询的SQL,mysql实现分页查询的sql语句
    select * from table limit (start-1)*limit,limit; 其中start是页码,limit是每页显示的条数

  • Mysql limit过大如何优化 mysql limit分页(偏移量)过大时优化问题

  • 大数据量的分页查询怎么优化 MySQL大数据量分页查询方法及其优化

  • 跨表分页查询怎么做 “跨库分页”的四种方案

  • SQL通配符匹配查询?MySQL模糊查询?Mysql| 使用通配符进行模糊查询(like,%,_)
    1)%百分号通配符: 表示任何字符出现任意次数 (可以是0次).
    2)_下划线通配符:表示只能匹配单个字符,不能多也不能少,就是一个字符.
    3)LIKE作用:指示mysql后面的搜索模式是利用通配符而不是直接相等匹配进行比较.
    4)通配符的使用
    a、匹配以"yves"开头的记录:(包括记录"yves")
    SELECT * FROM products WHERE products.prod_name like ‘yves%’;
    b、匹配包含"yves"的记录(包括记录"yves")
    SELECT * FROM products WHERE products.prod_name like ‘%yves%’;
    c、匹配以"yves"结尾的记录(包括记录"yves",不包括记录"yves ")
    SELECT * FROM products WHERE products.prod_name like ‘%yves’;

  • 一条sql语句是怎么执行的? 一条SQL语句在MySQL中执行过程全解析

  • 数据库架构面试问题 拼多多面试问了数据库基础知识,今天分享出来

  • MySQL数据更新过程? mysql 一次数据更新过程(undo redo binlog 内存缓冲池扮演了什么角色)

  • MySQL存储引擎有哪些?Innodb和MyISAM的区别? Mysql 存储引擎的区别和比较

  • MySQL事务和隔离级别 深入理解 MySQL 事务:隔离级别、ACID 特性及其实现原理
    1)事务定义:事务(Transaction)是数据库中各种数据项的一个程序执行单元
    2)事务特性:
    a、原子性(Atomicity)
    定义:原子性,是指一个事务是一个不可分割的工作单位,其中的操作要么都做,要么都不做
    实现:undo log属于逻辑日志,它记录的是 SQL 执行的相关信息。当发生回滚时,InnoDB 会根据undo log的内容做与之前相反的工作。
    b、一致性(Consistency)
    定义:数据库前后状态保证一致
    实现:通过其他三个特性保证
    c、隔离性(Isolation)
    定义:隔离性,是指事务内部的操作与其他事务是隔离的,并发执行的各个事务之间不能互相干扰
    实现:数据库并发场景如下
    (一个事务)读操作对(另一个事务)读操作的影响:不存在任何问题,也不需要并发控制
    (一个事务)写操作对(另一个事务)写操作的影响:锁机制保证隔离性
    (一个事务)写操作对(另一个事务)读操作的影响:MVCC 保证隔离性
    d、持久性(Durability)
    定义:持久性,是指事务一旦提交,它对数据库的改变就应该是永久性的。
    实现:redo log。如果 MySQL 宕机,重启时可以读取redo log中的数据,对数据库进行恢复
    3)写操作对读操作的影响
    a、脏读:当前事务(A)中可以读到其他事务(B)未提交的数据(脏数据),这种现象是脏读。
    b、不可重复读:在事务A中先后两次读取同一个数据,两次读取的结果不一样,这种现象称为不可重复读。脏读与不可重复读的区别在于:前者读到的是其他事务未提交的数据,后者读到的是其他事务已提交的数据。
    c、幻读:在事务A中按照某个条件先后两次查询数据库,两次查询结果的条数不同,这种现象称为幻读。不可重复读与幻读的区别可以通俗的理解为:前者是数据变了,后者是数据的行数变了。
    4)事务隔离级别
    a、读未提交(Read Uncommited)存在脏读、不可重复读、幻读
    b、读已提交(Read Commited)存在不可重复读、幻读(Oracle)
    c、可重复读(Repeatable Read)存在幻读(MySQL)
    d、可串行化(Serializable)

  • MVCC机制?当前读和快照读? 【MySQL笔记】正确的理解MySQL的MVCC及实现原理
    1)MVCC定义:MVCC(Multi-Version Concurrency Control)多版本并发控制
    MVCC就是为了实现读-写冲突不加锁,而这个读指的是快照读, 而非当前读,当前读实际是一种加锁的操作。
    MVCC模型在MySQL中的具体实现则是由 3个隐式字段,undo日志 ,Read View 等去完成的。
    2)当前读和快照读
    a、当前读
    就是它读取的是记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加锁
    b、快照读
    不加锁的select操作就是快照读,即不加锁的非阻塞读;快照读的前提是隔离级别不是串行级别,串行级别下的快照读会退化成当前读;之所以出现快照读的情况,是基于提高并发性能的考虑。
    3)实现机制
    a、隐式字段
    定义:每行记录除了我们自定义的字段外,还有数据库隐式定义的DB_TRX_ID,DB_ROLL_PTR,DB_ROW_ID等字段
    ①、DB_TRX_ID:
    6byte,最近修改(修改/插入)事务ID:记录创建这条记录/最后一次修改该记录的事务ID
    ②、DB_ROLL_PTR:
    7byte,回滚指针,指向这条记录的上一个版本(存储于rollback segment里)
    ③、DB_ROW_ID:
    6byte,隐含的自增ID(隐藏主键),如果数据表没有主键,InnoDB会自动以DB_ROW_ID产生一个聚簇索引
    b、undo日志
    定义:不同事务或者相同事务的对同一记录的修改,会导致该记录的undo log成为一条记录版本链表
    ①、insert undo log
    代表事务在insert新记录时产生的undo log, 只在事务回滚时需要,并且在事务提交后可以被立即丢弃
    ②、update undo log
    事务在进行update或delete时产生的undo log; 不仅在事务回滚时需要,在快照读时也需要;所以不能随便删除,只有在快速读或事务回滚不涉及该日志时,对应的日志才会被purge线程统一清除
    c、Read View(读视图)
    定义:事务执行的快照读的那一刻,会生成数据库系统当前的一个快照,记录并维护系统当前活跃事务的ID
    4)RC和RR下的区别
    MVCC只作用在RC和RR两个级别。
    在RC隔离级别下,是每个快照读都会生成并获取最新的Read View,所以可能读到数据不一样
    而在RR隔离级别下,则是同一个事务中的第一个快照读才会创建Read View, 之后的快照读获取的都是同一个Read View,所以读到的数据都一样,解决了不可重复读。
    4)MVCC优点
    a、可以做到在读操作时不用阻塞写操作,写操作也不用阻塞读操作,提高了数据库并发读写的性能
    b、同时还可以解决脏读,幻读,不可重复读等事务隔离问题,但不能解决更新丢失问题

  • MVCC能解决幻读吗?【MySQL】面试题之:MVCC能否解决幻读?
    幻读分当前读和快照读两种情况:
    1)当前读下的幻读
    通过next key lock解决,所谓的next key lock就是一个行锁(record lock)+范围锁ÿ

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值