【Linux面试题8】数据库笔试题集锦

数据库

1.1 数据库基础

1.1.1 选择

1.1.1.1 Having 子句的作用是(C )。

A.查询结果的分组条件 B.组的筛选条件

C.限定返回的行的判断条件 D.对结果集进行排序

1.1.1.2 最常用的一种基本数据模型是关系数据模型,它的表示采用(D)

A.树 B.网络 C.图 D.二维表

1.1.1.3 数据库系统的核心是(B)

A.数据模型 B.数据库管理系統 C.数据库 D.数据库管理员

1.1.1.4 关系表中每一横行称为(B)

A.元组 B.字段 C.属性 D.码

1.1.1.5 数据库管理系统维护中,最重要的是(B)

A程序维护 B数据维护 C编码维护 D硬件维护

1.1.1.6 以下那些不是NoSQL(AD)

A.mssql B memcached C mongodb D postgresql E cassandra F couchdb G redis

1.1.1.7 PHP和 MYSQL的联合使用解决了(C)

A 在proxy上处理数据库访问问题

B在www服务器上处理黑客的非法访问问题

C 在www服务器上处理数据库的访问问题

D 在sendmail邮件系统是上处理数据库的访问问题

1.1.1.8 以下哪个端口为远程登陆默认端口(C)

A1433 B3389 C3306

1.1.2 填空

1.1.2.1 如何通过shell登录mysql?(mysql -u -p -P -h)

1.1.2.2 数据库触发器能监控的触发事件有——监视地点(table)—监视事件(insert,update,delete)———触发时间(after,before)—触发事件(insert,update,delete)—

1.1.2.3 数据库系统的组成部分有:硬件、软件、数据库、用户(数据库管理员)

1.1.2.4 实现多台交换机或集线器连接在一起只能通过级联的方式(级联复制)

1.1.2.5 远程连接mysql数据库的命令是什么_____mysql -u -p -P -h_

1.1.2.6 主数据库文件的扩展名是___mdf__,事务日志文件的扩展名是_ldf_

1.1.2.7 当删除一个数据库后,仅能用__binlog,物理备份__数据重建以前的数据库中的数据

1.1.2.8 SQL中定义别名的三种方法是_______列 AS 别名,列 别名 列=别名____________________

1.1.2.9 查询病人表中的所有内容,并以住院号倒序排序SQL代码为:Select * from pat_visit ______order by___inp_to_____desc

1.1.2.10 查询一根病人的信息。但忘记了该病人的名字,只记得该病人姓“张”,而且名字中有一个“美”字,SQL代码为:Select * from Pat_visit where name__like "张%"__

1.1.2.11 mysql服务器默认的监听端口是:3306_ ,mysql的配置文件是:____/etc/my.cnf

1.1.3 简答

1.1.3.1 简述mysql单机安装过程

①官网下载二进制安装包;

②解压二进制包;

③修改配置文件/etc/my.cnf

④初始化配置;

⑤启动

1.1.3.2 mysql登录命令

mysql -u -p -P -h

1.1.3.3 在mysql客户端查询工具中,如何获取当前的所有连接信息。

show full processlist

1.1.3.4 如何利用crontab定期执行mysql语句。

mysql -u -p -e "show databases;"

1.1.3.5 说明数据库内存结构中SGA和PGA的组成,以及这两个内存区存放信息的区别

SGA区由数据缓冲区,共享池,重做日志缓冲区,大型池,java池构成;PGA区由排序区,私有SQL区以及堆栈构成。
SGA区是由Oracle分配的共享内存结构,包含一个数据库实例共享的数据和控制信息。当多个用户同时连接同一个实例时,SGA区数据供多个用户共享,所以SGA区又称为共享全局区。用户对数据库的各种操作主要在SGA区中进行。该内存区随数据库实例的创建而分配,随实例的终止而释放。PGA区是在用户进程连接数据库,创建一个会话时,由oracle为用户分配的内存区域,保存当前用户私有的数据和控制信息,因此该区又称为私有全局区。每个服务器进程只能访问自己的PGA区,所有服务器进程PGA区总和即为实例的PGA区的大小。

1.1.3.6 说明数据库表空间的种类,以及不同类型表空间的作用

共享表空间,独立表空间

共享表空间:一个数据的文件都存放在一个文件内。

独立表空间:一个表有一个idb和frm文件。

1.1.3.7 mysql表中的中文字体乱码,原因可能是什么?如何修改

字符集编码不一致问题

alter table 表名 default character set utf8 collate utf8_general_ci;

1.1.3.8 mysql忘记密码如何操作

--skip-grand-tables #跳过 授权表

--skip-networking #跳过网络连接

1.1.3.9 请写出目前市场上最常见的2-5种关系型数据库厂家,并注明他们产品的最新版和你熟悉的或者解除过的版本:

厂家: 最新版本: 熟悉的版本: 接触过的版本

mysql 5.6 5.7

1.1.3.10 如何修改mysql的root密码

mysqladmin -uroot -p password oldboy123

set password for 用户@localhost=password('新密码')

mysql> alter user '用户名'@'登录主机' identified by '密码(自定义)';

1.1.3.11 请举出几个你熟悉的关系型数据库管理系统和非关系型数据库管理系统,非关系型数据库相比之下有什么不同之处(好处和不足)?

关系型:mysql,oracle

非关系型:redis,mongodb

非关系型数据快,操作简单,但是又丢数据风险。

1.1.3.12 存储过程与函数的区别

存储过程是用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库定义的方法,它接收参数返回某种类型的值并且不涉及特定用户表。

1.1.3.13 什么是视图,游标是什么?

视图是一种虚拟的表,具有和物理表相同的功能,可以对视图进行增改查操作,视图通常是有一个表或者多个表的行或者列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。

游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。

1.1.3.14 你对数据库了解吗?你们公司的数据库是什么样的?

高可用mysql及主从架构和读写分离。

1.1.3.15 你们公司数据库最大连接数是多少?

2000

1.1.3.16 查看缺省引擎

select @@default_storage_engine;

1.1.3.17 MySQL数据库storage engine中的myisam、innodb有什么差别

myisam:表级锁,不支持事务,支持温备。

innodb:行级锁,支持事务,支持温备。自动故障恢复,外键。

1.1.3.18 请列举几个常见的nosql db 你最熟悉那个?

redis,mongodb,memcached

1.2 SQL语句

1.2.1 选择

1.2.1.1 DELETE FROM S WHERE 年龄>60语句的功能是(A)

A.从S表中彻底删除年龄大于60岁的记录

B.S表中年龄大于60岁的记录被加上删除标记

C.删除S表

D.删除S表的年龄列

1.2.1.2 使用什么命令可以清除表中所有的内容?(CD)

A.INSERT B.UPDATE C.DELETE D.TRUNCATE

1.2.1.3 以下哪个表不用于mysql 的权限管理( D)

A.HOST B.DB C.COLUMNS_PRIV D.MANAGER

1.2.1.4 在SOL 语法中,用于更新的命令是:( B)

A.INSERT B.UPDATE C.DELETE D.CREATE

1.2.1.5 下面命令中不是数据库用来DML操作是( A)

A.SELECT B.UPDATE C.INSERT D.DROUP

1.2.1.6 SQL 语言中,删除一个表的命令是( B)

A.DELETE B. DROP C.CLEAR D.RI MORE

1.2.1.7 MySQL语句中删除一个表(假如表名称是t1)的命令是_______C_

Arm table t1 Bdelete table t1 Cdrop table t1 Dtruncate t1

1.2.1.8 下面哪个语句将user表的名称变更为userinfo?(C)rename table user to userinfo

A.alter table user rename as userinfo B .rename to userinfo from user

C.rename user to userinfo D.rename user as userinfo

1.2.1.9 sql语句中修改表结构的命令是(C)

Amodify table Bmodify structure Calter table Dalter structure

1.2.1.10 带有(B)子句的select语句可以在表的一行或多行上防止排他锁

A.FOR INSERT B.FOR UPDATE C.FOR DELETE D.FOR REFRESH

1.2.1.11 在SQL中,建立表用的命令是(B)

A.CREATE SCHEMA B.CREATE TABLE C.CREATE VIEW D.CREATE INDEX

1.2.1.12 SQL 语言是(C)语言

A层次数据库 B网络数据库 C关系数据库 D非数据库

1.2.1.13 SQL语言中,条件年龄BETWEEN 15 AND 35表示年龄在15至35之间,且(A)

A包括15岁和35岁 B不包括15岁和35岁

C包括15岁但不包括35岁 D包括35岁但不包括15岁

1.2.1.14 在数据库管理系统能实现对数据库中的数据查询、插入、修改和删除,这类功能称为(C)

A数据定义功能 B数据管理功能 C数据操纵功能 D数据控制功能

1.2.1.15 下列执行数据的删除语法在运行时不会产生错误信息的选项是(A)

A.Delete * from pat_visit Where inp_no = '6' B.Delete From pat_visit Where inp_no ='6'

C.Delete pat_visit Where inp_no = '6' D.Delete pat_visit Set inp_no = '6'

1.2.2 填空

1.2.2.1 在SQL中,用子句————DISTINCT——————消除重复出现的元组。

1.2.2.2 标准的SQL语言语句类型可以分为—DML—、—DQL—、—DDL—、DCL

1.2.2.3 SQL语句中的查询语句是select(DQL)

1.2.2.4 字符转换日期函数___select date_format(now(),'%Y-%m-%d')_

1.2.2.5 DML包括__insert__ update delete

1.2.2.6 简述where和having的区别:

Where 子句是用来指定 "行" 的条件的,而 Having 子句是指定 “组” 的条件的

所以 Where 子句 = 指定行所对应的条件

所以 Having 子句 = 指定组所对应的条件

当在 Where 子句和 Having 子句中都可以使用的条件,从语句的执行效率来看,最好写在 Where 子

句中。

在使用 Count 函数等对表中的数据进行聚合操作时,DBMS 内部会进行排序处理,而排序操作会增

加机器的负担,减少排序的行数,可以增加处理速度。

使用 Where 子句指定条件时,由于排序之前就对数据进行了过滤,所以能够减少排序的数据量。但

是 Having 子句是在排序之后才对数据进行分组的,因此与前者相比,需要排序的数据量就要多得

多。

第三,使用 Where 子句更具速度优势的另一个理由是,可以对 Where 子句指定条件所对应的列创建

索引,这样可以大幅提高处理速度。

第四,Where 子句中不能使用聚合函数,而 Having 子句中可以。

1.2.2.7 在SQL中,建立数据库的命令是___create databases;_,建立视图的命令是___create vim v as (select * from table1)union all (select * from table2),建立索引的是_______alter table student add index idx_name(name)

1.2.2.8 在SQL中,用___insert___命令向表中输入数据,用__select___命令检查和查询表中的内容

1.2.2.9 在SQL中,用___update___命令可以修改表中的数据,用__alter___命令可以修改表的结构

1.2.2.10 在SQL中,Alter命令可以有两个选择项,___alter table change/modify___子命令用于修改表的性质,__alter table add__子命令用于增加列

1.2.2.11 在SQL中,用__delete___命令可以从表中删除行,用___drop__命令可以从数据库中删除表

1.2.2.12 在SQL中,控制用保留字___null___,非空值用保留字___not null__

1.2.2.13 SELECT命令中,表示条件表达式用__where__字句,分组用___group by__字句,排序用__order by字句

1.2.2.14 在ORDER BY字句的选项中,DESC代表__倒序___序输出,若省略时,代表__正序__序输出

1.2.2.15 合并多个查询结果集,应使用__union___关键字

1.2.3 简答

1.2.3.1 列举SQL常用命令:

show databases;

create database;

select * from table;

update table set state

1.2.3.2 Mysql查看order表的第3条到第7条的数据。

select * from order limit 2,5

1.2.3.3 Mysql授予用户admin通过IP为192.168.0.10/24对数据库的全部授权。

grand all on *.* to admin@'192.168.0.%' identified '123';

1.2.3.4 对order这个表的name字段数据进行base64编码

select to_base64(name) from 'order';

1.2.3.5 为什么说group by和order by操作的是代价高昂的?

没有合理的索引条件下,需要大量的CPU时间来排序和处理。

1.2.3.6 写分组浏览,分组求和,分组求最大值的sql语句,每个只能用1句话

select group_contat(字段1) from db group by '字段2'

select sum(字段1) from db group by '字段2'

select max(字段1) from db group by "字段2"

1.2.3.7 如何列出所有数据库?(show databases;)

1.2.3.8 如何查看表内所有数据?(select * from table;)

1.2.3.9 如何知道表内行数?(select count(*) from table;)

1.2.3.10 用SQL实现以下统计结果

CSBH CSBH_COUNT

20 2

10 8

CSBH SUM_GJQJ

20 211.039900

10 871.317850

select CSBH,count(CSBH) as CSBH_COUNT from table group by CSBH;
select CSBH,sum(CSBH) as SUM_GJQJ from table group by CSBH;

1.2.3.11 用SQL命令实现给主键添加索引

alter table oldboy add primary key pri(id);

1.2.3.12 删除如下表中年龄大于30,且住址为nj的员工

表A user_table

Name age city

Tom 20 bj

Jimmy 50 nj

Zhou 33 sh

Jing 30 nj

Nanan 28 sh

create table user_table(id int(11),name varchar(20),age int,city varchar(20)) engine=innodb;
insert into user_table(name,age,city) values(tom,20,bj),(jimmy,50,nj),(zhou,33,sh),(jing,30,nj),(nannan,28,sh);

1.2.3.13 根据上题的表,计算出每个城市的人数和平均年龄

select city,sum(name),avg(age) from user_table group by city;

1.2.3.14 查询下表平均成绩大于60分的同学的学号s_d)和平均成绩(score)

表Student 学生表

S_id Sname Ssex

1 Xiaoli 男

2 xiaowang 女

3 zhanglong 男

4 zhaohu 女

create table student(s_id int(11),sname varchar(20),ssex varchar(20)) engine=innodb;
insert into student(s_id,sname,ssex) values(1,xiaoli,男),(2,xiaowang,女),(3,zhanglong,男),(4,zhaohu,女);

表 Course 课 程 表

C_id Cname T_id

1 语文 1

2 历史 3

3 数学 2

4 政治 4

create table course(c_id int(11),cname varchar(20),t_id int(20)) engine=innodb;
insert into course(c_id,cname,t_id) values(1,语文,1),(2,历史,3),(3,数学,2),(4,政治,4)

表SC 成绩表

s_id C_id score

1 2 99

3 4 88

1 3 55

2 1 77

create table sc(s_id int(11),c_id int(11),score varchar(20)) engine=innodb;
insert into sc(s_id,c_id,score) values(1,2,99),(3,4,88),(1,3,55),(2,1,77);

表Teacher 教师表

T_id Tname

1 zhangsan

2 lisi

3 wangwu

4 zhaoliu

create table teacher(t_id int(11),tname varchar(20)) engine=innodb;
insert into teacher(t_id,tname) values(1,zhangsan),(2,lisi),(3,wangwu),(4,zhouliu);

查询上所有同学的学号姓名、选课数、总成绩

①select student.s_id,avg(sc.score) from student join sc on student.s_id=sc.s_id having avg(sc.score)>60;
②select student.s_id,student.sname,count(sc.cname),sum(sc.score) from student join sc on student.s_id=sc.s_id

1.2.3.15 有两个表A和B,表结构和字段分别为:

A: B

ID Name ID hobby

1 tim 1 football

2 Jimmy 2 tennis

3 John 3 soccer

请写出Select A.Name, B.Hobbt from A,B where A.id = B.id的结果

select a.name,b.hobbt from a jon b on a.id=b.id

1.2.3.16 写出MySQL5.6新建用户dev,授权op库test表所有权限,任何地址的访问权限SQL

grand all on op.test to dev@'%' identified '123';

1.2.3.17 写出一条sql语句:取出表A中满足时间2006年1月1日至2006年1月31日的记录(时间字段为time)

select * from table where time between '2006-01-01' and '2006-01-31';

1.2.3.18 写出一条SQL语句:清除A表中的数据,但不删除表

delete * from tablename;或者truncate table name;

1.2.3.19 查找在机关单位任职的人员姓名、性别、出生日期、单位名称、并且查询结果按照单位排序;

select name,sex,birthday,company from table order by company desc;

1.2.3.20 查找性别为女的少数民族的非中共人员姓名、民族、出生日期;

select name,mingzu,birthday from table where sex='女' and 面貌!=中共党员;

1.2.3.21 在事业单位查找具有研究生学历博士学位的在任人员,要求显示姓名、性别、出生日期、政治面貌、单位名称、职务名称、批准任职日期,同时结果按照批准任职日期升序;

select name,sex,birthday,政治面貌,company,职务,批准日期 from table where xueli=boshi order by 批准日期;

1.2.3.22 查询在不同单位性质类别的单位任职的人数;

select count(name) from table group by company;

1.2.3.23 请写出下列语句的执行结果:select replace (ltrim(rtrim('abc3453436')),'34','abc')

abcabc53abc36

1.2.3.24 写一个查询语句,从数据库表中取出年龄age最大的十个人

select name from table order by age desc limit 10;

1.2.3.25 编写SQL语句。统计计算机系58班每个月过生日的男生人数,井按月进行排序

表 dept (系):

dept_id(系编号),dept_name(系名称)

表 class(班级):

class_id(班编号),dept_i(系编号),class_name(班名)

表 setdent(学生):

setdent_id(学生编号),class_id(班编号), sex(性别),birthday(生日)

select count(setdent.setdent_id),date_format(setdent.birthday,%m) from setdent join class on setdent.class_id=class.class_id join deptp on dept.dept_id=class.dept_id where dept.dept_name='计算机' and sex='男' group by Date_format(setdent.birthday,%m) order by date_format(setdent.birthday,%m) desc;

1.2.3.26 现有T表:(字段:ID,NAME,ADDRESS,PHONE,LOGDATE)

查询T表中地址中包含“北京”的SQL语句

插入一条数据到T表中

请写出将T表中第3~5行数据列出来的SQL语句

select * from t where ADDRESS="%北京%";

insert into t(ID,NAME,ADDRESS,PHONE,LOGDATE) values(,,,,);

select * from t limit 2,3;

1.2.3.27 Mysql创建数据库的命令,创建表的命令,插入语句的命令?

create database

create table ;

insert into t()values()

1.2.3.28 数据库中的两个数据库表,定义如下:

表名1:cardApply

字段(字段名/类型/长度):

applyNo varchar 8; //申请单号(关键字)

applyDate date 8; //申请日期

state varchar 2; //申请状态

表2:cardApplyDetail

字段(字段名/类型/长度):

applyNo varchar 8; //申请单号(关键字)

name varchar 30; //申请人姓名

idCard varchar 5; //ID卡号

applyNo varchar 8; //申请单号(关键字)

其中,两个表的关联字段为申请单号,依据上述信息完成1-5题目:

查询ID卡号为11111的申请日期

select cardApply.applydate from cardApply join cardApplyDetail on cardApplyDetail.applyNo=cardApply.applyNo where cardApplyDetail.idCard ='11111';

查询同一个ID卡号有两条以上记录的ID卡号及记录个数

select idCard,count(idCard) from cardApplyDetail group by idCard having count(idCard )>2;

将ID卡号为11111的记录在两个表中的申请状态均改为02

update cardApplyDetail set state='02' where idCard='11111';

删除cardApplyDetall 表中所有姓李的记录

delete * from cardApplyDetall where name='李%';

假如某一天有10个人申请,另外一天有20个人申请,还有一天有30个人申请,查询出申请卡最多的那一天日期

select applyDate,count(applyNo) from cardApply group by applyDate order by count(applyNo) desc limit 1;

1.2.3.29 第一题

Student S# Sname Sage Ssex 学生表

Course C# T# Cname () 课程表

SC S# C# score 成绩表

Teacher T# tname 教师表

写出学生表建表语句

create table student( s# int,not null,primary key auto_increment,sname varchar(20) not null,sage int not null,ssex enum('m','f') not null default 'm') engine=innodb charset='utf-8';

查询姓张的学生名单

select * from student where name='张%';

查询所有同学的学号、姓名、选课数、总成绩

select student.s#,student.sname,count(sc.c#),sum(sc.score) from student join sc on sc.s#=student.s# group by student.sname;

查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩

select student.sname,max(score),avg(score) from student join sc on student.s#=sc.s# join course on course.c#=sc.course.c# join teacher on course.t#=teacher.t# group by teacher.tname where teacher.tname='叶平';

1.2.3.30 第二题

第一题中的教师表中哪个字段可以建立唯一索引?写出建立唯一索引的语句

t#建立唯一索引。

alter table teacher add unique key index(t#);

1.2.3.31 第三题

如何检查第一题中学生表在数据库中所占的空间大小

select table_name,(index_length+avg_row_length*table_rows)/1024/1024 from information_schema.tables where table_name='student';

如何将第一题中的4个表进行备份,数据库用户、密码为:admin/admin 数据库名为:dbschool

select concat("mysqldump -uadmin -padmin" ,talble_schema " ",table_name,">temp/",table_schema,"__",table_name,".sql") from infomation_schema.tables where table_schema not in ('infomation_schema','performance_schema','sys') into outfile 'tmp.bak.sh';

1.2.3.32 部门表:t_dept(deptid ,deptname)工资表:t_salary(id,employeeid,deptid,salary)要求:查出员工的平均工资大于3000的部门名称

select t_depy.depyname ,avg(t_salary.salary) from t_dept join t_salary on t_dept.deptid=t_salary.deptid group by t_dept.deptid having avg(t_salary.salary)>3000;

1.2.3.33 student表(Sno,Sname,Sage,Ssex)Course表(Cno,Cname,Ccredit)SC表(Sno,Cno,grade)

建表student、course、SC

create table student(sno int,sname varchar(20),sage int,ssex varchar(10))

create table course(cno int,cname varchar(20),ccredit varchar(20))

create table course(sno int , cno int,grade varchar(20))

查询年龄小于20的学生学号、年龄,并显示

select sno,sname,sage from student where sage<20;

查询年龄不在20-23(包括20,23)的学生的成绩

select student.sname sc.grade from student join sc on student.sno=sc.sno where student.sage<20 and student.sage>23;

1.2.3.34 给出查询表A(ID,Name)中存在ID重复三次以上的记录的SQL语句

select id,count(id) from a group by id having count(id)>3;

1.2.3.35 mysql用户名:root,密码:123456,socket:/opt/mysql3306/mysql3306.sock,跑默认端口,请使用一条命令更新该数据源neutron库中的ipallocations表中的ip_address 字段等于10.4.182.36的记录为202.113.14.92

mysql -uroot -p123456 -S /opt/mysql3306/mysql3306.sock -e "update table neutron.ipallocations set ip_address="202.113.14.92" where ip_address='10.4.182.36';

1.2.3.36 写出以下SQL语句(涉及到表名和字段自定义)

查询某一个表前20条记录

select * from t limit 20;

某公司从下个月起,每个人工资在原有基础上上涨10%

update table a salary=salary+salary*0.1 where date=date_format(now(),%m)+1

删除某个表中日期为2017-01-01以前的数据

delete * from a where date<'2017-01-01';

新增一条记录

insert into a values();

备份数据库

mysqldump -uroot -poldboy123 -A -master-date -single-transaction -R -E -triggers >/tmp.bak.gz

1.2.3.37 有三张表分别为客户表customers,账户表accounts,用户表users

客户表customers (cust_id,cust_name,cust_opendate())

账户表accounts(acc_id,acc_name,cust_id,acc_opendate(账户开通时间))

用户表users(user_id,user_name,cust_id,lost_login_date(用户最后登录时间))

每个客户可以开通多个帐号,每个客户有多个用户,cust_id,acc_id,user_id分别为客户、账户、用户的唯一标志,cust_opendate,acc_opendate,lost_login_date类型为date按照要求用一条sql语句完成

统计每个月开通的客户数

select count(cust_id) ,date.format(accounts.acc_opendate,%m) from customers join accounts on customers.cust_id=accounts.cust_id group by date_format(accounts.acc_opendate,%m);

列出上个月开通客户列表,并输出这些客户所具有的账户和用户数量

select accounts.cust.id,count(users.user.id) from accounts join users on accounts.cust_id=users.cust_id where data_format(accounts.acc_opendate,%m)=date_format(now(),%m)-1;

统计三个月内登录过的客户数量

select count(user_id) from users where date_format(lost_login_date,%m) in date_format(now(),%m)-1,date_format(now(),%m)-2,date_format(now(),%m)-3;

统计老客户今年开通账户的数量,老客户是指今年以前开通的账户

select date_format(cust_opendate,%Y),count(cust_id) from customers where date.format(cust_opendate,%Y)=date.format(now(),%Y);

1.2.3.38 SQL

表名 user

Name Tel Content Date

张三 13333663366 大专毕业 2006-10-11

张三 13612312331 本科毕业 2006-10-15

张四 021-55665566 中专毕业 2006-10-15

(a)有一新记录(小王 13254748547 高中毕业 2007-05-06)请用SQL语句新增至表中

insert into user values(‘小王 ’,‘13254748547’, ‘高中毕业’, ‘2007-05-06’);

(b)请用sql语句把张三的时间更新成为当前系统时间

update user set date=date_format(now(),"%Y-%m-%d") where name='张三';

(c)请写出删除名为张四的全部记录

delete from user where name='张四';

1.2.3.39 创建一个用户并赋予权限

grand all on *.* to oldboy@localhost identified '123';

1.2.3.40 创建表空间neuspace,数据文件命名为neudata.dbf,存放在d:\data目录下,文件大小为200MB,设为自动增长,增量5MB,文件最大为500MB

create tablespace neuspace datefile 'd:\data\neudata.dbf' size 200 autoextend on text 5M maxsize 500M;

1.2.3.41 以系统管理员身份登录,创建账号tom,设置tom的默认表空间为neuspace.为tom分配connect和resource系统角色,获取基本的系统权限。然后为tom分配对用户scott的表emp的select权限和对SALARY,MGR属性的update权限

create user tom identified by tom default tablespace account;

grand connect,resource to tom;

grand select on scott.emp to tom;

grand update on SALARY.MGR to tom;

1.2.3.42 按如下要求创建class

属性 类型(长度) 默认值 约束 含义

CLASSNO 数值(2) 无 主键 班级编号

CNAME 变长字符(10)无 非空 班级名称

create table class(classon int(2) not null primary key auto_increment comment '班级编号',cname varchar(10) not null comment '班级名称')

1.2.3.43 学生表有四个字段:学号、姓名、年级、学分,统计出按年级降序同名同姓的数据情况(写出sql语句)

select count(姓名),年级 from a group by name order by 年级 ;

1.2.3.44 在表class的CNAME属性上创建索引class_sname_idx

alter table class add index class_sname_idx(cname);

1.2.3.45 sql类

学生信息表

姓名(Name) 学号(Code)

张三 001

李四 002

马五 003

甲六 004

考试信息表

学号 学科 成绩

001 数学 80

002 数学 75

001 语文 90

002 语文 80

001 英语 90

002 英语 85

003 英语 80

004 英语 70

查询各科成绩的平均分,显示栏位为学科、平均分,sql怎么写

select 学科,avg(成绩)from 考试 group by 学科;

查询所有学生各科成绩,显示栏位为姓名、学号、学科、成绩,并以学号与学科排序,没有成绩的学生也需要列出,sql怎么编写

select a.name,a.code,b.course,b.grade from a join b on a.id=b.id order by course;

查询出单科成绩最高的,显示栏位为:姓名、学号、学科、成绩,sql怎么编写

select a.name,a.id,b.course,max(grade) from a join b a.id=b.id group by b.course;

列出每位学生各科成绩,要求输出格式:姓名、学号、语文成绩、数学成绩、英语成绩,sql怎么写

select a.name,a.id

case when b.学科=‘语文’ then b.成绩 then as ‘语文成绩’,

case when b.学科=‘数学’ then b.成绩 then as ‘数学成绩’

case when b.学科=‘英语’ then b.成绩 then as ‘英语成绩’

from a join b on a.id=b.id

group by a.id;

1.2.3.46 假如有A*和B两个表,A表中包括ID,COL1,COL2,COL3等栏位,B表中包括ID,COL1,COL2,COL4,COL5等栏位,现需要把B中的CLO1,COL2内容更新到A表COL1,COL2中,ID***为关键字段,要求只写一个SQL**

update table a set (select clo1,col2 from b)

1.2.3.47 不借助第三方工具,如何获得SQL的执行计划

explain

1.3 MySQL索引

1.3.1 选择

1.3.1.1 在SQL数据库一个班级表里只记录了100位同学的情况,那么对该表建立索引文件的描述正确的是(B)

A一定要,因为索引有助于加快搜索记录的进程

B不适宜,因为对少林记录的表进行索引实际上会产生不利的影响

C一定要,因为索引对于任何数据库表都是必要的

D没有必要,因为建立索引对任何数据库的性能都没有影响

1.3.2 简答

1.3.2.1 索引的好处和坏处是什么?

好处,在有索引的条件下查询速度快。

坏处,需要维护成本。

1.3.2.2 数据库中,哪些列需要创建索引,哪些列不适合创建索引

主键索引,唯一列,联合列;

1.3.2.3 Mysql列出数据库___show databases;切换当前用户连接的数据库_-su___

1.3.2.4 请问以下一些查询语句是否用到该索引?()对last_name和first_name做索引。

A.SELECT * FROM customer_master WHERE first_name = 'Ed';

B.SELECT * FROM CUSTOMER_MASTER WHERE last_name LIKE '%rane' AND first_name = 'Ed';

C.SELECT * FROM CUSTOMER_MASTER WHERE last_name = 'Crane' AND first_name LIKE '%Ed';

D.SELECT * FROM CUSTOMER_MASTER WHERE last_name LIKE 'Crane%' ORDER BY first_name,last_name;

E.SELECT * FROM CUSTOMER_MASTER WHERE last_name='Crane' OR first_name='ED';

1.3.2.5 说说你对索引的认识(结构、对dml的影响、为什么提高查询性能)

索引有 B-TREE、BIT、CLUSTER 等类型。ORACLE 使用了一个复杂的自平衡 B-tree 结构;通常来

说,在表上建立恰当的索引,查询时会改进查询性能。但在进行插入、删除、修改时,同时会进行

索引的修改,在性能上有一定的影响。有索引且查询条件能使用索引时,数据库会先度取索引,根

据索引内容和查询条件,查询出 ROWID,再根据 ROWID 取出需要的数据。由于索引内容通常比全

表内容要少很多,因此通过先读索引,能减少 I/O,提高查询性能。

b-tree index/bitmap index/function index/patitional index(local/global)索引通常能提高 select/update/delete

的性能,会降低 insert 的速度。

1.4 MySQL优化

1.4.1 选择

1.4.1.1 顺序表(2,6,8,10,12,15,16,18,24,28,32)中,用二分法查找关键码值,所需的关键词比较次数为(c)

A. 3 B. 4 C.5 D. 6

1.4.1.2 从二叉树的任一结点出发到根的路径上,所经过的结点序列必按其关镇字降仔指列。(c)

A二叉排序树 B.大顶堆 C 小顶堆 D.平衡二叉树

1.4.2 填空

1.4.2.1 在总计函数中,传回非NULL值的字段数目的函数名称是____count()__

1.4.3 简答

1.4.3.1 若果一个sql查询语句很长,执行速度慢,你会想到哪些优化的方法?

查询不需要的记录,使用 limit 解决;

多表关联返回全部列,指定 A.id, A.name, B.age;

总是取出全部列,SELECT * 会让优化器无法完成索引覆盖扫描的优化。

优化 count() 查询

优化关联查询

优化子查询(即嵌套查询)

优化 GROUP BY 和 DISTINCT

优化 LIMIT 分页

优化 UNION 查询

1.4.3.2 数据库里有些数据会反复被查询,问有什么好方法提高效率?

建立索引

分区(如 MySQL,按时间分区)

尽量使用固定长度字段和限制字段长度(如 varchar(10))

增加缓冲区

如果设计表的级联,不同的表存储在不同磁盘上,以增加 I/O 速度

优化 sql 语句,减少比较次数

限制返回条目数(mysql 中使用 limit)

1.4.3.3 系统中,主要的业务表。按月进行分表。7,8,9月表分别为tab_201707、tab_201708、tab_201709这三个表里。表结构如下:

SQL> desc tab_201707;

Name Type Nullable Default Comments

ID NUMBER 自增

CID NUMBER Y 批次ID

CODE VARCHER2(20) Y 特服号

CORPORATEID NUMBER 企业ID

USERID NUMBER Y 用户ID

请写出SQL语句,统计7、8、9三个月,每个USERID的记录总数

select userid,count(userid) from tab_201707;

1.4.3.4 什么是跨站脚本攻击,有何危害,sq|注入攻击如何防范

XSS 跨站脚本攻击:两种情况。一种通过外部输入然后直接在浏览器端触发,即反射型 XSS;还有

一种则是先把利用代码保存在数据库或文件中,当 web 程序读取利用代码并输出在页面上时触发漏

洞,即存储型 XSS。DOM 型 XSS 是一种特殊的反射型 XSS。

跨站点脚本(XSS)允许攻击者通过利用因特网服务器的漏洞来发送恶意代码到其他用户。攻击者

利用跨站点脚本(XSS)攻击向那些看似可信任的链接中注入恶意代码。当用户点击了链接后,内

嵌的程序将被提交并且会在用户的电脑上执行,这会使黑客获取。

危害:前端页面能做的事它都能做。(不仅仅盗取 cookie、修改页面等)

漏洞防范

(1) 特殊字符 HTML 实体转码。最好的过滤方式是在输出和二次调用的时候进行加 HTML 实体

一类的转码,防止脚本注入。

(2) 标签事件属性黑名单。特殊字符容易被绕过,所以还得加标签事件得黑名单或者白

名单,这里推荐使用白名单的方式,实现规则可以直接使用正则表达式来匹配,如果匹配到的事件

不在白名单列表,就可以直接拦截,而不是过滤为空。

1.4.3.5 在工作中,一台线上MSSQL数据库查询数据突然变得异常缓慢,如果交给你排查,请写出排查思路

首先应该从系统级别来排查。先找出到底哪里慢,是特定操作慢呢,还是所有操作都慢了。

既然是突然变慢,那么就是说之前还是比较快的。自从某个特殊事件发生后,慢了下来。特殊事件

一般包括:

1、程序做了修改。

2、突然有大数据量的系统访问。

3、某些不常用功能突然启用,或大量访问。

4、某些硬件出了功能性问题。

对于系统整体变慢,基本上还是先查系统日志。查最近的系统更新日志。查看磁盘剩余容量。硬件

是否由异常。

1.4.3.6 SQL语句调优

select v_id,v_owner,v_uesr,v_options,v_date,v_anonymous from t_vote_hash_by_id_65 where v_id='536' and v_user='yu281590760' and v_owner='xiwangkuaile222';

1.4.3.7 列出您认为sql优化可以从哪些方面进行

1、sql 语句的执行计划是否正常。

2、减少应用和数据库的交互次数、同一个 sql 语句的执行次数。

3、数据库实体的碎片的整理(特别是对某些表经常进行 insert 和 delete 动作,尤其注意,索引字段

为系列字段、自增长字段、时间字段,对于业务比较频繁的系统,最好一个月重建一次)。

4、减 少表之间的关联,特别对于批量数据处理,尽量单表查询数据,统一在内存中进行逻辑处理,减少

数据库压力(java 处理批量数据不可取,尽量用 c 或者 c++ 进行处理,效率大大提升)。

5、对访问频繁的数据,充分利用数据库 cache 和应用的缓存。

6、数据量比较大的,在设计过程中,为了减少其他表的关联,增加一些冗余字段,提高查询性能。

1.4.3.8 某个系统sql忽然变慢,影响了系统的性能,但通过sqlplus或者PL/SQL developer运行改sql,速度却很快,请问产生此情况的可能原因,并简述解决办法

listener.log 过大导致

1.5 MySQL集群

1.5.1 选择

1.5.1.1 下面对Linux下mysqldump备份命令及参数描述正确的是(A)

A.mysqldump -h ip -u -p DBNAME>back.sql B.mysqldump -P ip -h DBNAME>back.sql

C.mysqldump -u ip -P DBNAME>back.sql D.mysqldump -h ip -u DBNAME>back.sql

1.5.1.2 如何将MySQL数据库中的mail这个数据库备份成mail.sql?(B)

A、mysql -opt mail uroot-p > mail sql B、mysqldump --opt mail -uroot p > mail.sql

C、mysql -uroot -p > mail.sql D.mysql -uroot -p < mail sql

1.5.1.3 MySQL主从结构的主数据库中不可能出现以下哪种日志______C__

A错误日志 B事务日志 C中继日志 Dredo log

1.5.1.4 对于数据库备份正确的做法是:B

A停止业务开始备份 B 停止数据库开始备份 C不需要停止备份 D根据情况而定

1.5.2 填空

1.5.2.1 如何用mysql命令进行备份和恢复?以Lest库为例,创建一个备份,并再用此备份进行恢复

mysql -uroot -poldboy123 -B lest >/tmp/lest.bak.gz

source /tmp/lest.bak.gz

1.5.2.2 Mysql备份工具___xtrabackup,mysqldump___

1.5.3 简答

1.5.3.1 每天凌晨2点对mfdata数据库进行备份,备份到/data/mysql/下,并以时间为备份名。

crontab -e

00 02 * * * /bin/sh /server-scripts/backup.sh >/dev/null 1&>2

mysqldump -uroot -poldboy123 -B mfdata >/data/mysql/backup_$(date +%F).bak.sql

1.5.3.2 mysql备份命令

xtraback

mysqldump

本地备份 mysqldump -uroot -p -S /tmp/mysql.sock

远程备份 mysqldump -uroot -p -h 10.0.0.51 -P3306

1.5.3.3 说明一下mysql主从复制原理并描述一下部署主从复制的步骤

1.change master to 时,ip pot user password binlog position 写入到 master.info 进行记录

\2. start slave 时,从库会启动 IO 线程和 SQL 线程

3.IO_T,读取 master.info 信息,获取主库信息连接主库

\4. 主库会生成一个准备 binlog DUMP 线程,来响应从库

\5. IO_T 根据 master.info 记录的 binlog 文件名和 position 号,请求主库 DUMP 最新日志

\6. DUMP 线程检查主库的 binlog 日志,如果有新的,TP(传送)给从从库的 IO_T

\7. IO_T 将收到的日志存储到了 TCP/IP 缓存,立即返回 ACK 给主库 ,主库工作完成

8.IO_T 将缓存中的数据,存储到 relay-log 日志文件,更新 master.info 文件 binlog 文件名和 postion,

IO_T 工作完成

9.SQL_T 读取 relay-log.info 文件,获取到上次执行到的 relay-log 的位置,作为起点,回放 relay-log

10.SQL_T 回放完成之后,会更新 relay-log.info 文件。

  1. relay-log 会有自动清理的功能。

1.5.3.4 备份Mysql的所有数据库。

mysqldump -uroot -poldboy123 -A >/tmp/backup.bak.gz;

1.5.3.5 对mysql数据库test进行备份和恢复

create database test;

mysqldump -uroot -poldboy123 -A >/tmp/backup.bak.gz

source /tmp/backup. bak.gz

1.5.3.6 如何备份某个库,某个库下的某个表,某个库排除某个表

mysqldump -uroot -poldboy123 testdb --ignore-table test123>/tmp/backup/test.bak.gz

1.5.3.7 如何恢复备份的数据,过程,注意事项?

mysqldump -uroot -poldboy testdb </tmp/backup/test.bak.gz

还原直接复制目录的备份 通过这种方式还原时,必须保证两个 MySQL 数据库的版本号是相同

的。MyISAM 类型的表有效,对于 InnoDB 类型的表不可用,InnoDB 表的表空间不能直接复制。

1.5.3.8 主从概念,如何配置,管理,监控,有确定。主从如何同步的?

1.change master to 时,ip pot user password binlog position 写入到 master.info 进行记录

\2. start slave 时,从库会启动 IO 线程和 SQL 线程

3.IO_T,读取 master.info 信息,获取主库信息连接主库

\4. 主库会生成一个准备 binlog DUMP 线程,来响应从库

\5. IO_T 根据 master.info 记录的 binlog 文件名和 position 号,请求主库 DUMP 最新日志

\6. DUMP 线程检查主库的 binlog 日志,如果有新的,TP(传送)给从从库的 IO_T

\7. IO_T 将收到的日志存储到了 TCP/IP 缓存,立即返回 ACK 给主库 ,主库工作完成

8.IO_T 将缓存中的数据,存储到 relay-log 日志文件,更新 master.info 文件 binlog 文件名和 postion,

IO_T 工作完成

9.SQL_T 读取 relay-log.info 文件,获取到上次执行到的 relay-log 的位置,作为起点,回放 relay-log

10.SQL_T 回放完成之后,会更新 relay-log.info 文件。

\11. relay-log 会有自动清理的功能。

监控

1)监控 MYSQL 的运行状态;

2)Slave 机器的 IO 和 SQL 状态都必须为 YES,缺一不可;

1.5.3.9 msyql备份命令?mysql如何给jfedu用户对所有表授权访问,密码为jfedu.net

mysqldump -uroot -poldboy123 -A >/tmp/backup.bak.sql

grand all on . to jfdeu@localhost identified by 'jfedu.net';

1.5.3.10 如何判断mysql主从是否同步? 该如何使其同步?

show slave status\G;

Slave_IO_Running

Slave_SQL_Runing

1.5.3.11 mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟

锁监控设计到的命令:

show status like 'innodb_rows_lock%'

select * from information_schema.innodb_trx;

select * from sys.innodb_lock_waits;

select * from performance_schema.threads;

select * from performance_schema.events_statements_current;

select * from performance_schema.events_statements_history;

---------------------

1 主库写 binlog 不及时 *******

控制 binlog 从内存写入磁盘的控制开关

每次事务提交都立即刷新 binlog 到磁盘(双一标准中的其一)

sync_binlog=1

每次事务提交不立即写入磁盘,靠操作系统判断什么时候写入

sync_binlog=0

说明:5.6 默认是 0,5.7 以后默认是 1

2 dump 线程多导致的,系统资源压力大,由于传送日志是串行的。

从库越多,压力越大

由于超大事务存在,由于是串行工作,会阻塞后续其他事务的传送。

解决方案:

减少大事务

group commit (需要配合 GTID 来实现的)

3 从库-IO 线程阻塞

大事务拆成小事务

事务量大(主库压力大)

group commit 可以缓解

业务的分离和分布式(Mycat,InnoDB Cluster)

4 SQL 线程慢(Classic replication 传统) *****

原因:

从库 默认只有一个 SQL 线程,串行回放事务。在主库有并发事务量大,或者有超大事务时,都会导

致 SQL 延时较严重。

如何解决:

5.6 版本,加入了 GTID 特性,所以支持了并发 SQL 特性,基于不同库实现并行回放事务

5.7 版本,GTID 功能进行了升级,可以通过 Logical_clock 模式,实现事务级别的多 SQL 线程的回

放。我们把这种复制模式叫做 MTS。

1.5.3.12 写出对MySQL数据库test进行备份和恢复的命令

mysqldump -uroot -poldboy123 test >/tmp/bakcup/test.bak.sql

create databases test;

source /tmp/backup/test.bak.sql

1.5.3.13 Mysql的binlog格式有哪些,默认的是什么格式,格式选取的标准是什么

binlog 有三种格式:Statement、Row 以及 Mixed。

–基于 SQL 语句的复制(statement-based replication,SBR),

–基于行的复制(row-based replication,RBR),

–混合模式复制(mixed-based replication,MBR)。

1、STATEMENT 模式(SBR)

每一条会修改数据的 sql 语句会记录到 binlog 中。优点是并不需要记录每一条 sql 语句和每一行的数

据变化,减少了 binlog 日志量,节约 IO,提高性能。缺点是在某些情况下会导致 master-slave 中的

数据不一致(如 sleep()函数, last_insert_id(),以及 user-defined functions(udf)等会出现问题)

2、ROW 模式(RBR)

不记录每条 sql 语句的上下文信息,仅需记录哪条数据被修改了,修改成什么样了。而且不会出现

某些特定情况下的存储过程、或 function、或 trigger 的调用和触发无法被正确复制的问题。缺点是

会产生大量的日志,尤其是 alter table 的时候会让日志暴涨。

3、 MIXED 模式(MBR)

以上两种模式的混合使用,一般的复制使用 STATEMENT 模式保存 binlog,对于 STATEMENT 模式

无法复制的操作使用 ROW 模式保存 binlog,MySQL 会根据执行的 SQL 语句选择日志保存方式。

1.5.3.14 Mysql主从是否同步,要在主库上查看还是从库上查看,主要关注哪些参数

show slave status\G;

slave_IO_Running

slave_SQL_Running

1.5.3.15 说明一下目前线上mysql 集群 的部署方案

MHA+atlas

Mycat+MGR

InnoDB cluster

PXC

MGC

1.5.3.16 用哪个命令可以对Mysql中的数据库进行备份?

mysqldump -uroot -poldboy123 -A >/tmp/backup.bak.sql

source /tmp/backup.bak.sql

mysqldump

mysqldump -u 用户名 -p 密码 --databases 数据库 1 数据库 2 > xxx.sql

常见选项:

-u: 用户名

-p: 密码

-P: 端口号,不写默认 3306

--all-databases, -A:备份所有数据库

--databases, -B: 用于备份多个数据库,如果没有该选项,mysqldump 把第一个名字参数作为数据库

名,后面的作为表名。使用该选项,mysqldum 把每个名字都当作为数据库名。

-d: 只导出数据库的表结构

-t: 只导出数据库的数据

--quick, -q:快速导出

--xml, -X:导出为 xml 文件

1.5.3.17 mysql的binlog有几种,区别是什么?mysql双主复制原理是什么?有什么优点和缺点?mysql如何进行增量备份?

binlog 的格式也有三种:STATEMENT、ROW、MIXED 。

1、STATMENT 模式:基于 SQL 语句的复制(statement-based replication, SBR),每一条会修改数据的

sql 语句会记录到 binlog 中。

2、基于行的复制(row-based replication, RBR):不记录每一条 SQL 语句的上下文信息,仅需记录哪

条数据被修改了,修改成了什么样子了。

3、混合模式复制(mixed-based replication, MBR):以上两种模式的混合使用,一般的复制使用

STATEMENT 模式保存 binlog,对于 STATEMENT 模式无法复制的操作使用 ROW 模式保存

binlog,MySQL 会根据执行的 SQL 语句选择日志保存方式。

双主原理:

双向的主从复制,也就是互为对方的从服务器,每台服务器即是对方的主服务器,又是对方的从服

务器

数据库复制 replication 的实现原理

1:主服务器凡运行语句,都产生一个二进制日志 binlog

2:从服务器不断读取主服务器的 binlog

3:从主服务读取到的 binlog,转换为自身可执行的 relaylog,

4:执行 relaylog

1.5.3.18 简述数据库中全量备份、差异备份、事务日志备份的恢复方式

mysql -hhostname -uusername -ppassword databasename < backupfile.sql

mysqlbinlog -d test mysql-bin.000003 >003bin.sql

1.5.3.19 如果需要可以回滚的修改以下sql语句,如何实现?

<v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><v:stroke joinstyle="miter"><v:formulas></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path></v:stroke></v:shapetype><v:shape id="图片_x0020_10" o:spid="_x0000_i1025" type="#_x0000_t75" style="width:6in;height:195pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png" o:title=""></v:imagedata></v:shape>

1.5.3.20 SAN方式高可用,你对这方面有了解吗?

SAN(Storage Area Network)简单点说就是可以实现网络中不同服务器的数据共享,

共享存储能够为数据库服务器和存储解耦。使用共享存储时,服务器能够正常挂载文件系统并操

作, 如果服务器挂了,备用服务器可以挂载相同的文件系统,执行需要的恢复操作,然后启动 MySQL

1.5.3.21 mysqldump实现不锁表的参数

mysqldump 备份不锁表:加上--lock-tables=false 参数,

如果是 innodb,则加上--single-transcation 比较好。

1.5.3.22 MySQL数据库的备份命令

mysqldump -uroot -poldboy123 -A >/tmp/backup.bak.sql

mysqldump -uroot -poldboy123 -B test >/temp/backup.bak.sql

1.5.3.23 MySQL的同步、半同步、一步同步主从复制有什么区别

异步复制

异步复制,主库将事务 Binlog 事件写入到 Binlog 文件中,此时主库只会通知一下 Dump 线程发

送这些新的 Binlog,然后主库就会继续处理提交操作,而此时不会保证这些 Binlog 传到任何一个

从库节点上。

全同步复制

全同步复制,当主库提交事务之后,所有的从库节点必须收到、APPLY 并且提交这些事务,然后主

库线程才能继续做后续操作。但缺点是,主库完成一个事务的时间会被拉长,性能降低。

半同步复制

半同步复制,是介于全同步复制与全异步复制之间的一种,主库只需要等待至少一个从库节点收到

并且 Flush Binlog 到 Relay Log 文件即可,主库不需要等待所有从库给主库反馈。同时,这里只是

一个收到的反馈,而不是已经完全完成并且提交的反馈,如此,节省了很多时间。

1.5.3.24 对于一个数据量较多的系统(数据库10T,每天归档500g),您如何设计备份策略

每周 Full,每天 inc,或使用 DG、OGG

1.5.3.25 对于exp/imp和impdb/expdp逻辑备份的时候,有什么方法提高效率

expdp/impdp 是服务端程序,影响它速度的只有磁盘 IO。

exp/imp 可以在服务端,也可以在客户端。所以,它受限于网络和磁盘

采用 direct path 可以提高导出速度。 所以,在使用 exp 时,就可以采用直接路径模式。 这种模式有 2 个相关的参数:

DIRECT 和 RECORDLENGTH 参数。

DIRECT 参数定义了导出是使用直接路径方式(DIRECT=Y),还是常规路径方式(DIRECT=N)。常规路径导出使用 SQL SELECT

语句从表中抽取数据,直接路径导出则是将数据直接从磁盘读到 PGA 再原样写入导出文件,从而避免了 SQL 命令处理层的数

据转换过程,大大提高了导出效率。在数据量大的情况下,直接路径导出的效率优势更为明显,可比常规方法速度提高三倍之

多。

和 DIRECT=Y 配合使用的是 RECORDLENGTH 参数,它定义了 Export I/O 缓冲的大小,作用类似于常规路径导出使用的

BUFFER 参数。建议设置 RECORDLENGTH 参数为最大 I/O 缓冲,即 65535(64kb)。其用法如下:

如:exp userid=system/manager full=y direct=y recordlength=65535 file=exp_full.dmp log=exp_full.log

1.6 Oracle

1.6.1 选择

1.6.1.1 如果一个服务器进程非正常终止,Orade系统将使用下列哪一个进程来释放它所占用的资源?(D)

A.DBWR B.LGWR C.SMON D.PMON

1.6.1.2 下例选项中,哪一部分不是Orade 实例的组成部分?(B )

A.SGA系统全局区 B.控制文件 C.PMON 后台进程 D.Dnnn 调度进程

1.6.1.3 Oracle 本地解析依赖那个文件(B)

A.sqlnet.ora B.listener.ora C.cman.ora D.tnsnames.ora

1.6.1.4 在Oracle中,当控制一个显示游标时,以下哪个命令包含into子句?(C)

A.Open B.close C.fetch Dcursor

1.6.1.5 Oracle中要生成数据库表,下列哪个选项是无效表生产的语句?(D)

A.create table cats(c_name varchar2(10),c_weighe number,c_owner varcjar2(10))

B.create table cats(c_name varchar2(10),c_weighe number,c_owner varcjar2(10))

C.create global temporary table temp_cats(c_name varchar2(10),c_weighe number,c_owner varcjar2(10))

D.create table 51cats as select c_name,c_weight from cats where c_weigth >5

1.6.1.6 在oracle中,当控制一个显示游标时,一下哪个命令包含into子句?C

A.Open B.close C.fetch D.cursor

1.6.1.7 表中的数据可以存为一下那种文件格式(B)

A.PDF B.EXE C.TXT D.DMP

1.6.1.8 在全局存储区SGA中,那个部分内存区域是循环使用的(B)

A数据缓冲区 B日志缓冲区 C共享池 D大池

1.6.1.9 如果要查询数据库中所有表的信息,应当使用下列哪种数据字典视图? (A)O

A.DBA 视图 B.ALL 视图 C.USER 视图 D.动态性能视图

1.6.1.10 下列哪一项是Oracle数据库中最小的存储分配单元?( D)

A.表空间 B.段 C.盘区 D.数据块

1.6.1.11 下面的各选项中哪一一个正确描述了Oracle数据库的逻辑存储结构? (A)O

A.表空间由段组成,段由盘区组成,盘区由数据块组成

B.段由表空间组成,表空间由盘区组成,盘区由数据块组成

C.盘区由数据块组成,数据块由段组成,段由表空间组成

D.数据块由段组成,段由盘区组成,盘区由表空间组成

1.6.1.12 下列哪一个进程用于将修改过的数据从内存保存到磁盘数据文件? (A

A.DBWR B.LGWR C.RECO D.ARCH

1.6.1.13 解忙后的SOL语句在SGA的哪个区域中进行缓存?(C)

A数据缓冲区 B日志缓冲区 C共享池 D大池

1.6.1.14 当数据库运行在归档模式下时,如果发生目志切换,为了保证不覆盖旧的日志信息系统将启动如下哪个进程?D

A.DBWR B.LGWR C.SMON D.ARCH

1.6.1.15 PL/SQL代码段中注释 符号是A

A// B\ C- D,

1.6.1.16 (C)模式存储数据库中数据字典的表和视图

A 、DBA B、SCOTT C、SYSTEM D、SYS

1.6.2 填空

1.6.2.1 从存储结构的角度来说,Oracle数据库可分为——、——区块段

1.6.2.2 要更新游标结果集中的当前行,应使用__FOR MODIFY 子句

1.6.2.3 Oracle查看表空间情况使用哪个数据字典_______ dba_tablespces_v$tablespace _______

1.6.2.4 Oracle 备份工具(包括导入导出)_____ _____ _____ (exp___ _imp__expdp impdp rman

1.6.2.5 Oracle下取得当前系统时间的代码为______select sysdate from dual;

1.6.2.6 PL/SQL块中不能直接使用的SQL命令是____DDL trong

1.6.3 简答

1.6.3.1 在ORACLE 中用SQL 语句备份表A,备份表名为B。

1.6.3.2 往oracle 插入数据超时,root 用户下如何排查故障节点,描述重新启动oracle 服务过程

1、startup nomount

这个阶段,Oracle 进程读取初始参数文件,查看 Oracle 数据库的参数是如何配置的。比如内存

大小配置参数等。读取参数文件后,与数据库相关的内存区域被建立起来,同时,后台进程也已经

开始启动。我们把这些内存和进程叫做 Oracle instance,一旦 Oracle Instance 启动成功,数据库就进

入了 NoMount 阶段。

2、Mount

启动到这个阶段时,会打开和读取控制文件,控制文件是二进制文件,记录着 Oracle 的重要

信息,例如,数据文件的路径等。

这个阶段,Oracle 确定数据文件的位置,但是还没有打开这些文件,一旦数据文件的路径被定

位后,数据库开始进入下一阶段。

3、Open这个阶段,Oracle 会读取所有的数据文件,并且确定这些数据文件是一致的(consistent)。

1.6.3.3 Oracle表空间,单个数据文件最大支持存储多少G数据,索引需要重建吗,什么时候需要重建索引

32G

1.6.3.4 请写出unix系统中oracle数据库启、停命令

启动:startup

停止:shutdown immediate

1.6.3.5 请描述oracle数据库备份方式

Oracle 备份包括逻辑备份和物理备份。

1.逻辑备份 数据库的逻辑备份包含读一个数据库记录集和将记录集写入文件。

(1)输出(Export)输出可以是整个数据库、指定用户或指定表。

(2)输入(Import)输入将输出建立的二进制转储文件读入并执行其命令。

2.物理备份 物理备份包含拷贝构成数据库的文件而不管其逻辑内容。

Oracle 支持两种不同类型的物理文件备份:脱机备份(offline backup)和联机备份(online

backup)。

(1) 脱机备份 脱机备份用在当数据库已正常关闭,数据库处于"offline"时,要备份下列文件

所有数据文件 所有控制文件

1.6.3.6 Oracle如何实现数据库的优化

1、调整数据结构的设计。这一部分在开发信息系统之前完成,程序员需要考虑是否使用 ORACLE

数据库的分区功能,对于经常访问的数据库表是否需要建立索引等。

2、调整应用程序结构设计。这一部分也是在开发信息系统之前完成,程序员在这一步需要考虑应用

程序使用什么样的体系结构,是使用传统的 Client/Server 两层体系结构,还是使用

Browser/Web/Database 的三层体系结构。不同的应用程序体系结构要求的数据库资源是不同的。

3、调整数据库 SQL 语句。应用程序的执行最终将归结为数据库中的 SQL 语句执行,因此 SQL 语

句的执行效率最终决定了 ORACLE 数据库的性能。ORACLE 公司推荐使用 ORACLE 语句优化器

(Oracle Optimizer)和行锁管理器(row-level manager)来调整优化 SQL 语句。

1.6.3.7 备份如何分类

逻辑备份与物理备份。或者冷备份与热备份。

1.6.3.8 你最擅长的是oracle那部分

性能优化、故障修复, RAC,DG,OGG,迁移

1.6.3.9 喜欢oracle吗?喜欢上论坛吗?或者偏好oracle的那一部分

官方文档,MOS 等;性能优化、故障修复, RAC,DG,OGG,迁移

1.6.3.10 随意说说你觉得oracle最有意思的部分或者最困难的部分

SQL 调优

1.6.3.11 Oracle的回滚段的作用是什么

保存数据的前像,保证数据读取的时间点一致性。Oracle 里数据的多版本特性就是通过回滚段来实

现的,正因为此,Oracle 数据库实现了读写不竞争的性能优势!

1.6.3.12 oracle的日只有哪几种,作用是什么

Alert log files--警报日志,

Trace files--跟踪日志(用户和进程),

redo log 重做日志(记录数据库的更改)

归档 保存 redo

1.6.3.13 oracle进程主要有哪些,作用是什么

pmon smon dbwr lgwr arch lisner

1.6.3.14 请简单描述下您对oracle锁机制的认识

ORACLE 里锁有以下几种模式:

0:none

1:null 空

2:Row-S 行共享(RS):共享表锁

3:Row-X 行专用(RX):用于行的修改

4:Share 共享锁(S):阻止其他 DML 操作

5:S/Row-X 共享行专用(SRX):阻止其他事务操作

6:exclusive 专用(X):独立访问使用

数字越大锁级别越高, 影响的操作越多。

一般的查询语句如 select ... from ... ;是小于 2 的锁, 有时会在 v$locked_object 出现。

select ... from ... for update; 是 2 的锁。

当对话使用 for update 子串打开一个游标时,

所有返回集中的数据行都将处于行级(Row-X)独占式锁定,

其他对象只能查询这些数据行,不能进行 update、delete 或 select...for update 操作。

insert / update / delete ... ; 是 3 的锁。

没有 commit 之前插入同样的一条记录会没有反应,

因为后一个 3 的锁会一直等待上一个 3 的锁, 我们必须释放掉上一个才能继续工作。

创建索引的时候也会产生 3,4 级别的锁。

locked_mode 为 2,3,4 不影响 DML(insert,delete,update,select)操作,

但 DDL(alter,drop 等)操作会提示 ora-00054 错误。

有主外键约束时 update / delete ... ; 可能会产生 4,5 的锁。

DDL 语句时是 6 的锁。

以 DBA 角色, 查看当前数据库里锁的情况可以用如下 SQL 语句:

select object_id,session_id,locked_mode from v$locked_object;

select t2.username,t2.sid,t2.serial#,t2.logon_time

老男孩教育-Linux 学院-微信:lidao996(加上备注)37

from vlockedobjectt1,vsession t2

where t1.session_id=t2.sid order by t2.logon_time;

如果有长期出现的一列,可能是没有释放的锁。

我们可以用下面 SQL 语句杀掉长期没有释放非正常的锁:

alter system kill session 'sid,serial#';

如果出现了锁的问题, 某个 DML 操作可能等待很久没有反应。

当你采用的是直接连接数据库的方式,

也不要用 OS 系统命令 killprocessnum 或者 kill -9 process_num 来终止用户连接,

因为一个用户进程可能产生一个以上的锁, 杀 OS 进程并不能彻底清除锁的问题。

记得在数据库级别用 alter system kill session 'sid,serial#';杀掉不正常的锁。

1.6.3.15 oracle的Dataguard有哪几种模式,各有什么差别

DataGuard 有三种模式:

1.最大性能

这是 Data Guard 默认的保护模式。primay 上的事务 commit 前不需要从 standby 上收到反馈信息,该

模式在 primary 故障时可能丢失数据,但 standby 对 primary 的性能影响最小。

2.最大可用

在正常情况下,最大可用模式和最大保护模式一样;在 standby 不可用时,最大可用模式会自动降

低成最大性能模式,所以 standby 故障不会导致 primay 不可用。只要至少有一个 standby 可用的情况

下,即使 primary down 机,也能保证不丢失数据。

3.最大保护

最高级别的保护模式。primay 上的事务在 commit 前必须确认 redo 已经传递到至少一个 standby 上,

如果所有 standby 不可用,则 primary 会挂起。该模式能保证零数据丢失, 一般为保证主库在某个从

库故障后仍能正常运行,最好配置两个及以上的从库。

1.6.3.16 oracle冷备与热备的区别

热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份。

而冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库。

热备份的优点在于当备份时,数据库仍旧可以被使用并且可以将数据库恢复到任意一个时间点。

冷备份的优点在于它的备份和恢复操作相当简单,并且由于冷备份的数据库可以工作在非归档模式

下,

数据库性能会比归档模式稍好。(因为不必将 archive log 写入硬盘)

1.7 Redis

1.7.1 简答

1.7.1.1 简述redis与DB的交互机制

1.7.1.2 redis服务器的连接命令是什么?

1.7.1.3 Redis默认跑什么端口?使用命令行连接redis的默认命令是什么?

1.7.1.4 redis实现主从使用什么命令?

1.7.1.5 是否维护过redis集群,使用什么技术实现的集群?

1.7.1.6 查看redis存活状态及key个数的命令,redis cluster写操作步骤

1.8 Mongodo

1.8.1 简答

1.8.1.1 Mongodb忘记admin密码的解决方法(或mysql忘记root密码)

1.9 SQL sever

1.9.1 选择

1.9.1.1 在SQL Server数据库中,你想得到在products表中最贵的产品的产品名称(Productname)和产品价格(Price),应该使用的SQL查询语句是____AC______

SELECT TOP 1 Productname,Price FROM Products ORDER BY Price desc

SELECT Productname,MAX(price) FROM Products

SELECT Productname

1.9.1.2 SQL Server是一种(C)软件

A操作系统 B语言处理 C数据库管理系统 D服务性程序

1.9.1.3 SQL Server数据库的主数据文件的扩展名为(BD)

A.sql B.mdf C.mdb D.ldf

1.9.1.4 关于sql server 常用的数据类型,以下(C)说法是错误的

A.Image 数据类型可以用来存储图像 B.使用字符数据类型时,可以改变长度信息

C.使用数字数据类型时,可以改变长度信息 D.Bit数据类型为1位长度,可以存储表示是/否的数据

1.9.1.5 使用T-SQL中的(D)语句可以删除数据表格或者视图中的一个或多个记录

A.DEL B.PRUGE C.DELETE D.DROP

1.9.1.6 使用T-SQL对数据的修改是通过(D)语句实现的

A.MODIFY B.EDIT C.REMAKE D.UPDATE

1.9.1.7 下列关于SQL Server数据库日志的说话错误是(D)

日志文件是维护数据库完整性的重要工具 有的对SQL数据库的操作都需要写日志

当日志文件的空间占满时,将无法写日志 当修改数据库时,必先写日志

1.9.2 填空

1.9.2.1 sqlserver数据库,如何限制不同人员的访问权限

根据需要授予角色权限

主数据库文件的扩展名是__mdf___,事务日志文件的扩展名是__ldf__

1.9.2.2 SQL Server下取得当前系统时间的代码为_____select GETDATE()__ ___

1.9.2.3 将SQL Server数据复制到其他的数据库中,包括Access、Oracle、DB2等,采用__ODBC 作为连接机制

1.9.2.4 SQL Server能够识别两种登录认证机制--Windows认证和_____SQL SERVER 认证

1.9.2.5 SQL Server默认的数据库系统管理员的用户名是2005 以前默认是:sa,2008 以后是安装时

设置的,默认为本机的名字___

1.9.2.6 在SQL Server中定义字符型,不论char(n)格式还是varchar(n)格式,其数据长度均不能超过__8000字节

1.9.2.7 在SQL Server表中,一个表只能有一个___主键__,且其值必须唯一

1.9.2.8 在SQL Server中,一根数据库至少包含___数据库主__文件和___日志__文件

1.9.2.9 SQL Server提供了四种数据库备份方式:数据库备份、日志备份、__差异___备份以及文件或文件组备份

1.9.2.10 在检索信息时可以通过WHERE字句指定检索的条件,而且SQL Server还提供了NOT、OR和__and三种运算符

1.9.3 简答

1.9.3.1 SQL-SERVER2008有几种认证方式?这几种认证方式有什么区别?

1、Windows 身份验证和 SQL 身份验证都是数据库身份验证的一种,身份验证是用以识别数据的操

作者身份。不管使用哪种身份验证,只要具有数据库或表的相关权限,那么均可以对数据库及表进

行相关的权限范围之内的增删查改的操作,所操作后的数据都是相互影响;

2、Windows 身份验证和 SQL 身份验证的区别不是权限,因为不管是 Windows 用户(包括服务器本

地用户及活动目录用户)还是 SQL 用户,都需要在 SQL 管理器中进行授予权限后,才能在权限范

围之内操作。楼上所说的 windows 用户登录默认 windows 管理员为数据库的管理员,这种说法是错

误的,SQL2008 在安装时,会让你添加至少一个 SQL 管理员,一般来说都会添加当前的 Windows

用户为默认的数据库管理员,当然也可以添加其它任何 Windows 用户作为数据库管理员(并不是

Windows 管理员就会是数据库管理员),在此也可以决定是否启用 SQL 身份验证,如果启用,那么

则需要为 SQL 用户 SA 设置一个密码。

那么区别在于,一个使用 SQL 单独用户,一个使用 Windows 用户,使用 Windows 用户可以极大的

方便管理员的管理,统一用户身份验证(一般使用活动目录用户,在实践环境中,一般企业都会有

自己的活动目录,如果使用 SQL 用户的话,管理员则需要记忆和维护两套用户名及密码,在这种情

况下就会使用 Windows 用户,SQL 可以直接调用 Windows 用户并授予数据库及表相关权限。那么

在有权限的情况下,管理员可以直接使用自己的域用户来登陆连接 SQL 数据库)

老男孩教育-Linux 学院-微信:lidao996(加上备注)40

老男孩教育-Linux 学院-微信:lidao996(加上备注)

3、只要有相关的权限,所登陆到的数据当然是一样,前面已经说过,身份验证是用以识别数据的操

作者身份,那么不管以何种身份登陆,只要具有相关权限,那么均可以对数据库及表进行相关的权

限范围之内的增删查改的操作。

1.9.3.2 SQL-SERVER2008中,使用一个有标的具体步骤有哪些?

1.用下面的语句选出所的表名:

select name from DBName.Sysobjects where xtype='U'

将上面的 DBName 替换成你的数据库名。

2.通过 Excel 及 UltraEdit 等 工具,把按下面的语句替换 表名 ,生成一系列的修改语句。

增加一个 IDKEY 字段

ALTER TABLE 表名 ADD idkey bigint identity(1,1);

alter table 表名 add constraint pk_表名 primary key (idkey) ;

3.执行这些语句

猜你喜欢

转载自www.cnblogs.com/cuiyongchao007/p/12920641.html
今日推荐