面试总结之mysql

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

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 [email protected]”%”;

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

时间: 2024-11-07 00:07:28

面试总结之mysql的相关文章

【面试】【MySQL常见问题总结】【04】

[常见面试问题总结目录>>>] 091 数据库死锁概念 多数情况下,可以认为如果一个资源被锁定,它总会在以后某个时间被释放.而死锁发生在当多个进程访问同一数据库时,其中每个进程拥有的锁都是其他进程所需的,由此造成每个进程都无法继续下去.简单的说,进程A等待进程B释放他的资源,B又等待A释放他的资源,这样就互相等待就形成死锁. 虽然进程在运行过程中,可能发生死锁,但死锁的发生也必须具备一定的条件,死锁的发生必须具备以下四个必要条件. 1)互斥条件:指进程对所分配到的资源进行排它性使用,即在

【面试】【MySQL常见问题总结】【03】

[常见面试问题总结目录>>>] 061 如何删除表? 答案:运行命令 drop table table_name; 062 创建索引 对于查询占主要的应用来说,索引显得尤为重要.很多时候性能问题很简单的就是因为我们忘了添加索引而造成的,或者说没有添加更为有效的索引导致.如果不加索引的话,那么查找任何哪怕只是一条特定的数据都会进行一次全表扫描,如果一张表的数据量很大而符合条件的结果又很少,那么不加索引会引起致命的性能下降.但是也不是什么情 况都非得建索引不可,比如性别可能就只有两个值,建索

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

说一下mysql比较宏观的面试,具体咋写sql的这里就不过多举例了.后面我还会给出一个关于mysql面试优化的试题,这里主要说的索引和B+Tree结构,很少提到我们的集群配置优化方案. 1.索引是什么?有什么作用以及缺点 答:索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息.也可以理解为索引就是一本书的目录,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加.索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建

面试被问MySQL总回答不好:总结100道MySQL面试题和21题MySQL性能优化

前一阵系统的学习了一下MySQL,也有一些实际操作经验,偶然看到一篇和MySQL相关的面试文章,发现其中的一些问题自己也回答不好,虽然知识点大部分都知道,但是无法将知识串联起来 因此决定搞一个MySQL灵魂100问,试着用回答问题的方式,让自己对知识点的理解更加深入一点 主要针对的是开发人员需要知道的一些MySQL的知识点,主要包括索引,事务,优化等方面,以在面试中高频的问句形式给出答案 索引相关 什么是索引? 索引是个什么样的数据结构呢? Hash索引和B+树所有有什么区别或者说优劣呢? 上面

面试时回答MySQL数据库的简单优化

使用show status命令可以看到MySQL的运行状态,加上like命令可以查看某一个状态,MySQL的优化不是理论上的要根据公司数据库的实际运行状态来进行参数的调优.其实我们亦可以在MySQL的前段加上memcache,对已经使用过的SQL语句进行缓存.memcache我们以后再聊 (1)如果Opened_tables比Open_tables大很多,应该把my.cnf中的table_cache变大 (2)如果Key_reads太大,则应该把my.cnf中Key_buffer_size变大,

面试官:MySQL的可重复读级别能解决幻读问题吗?

引言 之前在深入了解数据库理论的时候,了解到事务的不同隔离级别可能存在的问题.为了更好的理解所以在MySQL数据库中测试复现这些问题.关于脏读和不可重复读在相应的隔离级别下都很容易的复现了. 但是对于幻读,我发现在可重复读的隔离级别下没有出现,当时想到难道是MySQL对幻读做了什么处理? 测试: 创建一张测试用的表dept: CREATETABLE`dept`(`id`int(11)NOTNULLAUTO_INCREMENT,`name`varchar(20)DEFAULTNULL,PRIMAR

面试|简单描述MySQL中,索引,主键,唯一索引,联合索引 的区别,对数据库的性能有什么影响(从读写两方面)

索引是一种特殊的文件(InnoDB 数据表上的索引是表空间的一个组成部分),它们 包含着对数据表里所有记录的引用指针. 普通索引(由关键字 KEY 或 INDEX 定义的索引)的唯一任务是加快对数据的访问速度. 普通索引允许被索引的数据列包含重复的值.如果能确定某个数据列将只包含彼 此各不相同的值,在为这个数据列创建索引的时候就应该用关键字 UNIQUE 把它 定义为一个唯一索引. 也就是说,唯一索引可以保证数据记录的唯一性. 主键,是一种特殊的唯一索引,在一张表中只能定义一个主键索引,主键用于

面试必备的10道MySQL题

MySQL 事务,是我们去面试中高级开发经常会被问到的问题,很多人虽然经常使用 MySQL,SQL 语句也写得很溜,但是面试的时候,被问到这些问题,总是不知从何说起.下面我们先来了解一下什么是 MySQL事务,再给大家分享10道面试必备的MySQL题. MySQL事务是数据处理的最小操作单元,是一组不可在分割的操作集合,这个操作单元里的一系列操作要么都成功,要么都失败. 1.MySQL主从复制的原理.(1).主库必须开启二进制日志(2).当有增删改的语句时,会记录到主库的binlog中(3).主

MySQL删除重复数据只保留一条

面试碰到一个MySQl的有趣的题目,如何从student表中删除重复名字的行,并保留最小id的记录? 很遗憾当时没有做出来,回家搜索了一番,发现利用子查询的可以很快解决. 1.删除表中多余的重复记录,重复记录是username判断,只留有id最小的记录 delete from studentwhere username in ( select username from studentgroup by username having count(username)>1) and id not i