Mysql面试题总结

基本问题

连接查询

分类:内连接、外连接、自然连接(略)、交叉连接(略)。

  • 内连接

基本语法:左表 [inner] join 右表 on 左表.字段 = 右表.字段;

从左表中取出每一条记录,去右表中与所有的记录进行匹配:匹配必须是某个条件在左表中与右表中相同最终才会保留结果,否则不保留。

  • 外连接

基本语法: 左表 left/right join 右表 on 左表.字段 = 右表.字段;

left join: 左外连接(左连接), 以左表为主表

right join: 右外连接(右连接), 以右表为主表

  • 自然连接
  • 交叉连接

一些常用的关键字

  • union(联合查询)

索引

如果说数据库表中的数据是一本书,那么索引就是书的目录。索引能够让我们快速的定位想要查询的数据。

索引的结构:BTree 索引和 Hash 索引。

MyISAM 和 InnoDB 存储引擎:只支持 BTREE 索引, 也就是说默认使用 BTREE,不能够更换。

MEMORY/HEAP 存储引擎:支持 HASH 和 BTREE 索引。

索引的分类:单列索引(普通索引,唯一索引,主键索引)、组合索引、全文索引、空间索引。

数据库引擎

  • InnoDB:

支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择 InnoDB 有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择 InnoDB,因为支持事务的提交(commit)和回滚(rollback)。

  • MyISAM:

插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择 MyISAM 能实现处理高效率。如果应用的完整性、并发性要求比较低,也可以使用。

MEMORY:所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,可以选择 MEMOEY。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。

存储过程

  • 简介

SQL 语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的 SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。

存储过程是可编程的函数,在数据库中创建并保存,可以由 SQL 语句和控制结构组成。当想要在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟,它允许控制数据的访问方式。

  • 存储过程的优点:

增强 SQL 语言的功能和灵活性;
标准组件式编程;
较快的执行速度;
减少网络流量;
作为一种安全机制来充分利用。

热门面试问题:

1、JDBC 编程的步骤?

(1) 注册驱动;

(2) 获取连接对象 Connection;

(3) 创建 Statement 对象;

(4) 运行 SQL 语句;

(5) 处理结果;

(6) 关闭连接释放资源。

2、事务的 ACID 是什么?事务并发会产生哪些问题?

ACID 表示事务的特性:原子性、一致性、隔离性和持久性。

原子性(Atomic):事务中各项操作,要么全做要么全不做,任何一项操作的失败都会导致整个事务的失败;

一致性(Consistent):事务结束后系统状态是一致的;

隔离性(Isolated):并发执行的事务彼此无法看到对方的中间状态;

持久性(Durable):事务完成后所做的改动都会被持久化,即使发生灾难性的失败。通过日志和同步备份可以在故障发生后重建数据。
3、事务并发产生的问题:脏读、幻读、不可重复读。

脏读(针对未提交的数据):一个事务在更新一条记录,未提交前,第二个事务读到了第一个事务更新后的记录,那么第二个事务就读到了脏数据,会产生对第一个未提交 数据的依赖。一旦第一个事务回滚,那么第二个事务读到的数据,将是错误的脏数据。

不可重复读(读取数据本身的对比):一个事务在读取某些数据后的一段时间后,再次读取这个数据,发现其读取出来的数据内容已经发生了改变,就是不可重复读。

幻读(读取结果集条数的对比):一个事务按相同的查询条件查询之前检索过的数据,确发现检索出来的结果集条数变多或者减少(由其他事务插入、删除的),类似产生幻觉。

事务的隔离级别

IOS SQL92规定了4个隔离级别。(隔离==串行)
在这里插入图片描述
大多数数据库默认的事务隔离级别是 Read Committed,比如 SQL Server , Oracle。但 MySQL 的默认隔离级别是 Repeatable Read。

4、数据库性能优化有哪些方式?
  • SQL 优化:

     尽量避免使用 SELECT	*;
     只查询一条记录时使用 limit 1;
     使用连接查询代替子查询;
     尽量使用一些能通过索引查询的关键字。
    
  • 表结构优化:

     尽量使用数字类型字段,提高比对效率;
     长度不变且对查询速度要求高的数据可以考虑使用 char,否则使用 varchar;
     表中字段过多时可以适当的进行垂直分割,将部分字段移动到另外一张表;
     表中数据量过大可以适当的进行水平分割,将部分数据移动到另外一张表。
    
  • 其它优化:

     对查询频率高的字段适当的建立索引,提高效率;
     根据表的用途使用合适的数据库引擎;读写分离。		
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值