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

数据库

1.1 数据库基础

1.1.1 选择

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

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

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

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

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

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

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

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

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

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

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

1.1.1.6 如下那些不是NoSQL(AD)

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

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

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

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

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_20170七、tab_20170八、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语句,统计七、八、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.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优化能够从哪些方面进行

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

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

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

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

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

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

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

六、数据量比较大的,在设计过程当中,为了减小其余表的关联,增长一些冗余字段,提升查询性能。

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)。

一、STATEMENT 模式(SBR)

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

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

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

二、ROW 模式(RBR)

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

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

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

三、 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 。

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

sql 语句会记录到 binlog 中。

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

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

三、混合模式复制(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 服务过程

一、startup nomount

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

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

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

入了 NoMount 阶段。

二、Mount

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

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

这个阶段,Oracle 肯定数据文件的位置,可是尚未打开这些文件,一旦数据文件的路径被定

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

三、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如何实现数据库的优化

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

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

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

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

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

三、调整数据库 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有几种认证方式?这几种认证方式有什么区别?

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

做者身份。无论使用哪一种身份验证,只要具备数据库或表的相关权限,那么都可以对数据库及表进

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

二、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(加上备注)

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

做者身份,那么无论以何种身份登录,只要具备相关权限,那么都可以对数据库及表进行相关的权

限范围以内的增删查改的操做。

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.执行这些语句

相关文章
相关标签/搜索