1.请写出数据库管理系统的种类?(2分)
RDBMS:Oracle、mysql、mssql(SQL Server)、PG(postgresql)
数据安全性要求较高的应用场景
NoSQL:redis、mongodb、memcache、Hbase、neo4j
针对性能要求较高,数据安全性要求不是太高的场景,一般是配合RDBMS使用的产品
2.请简述RDBMS和NoSQL的特性对比(2分)
特点对比:
关系型数据库:强大的查询功能 强一致性 二级索引
非关系型数据库:灵活模式 扩展性 性能
关系型数据库(RDBMS)的特点:
1.二维表
2.典型产品Oracle传统企业,MySQL互联网企业
3.数据存取是通过SQL(Structured Query Language结构化查询语言)
4.最大特点数据安全性方面强(ACID)
非关系型数据库(NoSQL:Not only SQL)的特点:
1.不是否定关系型数据库,而是做关系型数据库的补充。
3.请写出MySQL5.6级5.7版本选择规则(2分)
5.6 GA6个月以上的版本,小版本为双数
5.7 GA6个月以上的版本,选择5.7.17版本以上,小版本为双数
4.简述SQL的执行过程(连接层——SQL层——存储引擎层)(4分)
连接层
1、提供连接协议(socket、tcp/ip)
2、验证用户的合法性(用户名、密码、白名单)
3、提供一个专用连接线程(接收SQL、返回结果),将SQL语句交给SQL层继续处理
SQL层
1、接收到SQL语句,语法判断。
2、判断语义(判断语句类型:DML、DDL、DCL、DQL)
3、解析器将SQL语句解析成SQL接口能够识别方式(执行计划explain),解析完成后,交给优化器进行优化
4、优化器,选择他认为成本最低的执行计划。交给 执行器。
5、执行器根据优化器的选择,按照优化器建议执行SQL语句,生成执行结果。
5.1 具体:在哪个数据文件上的哪个数据页中?
5.2 将以上结果发送给下层继续处理
6、接收存储引擎层的数据,结构化成表的形式,通过连接层提供的专用线程,将表数据返回给用户。
7、查询缓存
7.1 query_cache, 使用memcache 或者redis 替代
8、日志记录(binlog)
存储引擎层
1、接收上层的执行结果
2、取出磁盘文件和相应数据
3、返回给SQL层,结构化之后生成表格,由专用线程返回给客户端
5.请写出源码安装的步骤(2分)
1.下载源码包
2.安装依赖
3.创建管理服务用户
4.解压源码包
5.进入解压成功的压缩包目录
6.cmake预编译
7.进行make编译
8.进行编译安装make install
9.软连接
10.拷贝配置文件
11.拷贝启动脚本
12.进入初始化脚本目录,进行初始化
13.修改程序目录属主属组
14.修改启动脚本权限
15.手动创建socket文件存放位置的目录
16.启动数据库
6.请写出mysql客户端连接方式?及连接命令?默认是什么连接方式?为什么?(3分)
1.TCP/IP连接
mysql -uroot -p123 -h127.0.0.1
并不是所有的-h都是TCP/IP连接
所有的远程连接都是TCP/IP连接
2.socket连接
mysql -uroot -p123 -S /tmp/mysql.sock
mysql -uroot -p123
mysql -uroot -p123 -hlocalhost
默认连接的是socket连接,因为不需要进行tcp/ip的三次握手,连接的时候速度更快。
7.请写出什么是分区表(2分)
一个区是由一个或者多个的页组成的,一个段是由多个区组成的,一个段里面只有一个区,且存放的是一类的数据,就是分区表。
8.简述MySQL5.6与MySQL5.7安装区别(3分)
cmake的时候加入了bostorg
mysql_install_db已经不再使用了,5.7改成了mysqld --initialize 完成实例初始化。如果 datadir 指向的目标目录下已经有数据文件,则会有[ERROR] Aborting;
在初始化时如果加上 --initial-insecure,则会创建空密码的 root@localhost 账号,否则会创建带密码的 root@localhost 账号,密码直接写在 log-error 日志文件中;新用户登入后需要立刻修改密码,否则无法继续后续的工作。
9.回答下列问题 (3分)
【建库建表】
创建wordpress数据库
create database wordpress;
使用wordpress库
use wordpress;
创建t1、t2表
create table t1 (id int);
create table t2 (id int);
创建blog库
create database blog;
使用blog库
use blog;
创建t1表
create table tb1 (id int);
【授权】
grant select on *.* to wordpress@’10.0.0.5%’ identified by ‘123’;
grant insert,delete,update on wordpress.* to wordpress@’10.0.0.5%’ identified by ‘123’;
grant all on wordpress.t1 to wordpress@’10.0.0.5%’ identified by ‘123’;
【问】
一个客户端程序使用wordpress用户登陆到10.0.0.51的MySQL后,
1)对t1表的管理能力?
all
2)对t2表的管理能力?
select insert delete update
3)对tb1表的管理能力?
select
10.什么是多实例?(2分)
实例就是MySQL的后台进程+线程+预分配的内存结构。
多实例就是多个后台进程+线程+预分配的内存结构。
11.请说出下列命令的含义(4分)
\h 或 help 或? ****查看帮助**
\G ****格式化查看数据(key:value)**
\T 或 tee **** 记录日志**
\c(5.7可以ctrl+c) ****结束命令**
\s 或 status ****查看状态信息**
\. 或 source **** 导入SQL数据**
\u或 use **** 使用数据库**
\q 或 exit 或 quit **** 退出**
12.请列出MySQL自带客户端工具都有哪些?(2分)
mysql
mysqladmin
mysqldump
13.请根据要求写出下列SQL语句 (3分)
1)创建数据库名为oldboy,默认字符集utf8,校验规则为utf8_general_ci
create database testa charset utf8 default collate=utf8_general_ci;
2)删除数据库oldboy
drop database oldboy;
3)修改数据库的字符集为gbk
alter database oldboy charset gbk;
14.请按要求写出下列数据类型 (2分)
**整数类型:** **int**
**最小整数类型:** ** tinyint**
**字符类型:** ** varchar**
**枚举类型:** ** enum**
15.请写出char和varchar的区别?(1分)
varchar(20) 变长
char(20) 定长
16.建库建表题(规范创建)
插入数据
1.将自己班级小组所有人员信息插入到student表中(数据自定义)
2.将曾导、徐导、李导信息插入教师表中(数据自定义)
3.将数学、语文、英语学科插入到课程表中(数据自定义)
4.将分数插入到成绩表中(数据自定义)
建表和插入数据10分
create table student(
sno int(20) not null primary key auto_increment comment '学号',
sname varchar(20) not null comment '学生姓名',
sage tinyint unsigned comment '学生年龄',
ssex enum('0','1') not null default '1' comment '学生性别',
sbirthday datetimedefault null comment '学生生日',
class varchar(20) not null comment '学生班级'
) charset utf8 engine=innodb;
create table course(
cno int(20) not null primary key auto_increment comment '课程号',
cname varchar(20) not null comment '课程名称',
tno varchar(20) not null comment '教师编号'
) charset utf8 engine=innodb;
create table score (
sno int(20) not null primary key auto_increment comment '学号',
cno int(20) not null primary key auto_increment comment '课程号',
mark float(5) not null comment '成绩'
) charset utf8 engine=innodb;
create table teacher(
tno varchar(20) not null primary key auto_increment comment '教师编号'
tname varchar(20) not null comment '教室姓名',
tage tinyint unsigned comment '教师年龄',
tsex enum('0','1') not null default '1' comment '教师性别',
prof varchar(20) comment '教室职称',
depart varchar(20) not null comment '教室部门'
) charset utf8 engine=innodb;
插入数据
1.将自己班级小组所有人员信息插入到student表中(数据自定义)
insert into student(sname,sage,class) values('张三',30,'linux03');
2.将曾导、徐导、李导信息插入教师表中(数据自定义)
insert into teacher(tname,tage,depart) values('曾导',20,'linux学院');
3.将数学、语文、英语学科插入到课程表中(数据自定义)
insert into course(cname,tno) values('数学',1),('语文',2), ('英语',3);
4.将分数插入到成绩表中(数据自定义)
insert into score(mark) values(80),(90),(68);
查询练习:(20分)
1.查询student表中的所有记录的sname、ssex和class列。
select sname,ssex,class from student;
2.查询教师所有的单位即不重复的depart列。
select distinct(depart) from teacher
3.查询student表的所有记录。
select * from student;
4.查询score表中成绩在60到80之间的所有记录。
select * from score where mark<=80 and >=60;
5.查询score表中成绩为85,86或88的记录。
select * from score where mark in(85,86,88);
6.查询student表中1班或性别为“女”的同学记录。
select * from student where class='1班' and ssex=0;
7.以class降序查询Student表的所有记录。
select * from student order by class desc;
8.查询”曾志高翔“教师任课的学生成绩。
select student.sname,score.mark,teacher.tname,course.cname from student,course,score,teacher where student.sno=score.sno and course.cno
and course.tno=teacher.tname='曾导';
9.查询语文课程所有男生的成绩并且查出对应课程的教师名,职称,及所在部门。
select student.sname,course.cname,score.mark,teacher.tname,teacher.prof,teacher.depart
from student,course,score,teacher where student.sno=score.sno
and course.cno=score.cno and score.tno=teacher.tno and course.cname='语文' and student.ssex=1;
10.查询2班的学生人数。
select count(sno) from student where class='2班';
17.索引的类型都有哪些?(2分)
1)BTREE:B+树索引
2)HASH:HASH索引
3)FULLTEXT:全文索引
4)RTREE:R树索引
18.mysql中创建索引的分类都有哪些?(3分)
主键索引
普通索引
唯一索引
前缀索引
联合索引
19.请写出在企业中一般索引扫描达到什么级别就认为SQL语句是OK的?(1分)
性能从最差到最好,我们认为至少要达到range级别才是OK的
range:索引范围扫描,对索引的扫描开始于某一点,返回匹配值域的行。
20.请写出不走索引的规则,4条以上?(3分)
没有查询条件,或者查询条件没有建立索引
查询结果集是原表中的大部分数据,应该是25%以上
索引本身失效,统计数据不真实
查询条件使用函数在索引列上或者对索引列进行运算,运算包括(+,-,*等)
隐式转换导致索引失效.这一点应当引起重视.也是开发中经常会犯的错误
<> ,not in 不走索引
like "%_" 百分号在最前面不走索引
单独引用联合索引里非第一位置的索引列
21.在企业中使用什么命令来优化SQL语句?select * user,host from mysql.user如何查看该SQL语句的索引扫描级别? (2分)
explain或desc
explain select * user,host from mysql.user
22.请介绍MySQL5.6版本默认的存储引擎是什么?(1分)
innodb
23.请简述MySQL5.6默认存储引擎与myisam的区别,核心特性?(4分)
物理上:
myisam:
-rw-rw---- 1 mysql mysql 10684 Jun 19 15:32 user.frm
-rw-rw---- 1 mysql mysql 464 Jun 21 17:26 user.MYD
-rw-rw---- 1 mysql mysql 2048 Jun 21 17:49 user.MYI
innodb:
-rw-rw---- 1 mysql mysql 8710 Jun 25 16:25 city.frm
-rw-rw---- 1 mysql mysql 671744 Jun 25 16:25 city.ibd
1\. 事务安全(MyISAM不支持事务,INNODB支持事务)
2\. 外键 MyISAM 不支持外键, INNODB支持外键.
3\. 锁机制(MyISAM时表锁,innodb是行锁)
4\. 查询和添加速度(MyISAM批量插入速度快
5\. 支持全文索引(MyISAM支持全文索引,INNODB不支持全文索引)
6.MyISAM内存空间使用率比InnoDB低
24.请简述什么是共享表空间,什么是独立表空间?(2分)
共享表空间: Innodb的所有数据保存在一个单独的表空间里面,而这个表空间可以由很多个文件组成,一个表可以跨多个文件存在,所以其大小限制不再是文件大小的限制,而是其自身的限制。从Innodb的官方文档中可以看到,其表空间的最大限制为64TB,也就是说,Innodb的单表限制基本上也在64TB左右了,当然这个大小是包括这个表的所有索引等其他相关数据。
独立的表空间,仅存储该表的:数据,索引和插入缓冲BITMAP等信息。其余信息仍存储在默认表空间.
25.请简述事务的核心特性,分别是什么含义?(4分)
Atomic(原子性)
所有语句作为一个单元全部成功执行或全部取消。
Consistent(一致性)
如果数据库在事务开始时处于一致状态,则在执行该。事务期间将保留一致状态。
Isolated(隔离性)
事务之间不相互影响。
Durable(持久性)
事务成功完成后,所做的所有更改都会准确地记录在数据库中。所做的更改不会丢失。
26.请叙述出redo及undo在MySQL服务器突然断电的CSR步骤?(5分)
没有进行commit,也没有写入磁盘
数据从redo日志,undo日志,将数据加载到内存中对应的buffer,redo buffer没有数据变化信息,undo buffer有快照,回滚,将快照的数据写入磁盘。
没有进行commit,但写入磁盘了
数据加载到内存对应buffer,redo buffer有变化信息,回滚重做数据变化,undo buffer有快照,但没有commit标签,回滚,将快照数据写入磁盘。
进行commit,也写入到磁盘了。
数据加载到内存对应的buffer,redo buffer有变化信息,回滚重做数据变化,undo buffer有commit标签,将重做数据写入磁盘。
27.请写出MySQL5.6默认存储引擎及myisam存储引擎的锁粒度?(2分)
MyIsam:低并发锁(表级锁)
Innodb:高并发锁(行级锁)
28.请写出一个成功事务的生命周期(1分)
begin;
sql1
sql2
...
commit;
29.MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义(1分)
varchar(20) 变长
char(20) 定长
30.补全语句:select vend_id,count() from products where prod_price>=10 group by vend_id ____ count()>=2;(2分)
having
网友评论