MySQL面试常见题

分类专栏:
面试题分享

文章标签:
MySQL
常见面试题
原创

1.用一条SQL语句,查询每门课都大于80分的学生姓名

name kecheng fenshu
张三 语文 81
张三 数学 75
李四 语文 76
李四 数学 90
王五 语文 81
王五 数学 100
王五 英语 90
select distinct name from table where name not in (select distinct name from table where fenshu<=80)
select name from table group by name having min(fenshu)>80

2.学生表,删除除了自动编号不同,其他都相同的学生信息

自动编号 学号 姓名 课程编号 课程名称 分数
1 2005001 张三 0001 数学 69
2 2005002 李四 0001 数学 89
3 2005001 张三 0001 数学 69
delete tablename where 自动编号 not in (select min (自动编号)from tablename group by 学号,姓名,课程编号,课程名称,分数 )

3.一个叫team的表,里面只有一个字段name,一共有4条记录,分别是abcd,对应四个球队,现在四个球队比赛,用一条SQL语句显示所有可能的比赛组合

select a.name,b.name from team a,team b where a.name < b.name

4.从TestDB数据表中查询所有月份的发生额都比101科目相应月份的发生额高的科目。TestDB中有很多科目,都有1-12月份的发生额 。

AccID是科目代码,Occmonth是发生额月份,DebitOccur是发生额,JcyAudit是数据库名,数据集为select * from TestDB

select a.* from TestDB a,(select Occmonth ,max(DebitOccur)Debit101ccur from TestDB where AccID = '101' group by Occmonth)b where a.Occmonth = b.Occmonth and a.DebitOccur>b.Debit101ccur

5.使用SQL将表1查询成表2状态

表1:

year month amount
1991 1 1.1
1991 2 1.2
1991 3 1.3
1991 4 1.4
1992 1 2.1
1992 2 2.2
1992 3 2.3
1992 4 2.4

表2:

year m1 m2 m3 m4
1991 1.1 1.2 1.3 1.4
1992 2.1 2.2 2.3 2.4
select year,
(select amount from aaa m where month=1 and m.year=aaa.year) as m1,
(select amount from aaa m where month=2 and m.year=aaa.year) as m2,
(select amount from aaa m where month=3 and m.year=aaa.year) as m3,
(select amount from aaa m where month=4 and m.year=aaa.year) as m4 
from aaa group by year

6.为管理业务培训建立三个表

表一:S(S#,SN,SD,SA)
S#(学号),SN(学员姓名),SD(所属单位),SA(学员年龄)
表二:C(C#,CN)
C#(课程编号),CN(课程名称)
表三:SC(S#,C#,G) 
S#(学号),C#(所选的课程编号)G(学习成绩)

1)使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名?

select s# ,sn from s where S# in(select S# from c,sc where c.c#=sc.c# and cn=’税收基础’)

2)使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位?

select sn,sd from s,sc where s.s#=sc.s# and sc.c#=’c2’

3)使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位?

select sn,sd from s where s# not in(select s# from sc where c#=’c5’)

4)查询选修了课程的学员人数

select 学员人数=count(distinct s#) from sc

5)查询选修课程超过5门的学员学号和所属单位?

select sn,sd from s where s# in(select s# from sc group by s# having count(distinct c#)>5)

7.SQL查询

1)查询A(ID,Name)表中第31至40条记录,ID作为主键可能是不是连续增长的列

select top 10 * from A where ID >(select max(ID) from (select top 30 ID from A order by A ) T) order by A

2)查询表A中存在ID重复三次以上的记录,完整的查询语句如下:

select * from(select count(ID) as count from table group by ID)T where T.count>3

8.触发器的作用?

触发器是一种特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算,如某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。

9.什么是存储过程?用什么调用?

存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只创建一次,以后在该程序中就可以多次调用。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。可以用一个命令对象来调用存储过程

10.索引的作用?优缺点是什么?

索引就是一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小

11.什么是内存泄漏?

一般我们所说的内存泄漏指的是堆内存的泄漏。
堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。
当应用程序用关键字new 等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free 或者delete 释放该内存
否则就说该内存就不能被使用,我们就说该内存被泄漏了

12.维护数据库的完整性和一致性,你喜欢用触发器还是自写业务逻辑?为什么?

尽可能使用约束,如check, 主键,外键,非空字段等来约束,这样做效率最高,也最方便
其次是使用触发器,这种方法可以保证,无论什么业务系统访问数据库都可以保证数据的完整新和一致性
最后考虑的是自写业务逻辑,但这样做麻烦,编程复杂,效率低下

13.什么是事务?什么是锁?

事务就是被绑定在一起作为一个逻辑工作单元的SQL 语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过ACID 测试,即原子性,一致性,隔离性和持久性。

锁:在所有的DBMS中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。当然锁还分级别的。

14.什么是视图?游标是什么?

视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。

游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。

15.Heap表是什么?

HEAP表存在于内存中,用于临时高速存储

16.如何区分FLOAT与DOUBLE,CHAR_LENGTH与LENGTH?

浮点数以8位精度储存在FLOAT中,四个字节
浮点数以18位精度储存在DOUBLE中,八个字节

CHAR_LENGTH是字符数
LENGTH是字节数

17. Mysql 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别?

SQL标准定义的四个隔离级别为:
read uncommited :读到未提交数据
read committed:脏读,不可重复读
repeatable read:可重读
serializable :串行事物

18.在Mysql中ENUM的用法是什么?

ENUM 是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用

19.如何定义REGEXP?

REGEXP是模式匹配,其中匹配模式在搜索值的任何位置

20.CHAR与VARCHAR的区别?

CHAR 和 VARCHAR 类型在存储和检索方面有所不同
CHAR 列长度固定为创建表时声明的长度,长度值范围是 1 到 255
当 CHAR 值被存储时,它们被用空格填充到特定长度,检索 CHAR 值时需删除尾随空格

21.列的字符串类型可以是什么?

//字符串类型是
SET
BLOB
ENUM
CHAR
TEXT
VARCHAR

22.你怎么看到为表格定义的所有索引?

//索引是通过以下方式为表格定义的
SHOW INDEX FROM

23.Mysql 如何优化 DISTINCT?

DISTINCT 在所有列上转换为 GROUP BY,并与 ORDER BY 子句结合使用

24.Mysql 表中允许有多少个 TRIGGERS?

//在Mysql 表中允许有六个触发器如下
BEFORE INSERT
AFTER INSERT
BEFORE UPDATE
AFTER UPDATE
BEFORE DELETE
AFTER DELETE

25.Mysql 中有哪几种锁?

MyISAM 支持表锁
InnoDB 支持表锁和行锁,默认为行锁
表级锁:开销小,加锁快,不会出现死锁。锁定粒度大,发生锁冲突的概率最高,并发量最低
行级锁:开销大,加锁慢,会出现死锁。锁力度小,发生锁冲突的概率小,并发度最高
更多知识点可参考MySQL分类知识点(链接可点)
原文见我的CSDN链接可点
  • 作者:潘震
  • 评论

    留言