MySQL常见面试题 webber

一、事务

1.什么是事务

事务:是一组原子操作单元,要么全部执行成功,要么撤销不执行

2.事务的四大特性(ACDI)

原子性(atomicity):原子性表示事务中包含的操作要么都做,要么都不做。

一致性(consistency):一致性表示一个事务执行之前和执行之后都必须处于一致性状态。

隔离性(isolation):隔离性表示事务不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。

持久性(durability):持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的

3.不考虑隔离性会产生的三个问题

  1. 脏读:在一个事务处理过程里读取了另一个未提交的事务中的数据

  2. 不可重复读:一个事务两次读取同一行的数据,结果得到不同状态的结果

  3. 幻读(虚读):一个事务执行两次查询,第二次结果集包含第一次中没有或某些行已经被删除的数据,造成两次结果不一致

4.三个问题的解决方法(四种隔离性)

Read Uncommited(读取未提交内容)

读未提交,顾名思义,就是一个事务可以读取另一个未提交事务的数据,

  • 读未提交产生了脏读

Read Commited(读取提交内容)

读提交,顾名思义,就是一个事务要等另一个事务提交后才能读取数据

  • 读提交解决了脏读

  • 读提交会产生不可重复读

Repeatable Read(重复读)

重复读,就是在开始读取数据(事务开启)时,不再允许修改操作

  • 重复读解决了不可重复读

  • 重复读会产生幻读

Serializable(可串行化)

Serializable 是最高的事务隔离级别,在该级别下,事务串行化顺序执行

  • 可以避免脏读,不可重复读,幻读

  • 效率低下,比较耗数据库性能,一般不使用

注意

1.大多数数据库默认的事务隔离级别是Read committed(Mysql的默认隔离级别是Repeatable read)

2.隔离级别的设置只对当前链接有效

3.设置数据库的隔离级别一定要是在开启事务之前

二、索引

1.索引的种类

  • 唯一索引:加速查询 + 列值唯一(可以有null)

  • 主键索引:加速查询 + 列值唯一(不可以有null)+ 表中只有一个

  • 组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并

  • 全文索引:对文本的内容进行分词,进行搜索

2.索引的目的

  • 快速访问数据表中的特定信息,提高检索速度

  • 创建唯一性索引,保证数据库表中每一行数据的唯一性。

  • 加速表和表之间的连接

  • 使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间

3.什么时候使用索引

  • 表中该字段中的数据量庞大

  • 经常被检索,经常出现在where子句中的字段

  • 经常被DML操作的字段不建议添加索引

4.索引的缺点

  • 创建索引和维护索引需要耗费时间,这个时间随着数据量的增加而增加;

  • 索引需要占用物理空间,不光是表需要占用数据空间,每个索引也需要占用物理空间;

  • 当对表进行增、删、改、的时候索引也要动态维护,这样就降低了数据的维护速度。

三、存储引擎

1.MySQL的存储引擎

其中三种比较重要

  • MyISAM:可压缩,设置为只读,节省空间。

  • INnoDB(默认使用):支持事务,外键的完整性,级联删除,级联更新。

  • MEMORY(记忆):数据存储在内存中,时临时的,数据查询非常快。

2.存储引擎的选择

  • Myisam:大量的读少量更新

  • InnoDB:支持事务和并发

  • Memory:非永久需要的数据

其他常见问题

1.LIMIT分页

select * from emp limit m,n;

  • 从m+1开始,展示n条数据

2.order by 和 group by关键字

  • order by

    排序采用order by子句,order by后面跟上排序字段,排序字段后面可以放多个,多个采用逗号间隔

    order by默认采用升序asc,降序为desc

    如果存在where子句,那么order by必须放在where 语句后面。

  • group by

    分组查询采用order by子句,如果使用了order by,order by 必须放到group by后面。

    在sql语句中,select语句后面只能跟分组函数+参与分组的字段。

    如果想要对分组数据再进行过滤需要使用having子句。

3.MySQL常见约束

  • 非空:not null

  • 唯一约束:unique

  • 主键约束: primary key,唯一标识一条记录,不能有重复,不能为空。

  • 外键约束: foreign key,表的外键是另一个表的主键,外键可以为空,可以重复。

4.左连接和右连接的区别

  • 左连接是显示左表的所有数据,没有匹配的以null值显示,以左表为主表。

  • 右连接是显示右表的所有数据,没有匹配的以null值显示,以右表为主表。

5.数据库三范式的理解

  • 第一范式(1NF):原子性 每个字段不可再分,否则就不是关系数据库;

  • 第二范式(2NF):唯一性 一个表只说明一个事物,所有非关键字段都完全依赖于任一组候选关键字;

  • 第三范式(3NF):每列都与主键有直接关系,不存在传递依赖;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值