mysql面试题笔记

1.数据库的创建和删除?

答:create database 库名;drop database 库名;

2.MyISAM与InnoDB的区别?

答:(1)MyISAM用于表锁,不支持事务,不支持外键(2)InnoDb可以用于行锁和表锁,但主要用于行锁,支持事务,支持外键。

3.char和varchar区别?

答:char表示长度固定的字符串类型,varchar表示长度可以改变的字符串类型。

4.mysql获取当前日期

答:select current_date();

5.获取mysql版本

答:select version();

6.什么是触发器?mysql中触发器类型有哪些?

答:执行某段代码触发了某个事件而执行了另一段代码。类型有6种:(1)Before insert(2)After insert(3)Before delete(4)After delete(5)Before update(6)After update。

7.说说mysql中的锁机制

答:数据库能同时被多个用户访问,锁是一种保证了数据一致性、有效性的机制。按粒子分有三类(1)表锁(2)行锁(3)页锁,页锁介于行锁和表锁之间。按操作分两类(1)读锁又称共享锁(2)写锁又称排他锁。InnoDB引擎即支持行锁也支持表锁,默认情况下是行锁,MyISAM引擎支持表锁。

8.说说mysql中事务的的四大特性(ACID)

答:(1)原子性:事务的操作要么都成功要么都失败,若失败的话则会退回到执行事务前的状态,就像什么都没发生过(2)一致性:事务执行前和执行后,数据库的完整性没有改变(3)隔离性:数据库允许多个并发事务同时对数据进行读写、修改,隔离级别有:读未提交,读已提交,可重复读,序列化(4)持久性:执行成功事务后,对数据的修改是永久的,系统故障也不会丢失数据。

9.mysql的存储过程

答:提前编写好的sql语句集并编译存在数据库中,供外部程序直接调用使用。

10.什么是索引?什么场景使用?

答:简单来说就是一个排好序的可以快速查找的数据结构,使用场景:(1)小量数据表直接全表扫描即可(2)适合中大量数据表(3)超大量数据表,对于建立和使用索引的代价会随之增大,可以使用分区、分库。

11.索引的种类

答:(1)主键索引(2)普通索引(3)全文索引(4)唯一索引(5)组合索引(6)覆盖索引

12.索引如何创建和删除?

答:(1)创建:单个索引:create index idx_表名_字段名1 on 表名(字段名1);联和索引:create index idx_表名_字段名1_字段名2 on 表名(字段名1,字段名2)(2)删除:drop index 索引名 on 表名。
注:将index替换成unique就变成了唯一索引,替换成primary key 就变成了主键索引。

13.索引对性能有哪些影响(或者说是索引的优缺点)?

答:优点(1)减少了数据库服务器扫描数据量(2)帮助了数据库服务器避免排序和产生临时表(3)随机I/O变成顺序I/O(4)提高了数据查询速率(5)唯一索引保证了数据的唯一性。(记忆:减少-帮助-I/O-速率-唯一)缺点:(1)随着数据量的增加,建立和维护索引的时间也增加(2)对数据进行增删改时,索引也需要进行动态维护(3)增大了磁盘占用。(记忆:量增-删改-磁盘)

14.列值为NULL时,查询是否会用到索引?

答:会用到索引,但是尽量不在有索引的列使用null值,因为这样会使数据库难以优化该列的查询,增加了引擎的复杂度。

15.LIKE 后的%和_代表什么?

答:%代表0或多个字符;_代表1个字符。

16.与Oracle相比,Mysql有什么优势?

答:(1)开源且免费(2)操作简单,容易部署,用户可以根据自己需求制定数据库(3)引擎是插入式的。

17.mysql中你用过的函数类型?

答:(1)数值型函数:ABS、MOD、FLOOR、CEIL、ROUND(2)字符串函数:INSERT、CONCAT、LENGTH(3)日期函数:YYYY、CURRENT_DATE、CURRENT_TIME(4)聚合函数:SUM、MAX、MIN、COUNT、AVG(5)流程控制函数:IF、IFNULL、CASE。

18.mysql的体系结构是什么样的?

答:连接者-连接池-管理服务和工具组件-sql接口-查询解析器-查询优化器-缓存-插入式引擎。

19.mysql中的乐观锁和悲观锁。

答:(1)乐观锁:每次获取数据时,都认为别人不会对要获取的数据进行修改,不会上锁,但是在提交修改的时候会判断数据是否被修改过。(2)悲观锁:每次获取数据时都认为别人会修改这个数据,每次都上锁,阻止别的线程操作该资源,直到将锁释放。

20.说一些索引失效的情况

答:(1)条件中有or(2)where子句使用了函数或者运算符(3)以%开头的的模糊查询(4)索引列数据类型存在隐式转换(5)当mysql引擎认为全表扫描比使用索引快,则不用索引,即索引失效。

21.说一说 mysql 的行锁和表锁

答:(1)行锁:开销大,加锁慢,会出现死锁,发生锁冲突概率低,并发量高。(2)表锁:开销小,加锁快,不会出现死锁,发生锁冲突概率高,并发量低。

22.mysql中如何避免死锁?

答:(1)尽量使用相同顺序索引来操作表(2)给锁设置等待超时参数。

23.truncate、drop和delete的区别?

答:(1)drop删除整张表,那么自然里面的数据也会随之删除,delete是删除表中的一行或多行数据,truncate是删除整张表数据但表还存在(2)三者的删除速度从大到小依次为:drop>truncate>delete(3)truncate、drop是数据定义语言(DDL)而delete是数据操作语言(DML)(4)使用场合:不需要整张表使用drop,需要表但数据全部不需要使用truncate,需要表但只需删除部分数据用delete。

24.左连接、右连接、内连接和全外连接的区别?

答:(1)左连接表示返回左表全部记录和右表连接字段相等的记录(2)右连接表示返回右表全部记录和左表连接字段相等的记录(3)内连接表示返回左右表连接字段相等的记录(4)全外连接表示返回左右表连接字段相等和剩余所有记录。

25.并发事务引发的脏读、不可重复读、幻读分别表示什么意思?

答:(1)脏读:一个事务读取了另一个事务还未提交的数据(2)不可重复读:重复读取同一个事务,数据的条数一致,内容却不一致(3)幻读:重复读取同一事务,数据条数不一致。
注:不可重复读发生在update中,幻读发生在insert、delete中。

26.事务有哪些隔离级别?

答:(1)读未提交:这是最低隔离级别,一个事务可以读取到另一个事务未提交的数据,会出现脏读、不可重复读、幻读等并发问题(2)读已提交:该级别不会出现脏读,一个未提交的事务不可以被另一个事务看到,但会出现不可重复读、幻读(3)可重复读:该级别不会出现脏读、不可重复读。除了未提交的事务不能被读取外还避免了不可重复读,但会出现幻读(4)序列化:该级别是成本最高的,它能够使事务按顺序执行,避免了脏读、不可重复读、幻读。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值