菜鸟笔记
提升您的技术认知

MySQL重点面试题

阐述JDBC操作数据库的步骤

  • 得到数据库的数据源
  • 建立数据库连接connection
  • 书写sql语句
  • 执行对象PrepareStatement
  • 执行sql语句
  • 如果是查询操作,获取结果集ResultSet,处理结果集

讲一下数据库的左连接右连接 ?

  • 左连接又称为左外连接,是外连接中的一种,他的关键字是 left join on/left outter join on
  • 在两个表的查询中,左连接时左表的记录会全部表示出来,而右表只会显示符合搜索条件的记录,右表记录不足的地方均为NULL
  • 右连接关键字是right join on/right outter join on,查询结果和左连接相反

数据库三范式

一般指在利用关系型数据库建表时普遍需要遵循的三个规范

  • 第一范式要求建表时要保证列的原子性,也就是一个字段只存储一项信息,而不能是集合,数组等非原子数据项

(例如,在个人信息表中的电话属性,可能是座机号,也可能是手机号,具有可分割性,因此不符合1NF)

  • 第二范式在第一范式的基础上要求所有字段都依赖于主键不存在对主键的部分依赖(例如一个表中有学号,课程,课程学分,成绩四个属性,其中所有非主键列

(成绩,课程学分)都依赖于主键 (学号,课程)。 但是还存在另外一个依赖:(课程)->(课程学分)。这样非主键列 ‘课程学分‘ 依赖于部分主键列 ’课程‘,不符合第二范式。)

  • 第三范式在第二范式的基础上要求每列都与主键有直接关系,不存在传递依赖

(成绩依赖于姓名(非主键),姓名依赖于学号(主键),这样成绩就传递依赖于学号,不符合第三范式)

数据库查询 模糊查询张%

select * from t where name like '张%';

数据库了解多少,写一个更新数据库中记录的SQL语句,表你自己定

update t set name = "001" where id = 10;

数据库的增、删、改、查,去重,左右连接?

insert into t values(1,'JJ','math');

delete from t where id = 1;

update t set name = 'xx'  where id = 1;

select * from t where id = 1;

去重

select distinct name from t;

左右连接

select * from a left join b on a.id = b.id;
select * from a right join b on a.id = b.id;

索引的概念、如何去优化?索引提到了B树

数据库索引底层原理与优化,面试重点考点!!!(强烈建议看一看,点击)

  • 索引是提高查询数据速度的数据结构
  • 索引的优化就是查询算法上的优化-BTree索引
  • mysql支持的索引类型有BTree索引,哈希索引等

对于Btree索引的优化策略:

  • 最左前缀匹配原则
  • 对 where,on,group by,order by 中出现的列使用索引
  • 对较小的数据列使用索引
  • 尽量的扩展索引,不要新建索引
  • 不要过多创建索引(会影响插入、删除数据的速度)

什么是数据库的表连接?具体说一下

表与表之间根据关联字段"连接"(join)在一起,组合成一个数据集。

  • 内连接(inner join)交集
  • 外连接(outer join)交集的补集
    • 左外连接(left outer join)
    • 右外连接(right outer join)
  • 左连接(left join)
  • 右连接(right join)
  • 全连接(full join)

都是字面意思,理解一下就行了

数据库中的索引原理索引失效的场景?

  • 列与列对比(两个列math,English都单独建立了索引,查询时条件为math = English)
  • 存在Null值条件(select * from Student where id is not null;
  • Like 通配符 :使用前置通配符
  • 条件上包括函数:
select * from test where upper(name)='SUNYANG';  --不是对索引列计算                           
select * from test where name=upper('sunyang');--会走索引  
  • 数据类型的转换:id为number类型,select * from sunyang where id='123';
  • 谓词运算:对索引列进行函数运算

如何快速的清空数据库中的一个表,但是不可以改变表的结构,还可以继续往里面写数据?

truncate table table_name;
delete * from table_name;

truncate、delete 清空表数据的区别 :

  • truncate 是整体删除 (速度较快),delete是逐条删除 (速度较慢
  • truncate 不写服务器 log,delete 写服务器 log,也就是 truncate 效率比 delete高的原因

索引的创建?为一个已经存在的表添加主键索引?

create index index1_id on Student(id);

MySQL语句查询成绩大于60分的学生的信息

select * from t where grade > 60;

查询平均成绩大于60分的学生的信息,并按降序排列

select 8 from t where avg(grade) > 60 order by grade desc;

讲一下联合主键和符合主键

  • 联合主键:其实就是一张中间表,在多张表之间,需要每个表中的主键组成联合主键,这样就可以查到每个表中的每个记录,联合主键不能为空,否则违背主键唯一性原则
  • 复合主键:当只有一个字段作为主键是,会有重复的情况,这是需要两个(以上)字段作为共同主键
    • 若表已存在,alter table t add primary key(id)
    • 若表中已有主键,先alter drop,再创建

忘记数据库密码用什么命令查询

bin>net stop mysql//进入 mysql 的 bin 目录下,打开 cmd ,关闭 mysql 数据库。
bin>mysqld --skip-grant-tables//启动 MySQL 服务的时候跳过权限表认证
bin>mysql
mysql>use mysql
mysql>update user set password=password("123456") where user="root";
mysql>flush privileges;//刷新权限
mysql>quit
bin>mysqladmin -u root -p shutdown//修改root密码后需要执行该语句
bin>net start mysql//重启       

MySQL事务的四大特性(ACID)

  • 原子性
  • 一致性
  • 隔离性
  • 持久性

事物隔离级别

  • 读已提交
  • 读未提交
  • 可重复化
  • 可串行化

事务隔离级别,事务操作,ACID详解(面试重点,强烈建议看一看,点击)

什么是死锁,死锁如何处理?

事务循环等待数据锁,则会死锁。

死锁处理:预防死锁协议,死锁恢复机制