mysql数据库的面试问题

题目1

什么是数据库事务?

答案:单个逻辑单元执行的一系列操作,这些操作要么全做要么全不做,是不可分割的.事务的开始和结束用户是可以控制的,如果没控制则由数据库默认的划分事务.事务具有以下性质:
(1)原子性
指一个事务要么全执行,要么全不执行.也就是说一个事务不可能执行到一半就停止了.比如:你去买东西,钱付掉了,东西没拿.这两步必须同时执行 ,要么都不执行.
(2)一致性
指事务的运行并不改变数据库中的一致性.比如 a+b=10;a改变了,b也应该随之改变.
(3)独立性
两个以上的事务不会出现交替运行的状态,因为这样可能导致数据的不一致
(4)持久性
事务运行成功之后数据库的更新是永久的,不会无缘无故的回滚.

题目2

执行数据库查询时候,如果查询的数据有很多,假设有1000万条,用什么方法可以提高查询效率?在数据库方面或java代码方面有什么优化办法?
1.在数据库设计方面
(1)建立索引
(2)分区(比如说按时间分区)
(3)选取最适用的字段属性(尽量减少字段宽度和使用固定长度的字段)
2.在数据库I/O方面
(1)增加缓冲区
(2)如果涉及到表的级联,最好不同的表放在不同的磁盘,以增加I/O速度
3.Sql语句方法
(1)优化sql语句,减少比较次数,可用连表查询来代替子查询
(2)限制返回的条目数(mysql用limit)
(3)有外键约束会影响插入和删除性能,如果程序能够保证数据的完整性,那在设计数据库时就
去掉外键(比喻:就好比免检产品,就是为了提高效率,充分相信产品的制造商)
4.在java方面
如果反复使用的查询,可通过preparedstatement,因为他在运行前已经预编译,只要运行就Ok了.

题目3

sql语言的常见问题
1.增删查改之类的问题,连表查询是必出题目,可以参考之前我写的那篇文章
这里讲一些分组查询跟降序升序分页
分组:group by 列名
统计各个部门薪水大于5000的人数
例子:SELECT department , COUNT(money) from employee where money>=5000group by department;

分页:limit ()
select * from table limit 5; –返回前5行
select * from table limit 0,5; –同上,返回前5行
select * from table limit 5,10; –返回6-15行
应用到java里,select * from table limit ” +(pageNo-1)*pageSize + “,” + pageSize
排序:order by 列名
asc 和desc 不写默认为升序
前者是升序后者是降序

综合题:
以下两张表,员工表employee 与部门表 department

查询结果如下:

请写出sql语句
分析:
我们可以看到这是一般的连表,但是连表的显示的统计人数,所以我们分两步来走
第一步:查出各个部门的对应人数,把这个看做一个新表e1
select e.dep_id,count(name) num from employee e group by dep_id;
第二部:将查询结果与部门表连表
由于查询结果是显示左边的全部表格信息所以用左联,空的话为0,则采用ifnull()函数来解决
select d.*,ifnull(num,0) num from department d left join (select e.dep_id,count(name) num from employee e group by dep_id) e1 on d.id=e.dep_id;

题目四

什么是数据库的三范式?
第一范式(1NF):字段具有原子性,不可再分。所有关系型数据库系统都满足第一范式)
数据库表中的字段都是单一属性的,不可再分。例如,姓名字段,其中的姓和名必
须作为一个整体,无法区分哪部分是姓,哪部分是名,如果要区分出姓和名,必须设计成两
个独立的字段。
第二范式(2NF):
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必
须先满足第一范式(1NF)。
要求数据库表中的每个实例或行必须可以被惟一地区分。通常需要为表加上一个列,以存储
各个实例的惟一标识。这个惟一属性列被称为主关键字或主键。
第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖
主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成
一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,
以存储各个实例的惟一标识。简而言之,第二范式就是非主属性非部分依赖于主关键字。
第三范式的要求如下:
满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一
个数据库表中不包含已在其它表中已包含的非主关键字信息。
所以第三范式具有如下特征:
1,每一列只有一个值
2,每一行都能区分。
3,每一个表都不包含其他表已经包含的非主关键字信息。
例如,帖子表中只能出现发帖人的 id,而不能出现发帖人的 id,还同时出现发帖人姓名,
否则,只要出现同一发帖人 id 的所有记录,它们中的姓名部分都必须严格保持一致,这就
是数据冗余
题目五

union 与union all的区别

union 在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排 序运算,删除重复的记录再返回结果。 union all 则会显示重复结果,只是简单的两个结果合并并返回.所以效率比union高,在保证没有重复数据的情况下用union all.
select name from table1
union
select name from table2;
题目六

.用一条 SQL 语句查询出每门课都大于 80 分的学生姓名
name kecheng fenshu
张三 语文 81
张三 数学 75
李四 语文 76
李四 数学 90
王五 语文 81
王五 数学 100
王五 英语 90
分析:都大于80,他的反面就是<=80,我们可以先求出所有<=80的姓名,然后取反就可以了
所以sql语句 select name from student where name not in (select name from student where fenshu <=80);

题目七

求各个部门直接的比赛结果? 有个叫team 的表格,里面有id跟部门名name,如果各个部门要举行比赛用语句求出比赛结果
select a.name,b.name from game a cross join game b where a.name

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值