1.简述你们公司使用的MySQL版本,并说明具体小版本及GA时间?
我们公司使用的是5.7.20, GA时间是2017年9月13号
2.请介绍你熟悉的数据库关系系统的种类和代表产品名称?
3.请简述MySQL二进制安装重点步骤?
解压tar包
清理历史的软件包
设置环境变量
测试环境变量 mysql -v
创建mysql用户
初始化数据
修改权限
准备启动脚本和配置文件
连接数据库
4.怎么确认数据库启动成功了?
[root@db01 ~]# netstat -lntup |grep mysqld
ps -ef |grep mysqld
mysql -uroot -p
5.简述你了解的MySQL分支版本情况?
6.请简述mysqld的程序结构(1条SQL语句的执行过程)
程序结构大体分为三层 , 第一层 连阶层 第二层sql层 第三层存储引擎层,
连接层:
1. 提供连接协议 TCP/IP SOCKET
2. 提供验证: 用户 密码 IP SCCKET
3. 提供专用连接线程 接受用户SQL 返回结果
SQL 层
1. 接受上层传送的SQL语句
2. 语法验证模块 验证语句语法
3. 语义检查 ,判断SQL语句的类型
4. 权限检查 用户对库表 有没有操作权限
5. 解析器 进行SQL的预处理 产生执行计划
6. 优化器 根据解析器得出的多种计划 进行判断 选择最优计划 代价模型 根据资源的耗损进行评估
7. 执行器 根据最优执行计划 执行SQL语句 产生执行结果
8. 提供查询缓存(默认是没开启的),会使用redis tair替代查询缓存功能
9. 提供日志记录(日志管理章节):binlog,默认是没开启的。
存储引擎层
负责根据SQL 层执行的结果 从磁盘拿数据 将16进制的磁盘数据 交由SQL架构化成表 由连接层的专用线层返回给用户
7.请简述你了解的MySQL的启动方式
systemctl start mysql
server mysqld start
./bin/mysqld_safe &
8.简述MySQL配置文件默认读取顺序
/etc/my.cnf / etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf
默认情况下,MySQL启动时,会依次读取以上配置文件,如果有重复选项,会以最后一个文件设置的为准。
但是,如果启动时加入了–defaults-file=xxxx时,以上的所有文件都不会读取
9.mysqld_safe --default-files=/opt/my.cnf &是什么作用?
安全模式启动 读取/opt/my.cnf 这个配置文件
10.忘记管理员root的密码处理过程,请对参数详细说明
1. 挂维护页
2. 关数据库
[root@db01 ~]# systemctl stop mysqld
3. 跳过授权启动
[root@db01 ~]# mysqld_safe --skip-grant-tables --skip-networking &
--skip-grant-tables : 连接层关闭验证模块,所有验证表不加载。
--skip-networking :连接层关闭TCP/IP协议,禁止远程访问。
11.请列举SQL语句的常用种类
DDL 数据库定义语言
DML 数据库操作语言
DCL 数据库控制语言
DQL 数据库查询语言
12.请说明聚集索引和辅助索引的区别
聚集索引一般是在建表是创建的主键 或者是唯一键 一般是表的无关列
辅助索引可以随时创建
13.请简述以下语句执行计划可能存在的问题
(1)阐述以下语句可能存在的问题,并提出合理解决方案
explain select * from city where countrycode=‘CHN’ order by population;
执行的是全盘扫描 问题 查询较慢 比较占资源
解决方案 使用countrycode 和population 建立联合索引
(2)简述出现以下结果的可能原因
where条件中有函数 或者转换的时候 不使用索引
14.请简述,影响索引树高度的原因?
索引的列值长度 数据量级 数据类型 数据类型 变长长度字符串,使用了char
15.请说明数据库启动失败的处理思路?
16.MySQL索引的种类都有哪些?
17.你了解的MySQL存储引擎种类有哪些?
InnoDB MyISM
18.InnoDB存储引擎核心特性
支持事务 行级锁 热备 多版本控制 自动故障安全恢复
19.请简述MySQL在宕机时刻CSR的过程?
先前滚 再回滚
20.请简述MySQL隔离级别类型,并简述RR级别的特点。
RU
RC
RR
不会出现脏读幻读等现象 比较适用于金融行业
二、操作题
1.创建管理员用户:oldboy能通过10.0.0.0/24网段任意地址登录管理MySQL
create user oldboy@'10.0.0.%';
2.创建应用用户:wordpress能通过172.16.1.0/24网段任意地址登录操作wordpress库下的所有表
create user wordpress@'172.16.1.%';
grant insert, update, delete, select on wordpress.* to wordpress@'172.16.1.%';
3.请写出/etc/my.cnf的基础配置信息
[mysqld]
user=mysql
basedir=/data/mysql
datadir=/data/mysql/data
socket=/tmp/mysql.sock
server_id=6
log_error=/data/mysql/mysql.log
secure-file-priv=/tmp/
[mysql]
socket=/tmp/mysql.sock
4.请写出使用oldboy用户远程登录MySQL的具体语句
[root@db01 ~]# mysql -uroot -p -h 10.0.0.51
Enter password:
5.查看当前数据库的字符集
show create database oldboy;
6.创建GBK字符集的数据库oldboy,并查看已建库完整语句
create database oldboy charset=GBK;
show create database oldboy;
7.请介绍 NOT NULL default auto_increament 的作用
非空 此字段不能为空
自增
8.创建用户oldboy,使之可以管理数据库oldboy
create user oldboy@'%';
grant all on oldboy.* to oldboy@'%';
9.收回oldboy用户的drop权限
revoke drop on oldboy.* from oldboy@'%';
10.查看创建的用户oldboy拥有哪些权限
show grants for oldboy@'%';
11.查看建表结构及表结构的SQL语句
desc 表名
show create database 表名
12.插入一条数据“1,oldboy”
insert into 表名
value(“1”,“oldboy”)
13.再批量插入2行数据“2,老男孩”,“3,oldboyedu”
insert into 表名
values
(“2”,“老男孩”)
(“3”,“oldboyedu”)
14.查询名字为oldboy的记录
select * from oldboy.oldboy where name=‘oldboy’;
15.查看数据库中所有引擎的类型
show engines;
16.查看数据库关于日志的参数配置
select @@general_log_file;
show variables
17.查看handler_read_key当前的状态信息
show status like ‘handler_read_key’;
18.列出删除表中数据的方式
truncate table t1;
删除t1 所占用的数据页 物理方式删除
19.test表中,有id、name、shouji列。把id列设置为主键,在Name字段上创建普通索引
19.在手机字段上对前8个字符创建普通索引
21.查看创建的索引及索引类型等信息
22.删除Name,shouji列的索引
23.对Name列的前6个字符以及手机列的前8个字符组建联合索引
24.将shouji列索引替换为唯一键索
25.如何查看world数据库下city表中population列的重复值情况
SELECT NAME,COUNT(population) FROM city GROUP BY NAME ;
26.请列出explain命令中type中多种类型
ALL,index,range,ref,eq_ref,system(const),NULL
27.Select查询语句加强练习
28.统计世界上每个国家的总人口数.
SELECT country.`Name`,SUM(city.population) FROM
city JOIN country
ON city.`CountryCode`=country.`Code`
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 city.`CountryCode`=country.`Code`
GROUP BY countrycode;
统计中国每个省的总人口数,将总人口数小于100w进行从高到低排序显示
SELECT district,SUM(population) FROM city WHERE countrycode='CHN'
GROUP BY District
HAVING SUM(population)<1000000
ORDER BY population DESC ;
28.生成整个数据库下的所有表的单独备份语句
SELECT CONCAT("mysqldump -uroot -p123 ",table_schema," ",table_name," >/tmp/world_city.sql")
FROM information_schema.`TABLES`
INTO OUTFILE '/tmp/ceshi.sql';
29 where三个等值条件 建立联合索引 应该如果建立 where a and b and c
唯一值多的放在左边