总结自己在面试过程遇到的数据库问题,以备不时之需。

1、你在你们公司用的什么版本的mysql数据库,用过mysql5.7吗?

在学校学习mysql的时候用的5.5,在公司的时候用的5.6,5.7还真没用过。(真坑)

知识总结:目前互联网公司,线上mysql用的最多的版本是mysql5.5,5.6,5.7,性能比较如下:

只读:5.7比5.6快2倍,比5.5快3倍。

读写:5.7比5.6快1.5倍,比5.5快2.5倍。

msql的体系结构基本如下:

一条sql的执行大致分下8个步骤:

server层没有太大的变化,主要是存储引擎层的改变。也就是目前最火的Innodb存储引擎,无论从它的功能上、还是性能上,都有所提高。(基本都是在增强innodb存储引擎)

5.7的新特性引见一个作者的博文:http://sumongodb.blog.51cto.com/4979448/1949800,大家可以看一下。

2、mysql常用命令有哪些,怎麽为某个用户分配权限?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
create database name; 创建数据库
use databasename; 选择数据库
drop database name; 直接删除数据库,不提醒
show tables; 显示表
describe tablename; 表的详细描述
select 中加上distinct去除重复字段
 
显示当前mysql版本和当前日期
select version(),current_date;
 
修改mysql中root的密码:
shell>mysql -u root -p
mysql> update user set password=password(“root123″) where user=’root’;
 
mysql> flush privileges  刷新权限
mysql>use dbname; 打开数据库
mysql>show databases; 显示所有数据库
mysql>show tables; 显示数据库mysql中所有的表
mysql>desc user; 显示表mysql数据库中user表的列信息)
 grant
创建一个可以从任何地方连接到服务器的一个超管账户,必须分配一个密码
mysql> grant all privileges on *.* to 'user_name'@'localhost' identified by  'password' ;
格式:grant select on 数据库.* to 用户名@登录主机 identified by “密码”
 
删除授权:
mysql> revoke all privileges on *.* from root@”%”;
mysql> delete from user where user=”root” and host=”%”;
mysql> flush privileges;
 
重命名表:
mysql > alter table t1 rename t2;
 
备份:
mysqldump -hhostname -uusername -ppassword databasename > backup.sql;
 
恢复:
mysql -hhostname -uusername -ppassword databasename< backup.sql;

3、三表关联查询、单表自关联、单表分组排序查询、limit查询等。(必考)

我觉的考察最多的,lnner   join  表  on (内连接)   left   join 表  on(左连接)重点   right join  表  on  (右连接)full   join 表  on(完全连接)

第一、单表查询:根据WHERE条件过滤表中的记录,形成中间表(这个中间表对用户是不可见的);然后根据SELECT的选择列选择相应的列进行返回最终结果。
第二、两表连接查询:对两表求积(笛卡尔积)并用ON条件和连接连接类型进行过滤形成中间表;然后根据WHERE条件过滤中间表的记录,并根据SELECT指定的列返回查询结果。
第三、
多表连接查询:先对第一个和第二个表按照两表连接做查询,然后用查询结果和第三个表做连接查询,以此类推,直到所有的表都连接上为止,最终形成一个中间的结果表,然后根据WHERE条件过滤中间表的记录,并根据SELECT指定的列返回查询结果。

注意事项:

ON条件:是过滤两个链接表笛卡尔积形成中间表的约束条件。
WHERE条件:在有ON条件的SELECT语句中是过滤中间表的约束条件。在没有ON的单表查询中,是限制物理表或者中间查询结果返回记录的约束。在两表或多表连接中是限制连接形成最终中间表的返回结果的约束。

结论:ON只进行连接操作,WHERE只过滤中间表的记录。

连接查询是SQL查询的核心,连接查询的连接类型选择依据实际需求。如果选择不当,非但不能提高查询效率,反而会带来一些逻辑错误或者性能低下。下面总结一下两表连接查询选择方式的依据:
 查两表关联列相等的数据用内连接。
 Col_L是Col_R的子集时用右外连接。
 Col_R是Col_L的子集时用左外连接。
 Col_R和Col_L彼此有交集但彼此互不为子集时候用全外。

一般是count和distinct函数连用,完成一个查询操作。聚集函数是对于列而言的,不是元组。(例如sum、max等函数)聚集函数只能用于select子句和group by中的having子句。

一般是group by和order by colum desc/asc  连用,完成某个查询。select 后面的列+order by 后面的列 必须在group by 里面,也就是说 select 和 order by 后面的列是 group by 列的子集。而 select 和 order by 之间是没有什么瓜葛的。

limit配合其他查询(常考),LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1)。例如:

mysql> SELECT * FROM table LIMIT 5,10;  // 检索记录行 6-15

//为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1: 
mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.

//如果只给定一个参数,它表示返回最大的记录行数目: 
mysql> SELECT * FROM table LIMIT 5;     //检索前 5 个记录行

总之,多刷点数据库的面试题,一般你的sql写的比较好,企业就会考虑要你。

4、做过mysql的优化吗,说说?(必考--当时我回答的是语句的优化和索引)

我们不是做运维的,sql优化问题从硬件配置,软件配置参数,sql语句调优配合索引等三个大方面实现mysql调优。

参考一个作者的博客:http://blog.csdn.net/ning109314/article/details/9997867

面试总结之mysql的更多相关文章

  1. (转)【面试】【MySQL常见问题总结】【03】

    [常见面试问题总结目录>>>] [面试][MySQL常见问题总结][03] 2016-05-29 22:20 阅读(8244) 评论(2) [面试][MySQL常见问题总结][02] ...

  2. 【原创】面试官:讲讲mysql表设计要注意啥

    引言 近期由于复习了一下mysql的内容,有些心得.随手讲其中一部分知识,都是一些烟哥自己平时工作的总结以及经验.大家看完,其实能避开很多坑.而且很多问题,都是面试中实打实会问到的! 比如 OK,具体 ...

  3. java架构之路-(面试篇)Mysql面试大全

    说一下mysql比较宏观的面试,具体咋写sql的这里就不过多举例了.后面我还会给出一个关于mysql面试优化的试题,这里主要说的索引和B+Tree结构,很少提到我们的集群配置优化方案. 1.索引是什么 ...

  4. <转载>面试官: 讲讲MySql表设计需要注意什么?

    作者:孤独烟 出处: http://rjzheng.cnblogs.com/ 综述 近期由于复习了一下MySQL的内容看到一篇比较好的文章,转载分享一下.大家看完,其实能避开很多坑.而且很多问题,都是 ...

  5. 企业面试中关于MYSQL重点的28道面试题解答

      问题1:char.varchar的区别是什么? varchar是变长而char的长度是固定的.如果你的内容是固定大小的,你会得到更好的性能. 问题2: TRUNCATE和DELETE的区别是什么? ...

  6. 面试中的MySQL主从复制|手撕MySQL|对线面试官

    关注微信公众号[程序员白泽],进入白泽的知识分享星球 前言 作为<手撕MySQL>系列的第三篇文章,今天讲解使用bin log实现主从复制的功能.主从复制也是MySQL集群实现高可用.数据 ...

  7. 面试常问MySQL性能优化问题

    知识综述: [1] MySQL中锁的种类: 常见的表锁和行锁,也有Metadata Lock等等,表锁是对一整张表加锁,分为读锁和写锁,因为是锁住整张表,所以会导致并发能力下降,一般是做ddl处理时使 ...

  8. 面试遇到的mysql面试题

    1.MySQL数据库有哪些内置函数?1.数学函数 2.字符串函数 3.日期和时间函数 4.条件判断函数5.系统信息函数 6.加密和压缩函数 7.聚合函数8.格式或类型转化函数. 2.如何返回一张表的数 ...

  9. 去BAT面试完的Mysql面试题总结(55道,带完整答案)

    1.一张表里面有ID自增主键,当insert了17条记录之后,删除了第15,16,17条记录,再把mysql重启,再insert一条记录,这条记录的ID是18还是15 ? 2.mysql的技术特点是什 ...

随机推荐

  1. 201521123115《Java程序设计》第2周学习总结

    1. 本章学习总结 Arrays和String的用法及其函数的一些运用,例如sort函数,输入多个数字,用Arrays.sort(数组名),对数组中的元素排序 2. 书面作业 **Q1.使用Eclip ...

  2. HTML结构

    HTML:超文本标记语言. 可以放除了文本之外的内容,像图片.音频.视频等 由很多标签组成 html基本结构: <html> <head> 头标签存放网页信息,编码格式等 &l ...

  3. oracle-获取数据库中所有表的注释 comments

    公司dba提供的脚本: set serveroutput on set feedback off spool /tmp/getcomments.out select 'comment on table ...

  4. 自己把jar包添加到maven仓库中

    定制库到Maven本地资源库 这里有2个案例,需要手动发出Maven命令包括一个 jar 到 Maven 的本地资源库. 要使用的 jar 不存在于 Maven 的中心储存库中. 您创建了一个自定义的 ...

  5. Redis的安装以及在项目中使用Redis的一些总结和体会

    第一部分:为什么我的项目中要使用Redis 我知道有些地方没说到位,希望大神们提出来,我会吸取教训,大家共同进步! 注册时邮件激活的部分使用Redis 发送邮件时使用Redis的消息队列,减轻网站压力 ...

  6. oracle 常用函数汇总

    一.字符函数字符函数是oracle中最常用的函数,我们来看看有哪些字符函数:lower(char):将字符串转化为小写的格式.upper(char):将字符串转化为大写的格式.length(char) ...

  7. 我的Spring学习记录(三)

    学习了AOP之后就可以应用一下了,所以这次我们了解一下Spring的声明式事务. 事务在我们的很多方面都可以体现,就拿我们平时的买卖活动,或者是银行的转账来说,这些活动要么是成功,要么是失败,比如:张 ...

  8. 当你的SSM项目中的springmvc.xml发生第一行错误解决方案

    当你新建了一个SSM项目,你复制网上的xml文件来配置或者你下载了一个SSM项目打开发现xml文件错误,打开是第一行报错的时候你是不是很懵逼 或者是这样 总之就是xml文件中<?xml vers ...

  9. 入坑IT十年(二)技术以外

    上一篇博客里提到:技术越来越简单,发布后不久,就看到<技术并不是越来越简单>,这显然是打擂台来了. 技术究竟是不是越来越简单?其实这个问题,要看你究竟是以什么角度来思考这个问题.我们可以举 ...

  10. The model backing has changed

    其他信息: The model backing the 'WebTopFormContext' context has changed since the database was created. ...