MySQL试题

1.简述你们公司使用的MySQL版本,并说明具体小版本及GA时间?
5.7.20 发布时间2017年9月
2.请介绍你熟悉的数据库关系系统的种类和代表产品名称?
关系型数据库
MySQL 
3.请简述MySQL二进制安装重点步骤?
下载二进制包
修改环境变量
清理历史软件包
创建用户
修改目录权限
初始化库
准备启停脚本和创建配置文件
4.怎么确认数据库启动成功了?
检查端口号(默认是3306)
检查进程是否存在
systemctl status mysqld查看数据库状态
5.简述你了解的MySQL分支版本情况?

oracle MySQL
MariaDB

6.请简述mysqld的程序结构(1条SQL语句的执行过程)
由连接层提供链接协议,验证用户账号密码后链接提供给用户一个线程链接,用来传输语句,将用户输入的语句传输给SQL层,SQL层收到后首先验证语法是否正确,其次检查语义属于什么语言(DDL,DCL.DML,DQL),然后检查权限,即用户是否有权限查看表或者修改表,然后有解析器产生多种执行计划,优化器选择其中一种他认为最优的去执行,交给执行器,执行器找到文件放置位置后交给存储引擎层,存储引擎层将16进制的文件交由SQL架构化成表然后有线程返回给用户
7.请简述你了解的MySQL的启动方式
mysql_safe方式启动
由mysql/bin/mysqld启动
将mysqld复制到etc/init.d目录下可以使用systemctl start mysqld启动
不管哪一种方式,最终调用的都是mysqld文件
8.简述MySQL配置文件默认读取顺序
/etc/my.cnf 
/etc/mysql/my.cnf 
/usr/local/mysql/etc/my.cnf 
~/.my.cnf
命令行参数信息
从上至下,下面的参数信息会覆盖之前读取到的,最终以命令行输入为准
9.mysqld_safe --default-files=/opt/my.cnf &是什么作用?
&是将其放在后台加载
命令意思是指定加载的配置文件的位置
10.忘记管理员root的密码处理过程,请对参数详细说明
首先关闭MySQL,网站挂维护页
停止服务:systemctl stop mysqld(主要看使用什么方式启动的)
然后执行:mysqld_safe --skip-grant-tables --skip-networking &
skip-grant-tables是跳过用户密码验证模块启动
skip-networking是跳过TCP/IP连接方式模块,不允许用户远程连接
& 放在后台运行
然后直接输入用户名登录数据库
因为关闭了密码验证模块,所以密码没有被加载到内存中,手动加载一下
flush privileges;
然后修改密码
alter user root@'localhost' identified by '123'
然后退出数据库,关闭数据库,重新正常启动即可
11.请列举SQL语句的常用种类
DDL:数据定义语言
DCL:数据控制语言
DML:数据操作语言
DQL:数据查询语言
12.请说明聚集索引和辅助索引的区别
聚集索引:叶子节点存储的是源文件的内容,聚集索引生成在主键列上,聚集索引是在建表时创建的
辅助索引:叶子节点存放的是数据行在表中的位置,辅助索引可以是任何一列,
13.请简述以下语句执行计划可能存在的问题

explain select * from city where countrycode=‘CHN’ order by population;

执行速度慢,执行计划为空,全局扫描,
解决方案
countrycode列和population创建联合辅助索引
命令改为select * from city where countrycode='CHN'

(2)简述出现以下结果的可能原因

最后的参数没有加引号被识别为了数字,加引号后背时别为字符串,执行过程使用了索引,加快了速度
请简述,影响索引树高度的原因?
14.请简述,影响索引树高度的原因?
受数据量级影响,索引列值过长,和数据类型
15.请说明数据库启动失败的处理思路?
查看命令行报错,查看mysql错误日志,
16.MySQL索引的种类都有哪些?
B树索引,R树索引,hash索引
17.你了解的MySQL存储引擎种类有哪些?
innoDB,MyISAM,memory
18.InnoDB存储引擎核心特性
事务安全(ACID)
MVCC(Multi-Versioning Concurrency Control,多版本并发控制)
InnoDB 行级别锁定
Oracle 样式一致非锁定读取
表数据进行整理来优化基于主键的查询
支持外键引用完整性约束
大型数据卷上的最大性能
将对表的查询与不同存储引擎混合
出现故障后快速自动恢复
用于在内存中缓存数据和索引的缓冲区池
19.请简述MySQL在宕机时刻CSR的过程?
系统宕机后恢复后,启动数据库,数据库自动去对比和redo(重做日志)中的LSN的日志序列号,查看是数据是否同步,不同步的情况将redo日志中已保存的调回到内存中,然后写入表,直到表数据和redo日志中相符.
20.请简述MySQL隔离级别类型,并简述RR级别的特点。
RR:可重复读
	不管数据是在执行前,执行中,还是已提交之后,其他用户刷新查看到的依旧是之前的内容,除非重新开一个窗口,避免脏读幻读
RC:读已提交
	用户修改内容之后使用commit提交了,刷新之后其他用户才可以看到修改之后的内容,不会出现脏读但依旧会产生幻读
RU:读未提交
	用户修改之后尚未使用commit提交已经修改的内容,其他用户依然可以看到已经被修改的数据,会出现脏读和幻读

二、操作题

1.创建管理员用户:oldboy能通过10.0.0.0/24网段任意地址登录管理MySQL
grant  all on \*.\* to oldboy@'10.0.0.%' identified by '123'
2.创建应用用户:wordpress能通过172.16.1.0/24网段任意地址登录操作wordpress库下的所有表
grant all on wordpress.* to wordpress@'172.16.1.%' identified by '123' 
3.请写出/etc/my.cnf的基础配置信息
[mysqld]
user=root
datadir=/data/mysql/data
basedir=/data/mysql
socket=/tmp/mysql.sock
server_id=6
log_error=/data/mysql/mysql_errot.log
4.请写出使用oldboy用户远程登录MySQL的具体语句
mysql -uoldboy -p -h10.0.0.51 -p3306
5.查看当前数据库的字符集
show create database world;
6.创建GBK字符集的数据库oldboy,并查看已建库完整语句
create database oldboy charset GBK;
show create database oldboy
7.请介绍 NOT NULL default auto_increament 的作用
not null:非空,不能为空
default:默认填写什么
auto_increament:自增长,多用于ID列
8.创建用户oldboy,使之可以管理数据库oldboy
grant all on oldbooy.* to oldboy@'%' identified by '123';
9.收回oldboy用户的drop权限
revoke drop  on oldboy.* from oldboy@'%';
10.查看创建的用户oldboy拥有哪些权限
show grants for oldboy@'%';
11.查看建表结构及表结构的SQL语句
show create table city;
desc city;
12.插入一条数据“1,oldboy”
insert into db(id,sname) values('1','oldboy');
13.再批量插入2行数据“2,老男孩”,“3,oldboyedu”
insert into db(id,sname) values('2','老男孩'),('3','oldboyedu');
14.查询名字为oldboy的记录
select * from db where sname='oldboy';
15.查看数据库中所有引擎的类型
show engines;
16.查看数据库关于日志的参数配置
select @@general_log_file;
17.查看handler_read_key当前的状态信息
show session status like 'handler_read%';
18.列出删除表中数据的方式
alter table db drop id;
alter table db drop id where id='1';
19.test表中,有id、name、shouji列。把id列设置为主键,在Name字段上创建普通索引
alter table test  add  primary key idx_id(id); 
alter table test add index idx_name(name);
20.在手机字段上对前8个字符创建普通索引
alter table test add index idx_shou(shouji(8)); 
21.查看创建的索引及索引类型等信息
>show index from db\G;
22.删除Name,shouji列的索引
alter table db drop index name; 
alter table db drop index showji;
23.对Name列的前6个字符以及手机列的前8个字符组建联合索引
alter table test add index idx_name_shouji(name(6),shouji(8));
24.将shouji列索引替换为唯一键索
alter table test add unique index idx_shouji(shouji);
25.如何查看world数据库下city表中population列的重复值情况
select count(xingbie),sname from db where count(xingbie)>1 ;
26.请列出explain命令中type中多种类型
all :没有使用索引
index:全索引扫描
range:索引范围查找
ref:辅助索引的等值查询
eq_ref:多表连接的表.on的条件是主键或者唯一键
system或const:主键或唯一键的等值查询
null:没有结果
27.Select查询语句加强练习

统计世界上每个国家的总人口数.

select countrycode,sum(population) from city group by countrycode;

统计中国各个省的总人口数量(练习)

select District,sum(population) from city where countrycode='chn' group by District;

统计世界上每个国家的城市数量(练习)

select country.name,count(city.name) from city join country on country.code=city.CountryCode group by city.countrycode;

统计中国每个省的总人口数,将总人口数小于100w进行从高到低排序显示

select District,sum(population) from city where countrycode='chn' group by District  having sum(population)<1000000 order by sum(population) desc;
28.生成整个数据库下的所有表的单独备份语句
SELECT CONCAT("mysqldump -uroot -p ",TABLE_SCHEMA," >/tmp/",TABLE_SCHEMA,"_",TABLE_NAME,".sql") FROM TABLES
INTO OUTFILE '/tmp/bak.sh'

你可能感兴趣的:(MySQL)