Mysql面试个人总结

主键与外键的区别?

  1. 首先主键是用来保持数据完整性的;外键是用来与其他表建立关联的。
  2. 主键唯一标识一条记录,不能重复,不可以为空;外键可以重复可以为空。
  3. 主键一张表只有一个但可能存在多个外键。

码、候选码和主码的区别?

码(超键):能够唯一标识一条记录的属性或属性集
候选码(候选键):能够唯一标识一条记录的最少的属性集合
主码(主键)某个能够唯一标识一条记录的最小属性集(是从候选码里人为挑选的一条


三大范式?

  1. 第一范式:表的每一列字段不能再分,具有原子性,否则就不是关系型数据库了
  2. 第二范式:有主键,非主键列必须完全依赖于主键;具有唯一性,一个表只说明一个事物
  3. 第三范式:非主键列不能相互依赖,不能存在传递依赖

什么是索引?

索引帮助mysql高效获取数据的一种数据结构。我的理解就是:排好序的方便快速查找的一种数据结构。

Mysql索引使用的数据结构主要有B+Tree索引哈希索引
对于单条记录的查询,可以选择哈希索引,查询性能最快;但是哈希索引不适用于范围查询,因此除单条记录查询外其他大部分场景,建议选择B+Tree索引。

索引分类

  1. 单值索引: 一个索引只包含单个列
  2. 复合索引: 即一个索引包含多个列
  3. 唯一索引: 索引列的值必须唯一,但允许有空值
ALTER TABLE `table_name` ADD INDEX index_name ( `column` ); #3.添加INDEX(普通索引) 
DROP INDEX [indexName] ON mytable;	# 删除:

哪些情况会索引失效?

  1. 模糊查询like以%开头,索引失效
  2. 条件中有or,索引失效
  3. 使用复合索引的时候,没有使用左侧的列查找,索引失效
  4. 在where当中,索引列参加了运算或者使用了函数,索引失效

Mysql事务的4个特性?

A:原子性:
说明事务是最小的工作单元,不可再分。要么全都执行成功,要么全部失败。
C:一致性:
事务开始前和结束后,数据库的完整性约束没有被破坏,都必须处于一致性状态。
I:隔离性:
不同事务之间彼此互补干扰,具有一定的隔离。
D:持久性:
事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。


事务的隔离级别?

有四个隔离级别。

  • 读未提交:read uncommitted (最低隔离级别)
    概念:事务A可以读取到事务B未提交的数据。
    存在的问题:可能会出现脏读现象(我们称读到了脏数据)

  • 读已提交:read committed
    概念:事务A只能读取到事务B提交之后的数据。
    存在的问题:解决了脏读问题。但是可能出现不可重复读问题:即某个事务如果重复读取某个数据,每次读取的数据可能不能,可能已经发生了改变。

  • 可重复读:repeatable read
    概念:就是在开始读取数据(事务开启)时,不再允许其他事务进行修改操作,对数据行加了写锁,可以重复读取某个数据(不会改变)。
    存在的问题:解决了不可重复读问题。但是可能出现幻读问题:一个事务按照相同的检索条件重新读取数据,却发现其他事务插入了满足其查询条件的新数据。

  • 序列化/串行化:serializable (最高隔离级别)
    概念:事务只能串行化执行,一个接一个执行,不能并发执行。虽然序列化的隔离级别解决了上述所有可能出现的问题,但是很明显这样的效率是很低的。


常见的存储引擎?

MyISAM和InnoDB

在这里插入图片描述
两种存储引擎的区别

  1. InnoDB支持主外键;MyISAM不支持主外键。
  2. InnoDB支持事务;MyISAM不支持事务。
  3. InnoDB支持表锁和行锁(默认);MyISAM只支持表锁,因此并发度不高。
  4. InnoDB是聚集索引,使用B+Tree作为索引结构,数据是和索引绑在一起的,索引和数据存在于同一个文件;MyISAM是非聚集索引,也是使用B+Tree作为索引结构,索引和数据文件是分离的,索引保存的是数据文件的指针。

Mysql中的锁?

主要分为表级锁行级锁

  • 表级锁:Mysql中锁定粒度最大的一种锁,对当前操作的整张表加锁,实现简单,加锁快,不会出现死锁。但是它的锁定粒度较大,触发锁冲突的概率最高,并发度最低
  • 行级锁:Mysql中锁定粒度最小的一种锁,只针对当前操作的行进行加锁,大大减小了触发锁冲突的概率,并发度高。但它加锁的开销较大,加锁慢,会出现死锁

char与varchar的区别?

  1. char的长度是不可变得;varchar的长度是可变的。
  2. 如果定义一个char[10]和varchar[10],然后都存入字符串‘abcd’,那么char的长度依然是10,除了字符‘abcd’外,其余用空格填充;而varchar的长度会变成4。
  3. 虽然char牺牲了空间,但是他的时间效率要比varchar高。

MySQL 的内连接、左连接、右连接有什么区别?

内连接:显示两个表中有联系的所有数据
左连接:显示左表所有数据,以及两表中相关联的数据
右连接:显示右表所有数据,以及两表中相关联的数据


如果有什么问题还希望各位朋友能够帮忙指出,如果对你有帮助可以先点个赞,嘻嘻!!!

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

coderzpw

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

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

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

打赏作者

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

抵扣说明:

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

余额充值