美文网首页
面试题系列-数据库笔试题参考答案

面试题系列-数据库笔试题参考答案

作者: 亮仔_c1b5 | 来源:发表于2020-07-13 19:46 被阅读0次

    第 第1 章 数据库章节
    1.1 选择
    1.1.1 Having 子句的作用是(C) 。
    A.查询结果的分组条件 B.组的筛选条件
    C.限定返回的行的判断条件 D.对结果集进行排序
    1.1.2 最常用的一种基本数据模型是关系数据模型,它的表示采用(D )
    A.树 B.网络 C.图 D.二维表
    1.1.3 数据库系统的核心是(B )
    A.数据模型 B.数据库管理系統 C.数据库 D.数据库管理员
    1.1.4 关系表中每一横行称为(B )
    A.元组 B.字段 C.属性 D.码
    1.1.5 数据库管理系统维护中,最重要的是(数据维护)
    程序维护 数据维护 编码维护 硬件维护
    1.1.6 以下那些不是 NoSQL
    mssql memcached mongodb postgresql cassandra couchdb redis
    1.1.7 PHP 和 MYSQL 的联合使用解决了(C )
    A 在 proxy 上处理数据库访问问题
    B 在 www 服务器上处理黑客的非法访问问题
    C 在 www 服务器上处理数据库的访问问题
    D 在 sendmail 邮件系统是上处理数据库的访问问题
    1.1.8 以下哪个端口为远程登陆默认端口(3306)
    1433 3389 3306

    1.2 填空
    1.2.1 如何通过 shell 登录 mysql ?(mysql -u -p -h -P )
    1.2.2 数据库触发器能监控的触发事件有 数据库触发器能监控的触发事件有 ———— 监视地点(table) 监视事件(insert/update/delete) 触 触
    发时间(after/before) 触发事件(insert/update/delete) ————
    1.2.3 数据库系统的组成部分有:硬件、软件、数据库、用户(数据库管理员)
    1.2.4 实现多台交换机或集线器连接在一起只能通过级联的方式(级联复制)
    1.2.5 远程连接 mysql 数据库的命令是什么mysql -u -p -h -P
    1.2.6 当删除一个数据库后,仅能用binlog , 物理备份 数据重建以前的数据库中 的数据
    1.2.7 SQL 中定义别名的三种方法是___ 列 AS 别名___ 列 别名_____ 别名= 列________________
    1.2.8 mysql 服务器默认的监听端口是:3306____ ,mysql 的配置文件是:/etc/my.cnf_______
    1.3 简答
    1.3.1 简述 mysql 单机安装过程
    1.在官网下载二进制 包

    1. 解压,并修改/etc/my.cnf 文件
      3.初始化数据
      4.启动
      1.3.2 mysql 登录命令
      mysql -u -p -h -P
      1.3.3 说明数据库内存结构中 SGA 和 和 PGA 的组成,以及这两个内存区存放信息的区别
      SGA 区由数据缓冲区、共享池、重做日志缓冲区、大型池、JAVA 池构成;PGA 区由排序区、私有
      SQL 区以及堆栈构成。
      SGA 区是由 Oracle 分配的共享内存结构,包含一个数据库实例共享的数据和控制信息。当多个用户
      同时连接同一个实例时,SGA 区数据供多个用户共享,所以 SGA 区又称为共享全局区。用户对数
      据库的各种操作主要在 SGA 区中进行。该内存区随数据库实例的创建而分配,随实例的终止而释
      放。PGA 区是在用户进程连接数据库,创建一个会话时,由 Oracle 为用户分配的内存区域,保存当
      前用户私有的数据和控制信息,因此该区又称为私有全局区。每个服务器进程只能访问自己的 PGA
      区,所有服务器进程 PGA 区总和即为实例的 PGA 区的大小。

    1.3.4 说明数据库表空间的种类,以及不同类型表空间的作用
    共享表空间,独立表空间
    共享表空间是一个库的数据都存放一个文件内,独立表空间是一个表一个 ibd 与 frm 文件
    1.3.5 mysql 表中的中文字体乱码,原因可能是什么?如何修改
    字符集编码问题
    ALTER TABLE 表名 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
    1.3.6 mysql 忘记密码如何操作
    --skip-grant-tables ----> 跳过授权表(mysql.user)
    --skip-networking ----> 跳过网络用户连接
    1.3.7 请写出目前市场上最常见的 2-5 种关系型数据库厂家,并注明他们产品的最新版和你熟悉的或
    者解除过的版本:
    厂家: 最新版本: 熟悉的版本: 接触过的版本
    mysql 5.6 5.7
    Oracle、MsSQL(SQL Server)、PG
    1.3.8 如何修改 mysql 的 的 root 密码
    set password for 用户名@localhost = password('新密码');
    1.3.9 请举出几个你熟悉的关系型数据库管理系统和非关系型数据库管理系统,非关系型数据库相比 请举出几个你熟悉的关系型数据库管理系统和非关系型数据库管理系统,非关系型数据库相比
    之下有什么不同之处(好处和不足)?
    关系型:mysql,Oracle
    非关系型:redis,mongodb
    非关系快,操作简单,有几率丢数据
    1.3.10 存储过程与函数的区别
    存储过程是用户定义的一系列 sql 语句的集合,涉及特定表或其它对象的任务,用户可以调用存储
    过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户
    表。
    1.3.11 什么是视图,游标是什么?
    视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,视图通常是
    有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,
    相比多表查询。

    游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结
    果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理
    数据的时候,游标显得十分重要。
    1.3.12 你对数据库了解吗?你们公司的数据库是什么样的?
    我们公司是高可用 MySQL 及主从架构与读写分离,使用的 MySQL
    1.3.13 你们公司数据库最大连接数是多少?
    目前了解并发不到 2000
    1.3.14 MySQL 数据库 storage engine 中的 myisam 、innodb 有什么差别
    myisam 是表级锁,不支持事务,支持温备
    innodb 是行级锁,支持事务,自动故障恢复,外键,热备
    1.3.15 请列举几个常见的 nosql db 你最熟悉那个?
    redis
    memcached
    mongodb
    1.3.16 简述 where 和 和 having 的区别:
    Where 子句是用来指定 "行" 的条件的,而 Having 子句是指定 “组” 的条件的
    所以 Where 子句 = 指定行所对应的条件
    所以 Having 子句 = 指定组所对应的条件
    当在 Where 子句和 Having 子句中都可以使用的条件,从语句的执行效率来看,最好写在 Where 子
    句中。
    在使用 Count 函数等对表中的数据进行聚合操作时,DBMS 内部会进行排序处理,而排序操作会增
    加机器的负担,减少排序的行数,可以增加处理速度。
    使用 Where 子句指定条件时,由于排序之前就对数据进行了过滤,所以能够减少排序的数据量。但
    是 Having 子句是在排序之后才对数据进行分组的,因此与前者相比,需要排序的数据量就要多得
    多。
    第三,使用 Where 子句更具速度优势的另一个理由是,可以对 Where 子句指定条件所对应的列创建
    索引,这样可以大幅提高处理速度。
    第四,Where 子句中不能使用聚合函数,而 Having 子句中可以。

    第 第2 章 SQL 语句
    2.1 选择
    2.1.1 DELETE FROM S WHERE 年龄>60 语句的功能是(删除 S 表的年龄列)
    从 S 表中彻底删除年龄大于 60 岁的记录
    S 表中年龄大于 60 岁的记录被加上删除标记
    删除 S 表
    删除 S 表的年龄列
    2.1.2 使用什么命令可以清除表中所有的内容? (C)
    A.INSERT B.UPDATE C.DELETE D.TRUNCATE
    2.1.3 以下哪个表不用于 mysql 的权限管理(C )
    A.HOST B.DB C.COLUMNS_PRIV D.MANAGER
    2.1.4 在 在 SOL 语法中,用于更新的命令是:( B)
    A.INSERT B.UPDATE C.DELETE D.CREATE
    2.1.5 下面命令中不是数据库用来 DML 操作是( select drop )
    A.SELECT B.UPDATE C.INSERT D.DROUP
    2.1.6 SQL 语言中,删除一个表的命令是(B )
    A.DELETE B. DROP C.CLEAR D.RI MORE
    2.1.7 MySQL 语句中删除一个表(假如表名称是 t1 )的命令是 drop table t1________
    rm table t1 delete table t1 drop table t1 truncate t1
    2.1.8 下面哪个语句将 user 表的名称变更为 userinfo ?(rename user to userinfo rename user as
    userinfo )
    alter table user rename as userinfo rename to userinfo from user
    rename user to userinfo rename user as userinfo
    2.1.9 sql 语句中修改表结构的命令是 (alter table)
    modify table modify structure alter table alter structure

    2.1.10 带有(FOR UPDATE )子句的 select 语句可以在表的一行或多行上防止排他锁
    FOR INSERT FOR UPDATE FOR DELETE FOR REFRESH
    2.1.11 在 在 SQL 中,建立表用的命令是(CREATE TABLE )
    CREATE SCHEMA CREATE TABLE CREATE VIEW CREATE INDEX
    2.1.12 SQL 语言是(关系数据库 )语言
    层次数据库 网络数据库 关系数据库 非数据库
    2.1.13 SQL 语言中,条件年龄 BETWEEN 15 AND 35 表示年龄在 15 至 至 35 之间,且(包括 15 岁和
    35 岁)
    包括 15 岁和 35 岁 不包括 15 岁和 35 岁
    包括 15 岁但不包括 35 岁 包括 35 岁但不包括 15 岁
    2.1.14 在数据库管理系统能实现对数据库中的数据查询、插入、修改和删除,这类功能称为(数据 在数据库管理系统能实现对数据库中的数据查询、插入、修改和删除,这类功能称为(数据
    操纵功能)
    数据定义功能 数据管理功能 数据操纵功能 数据控制功能
    2.1.15 下列执行数据的删除语法在运行时不会产生错误信息的选项是(Delete * from pat_visit
    Where inp_no = '6' )
    Delete * from pat_visit Where inp_no = '6' Delete From pat_visit Where inp_no ='6'
    Delete pat_visit Where inp_no = '6' Delete pat_visit Set inp_no = '6'

    2.2 填空
    2.2.1 查询病人表中的所有内容,并以住院号倒序排序 SQL 代码为:Select * from pat_visit _order
    by haoma ;desc
    2.2.2 查询一根病人的信息。但忘记了该病人的名字,只记得该病人姓“张”,而且名字中有一个 查询一根病人的信息。但忘记了该病人的名字,只记得该病人姓“张”,而且名字中有一个
    “美”字,SQL 代码为:Select * from Pat_visit where name__like " 张"____
    2.2.3 在 在 SQL 中,用子句 ————DISTINCT —————— 消除重复出现的元组。
    2.2.4 标准的 SQL 语言语句类型可以分为— —DML 、DQL 、DDL 、DCL ——
    2.2.5 SQL 语句中的查询语句是 select (DQL )
    2.2.6 字符转换 字符转换 日期函数select date_format(now(), '%Y-%m-%d'); ___
    2.2.7 DML 包括update
    delete ____ instert
    2.2.8 在 在 SQL 中,建立数据库的命令是______ ,建立视图的命令是_______ ,建立索引的是________
    create database 名字
    create view v as (select * from table1) union all (select * from table2);
    alter table student add index idx_name(name);
    2.2.9 在 在 SQL 中,用insert 命令向表中输入数据,用select
    命令检查和查询表中的内容
    select
    select * from table_name;
    2.2.10 在 在 SQL 中,用update
    命令可以修改表中的数据,用_alter____ 命令可以修改表的结构
    2.2.11 在 在 SQL 中,Alter 命令可以有两个选择项,______ 子命令用于修改表的性质,____ 子命令用
    于增加列
    alter table change/modify
    alter table add
    2.2.12 在 在 SQL 中,用_delete 命令可以从表中删除行,用_drop____ 命令可以从数据库中删除表
    2.2.13 在 在 SQL 中,控制用保留字__NULL____ ,非空值用保留字_NOTNULL
    2.2.14 SELECT 命令中,表示条件表达式用____ 字句,分组用_____ 字句,排序用____ 字句
    where group by order by

    2.2.15 在 在 ORDER BY 字句的选项中,DESC 代表___ 大到小__ 序输出,若省略时,代表从 从 小到大
    __ 序输出
    2.2.16 合并多个查询结果集,应使用union
    关键字
    2.3 简答
    2.3.1 在 在 mysql 客户端查询工具中,如何获取当前的所有连接信息。
    show full processlist
    2.3.2 如何利用 crontab 定期执行 mysql 语句。
    mysql -uroot -p -e 'show databases;'
    2.3.3 查看缺省引擎
    select @@default_storage_engine;
    2.3.4 列举 SQL 常用命令:
    use database
    show processlist;
    show tables;
    show variables like 'xx';
    select * from database.table_name where;
    explian select * from table;
    2.3.5 Mysql 查看 order 表的第 3 条到第 7 条的数据。
    select * from order limit 2,5;
    2.3.6 Mysql 授予用户 admin 通过 IP 为 为 192.168.0.10/24 对数据库的全部授权。
    grant all on . to admin@'192.168.0.%' identified by '123';
    2.3.7 对 对 order 这个表的 name 字段数据进行 base64 编码
    select to_base64(name) from order
    2.3.8 为什么说 group by 和 和 order by 操作的是代价高昂的?
    在没有合理索引情况下,需要大量 CPU 时间来做排序和分组。
    2.3.9 写分组浏览,分组求和,分组求最大值的 sql 语句,每个只能用 1 句话
    浏览:select group_concat(字段名 1) from db group by 字段 2;

    求和:select sum(字段名 1) from db group by 字段名 2;
    最大值:select max(字段名 1) from db group by 字段名 2;
    2.3.10 如何列出所有数据库?(show databases; )
    2.3.11 如何查看表内所有数据?(select * from table; )
    2.3.12 如何知道表内行数?(select count(*) from table; )
    2.3.13 用 用 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 chbh;
    Select csbh,sum(csbh) as CSBH_COUNT from table group by chbh;
    2.3.14 用 用 SQL 命令实现给主键添加索引
    alter table a add primary key pri(id);
    2.3.15 删除如下表中年龄大于 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) auto_increment primary key,
    name varchar(200),
    age int(11),
    city varchar(200))
    engine=innodb;


    insert into user_table(name,age,city) values('Tom',20,'bj'),
    ('Jimmy',50,'nj'),
    ('Zhou',33,'sh'),
    ('Jing',30,'nj'),
    ('Nanan',28,'sh');


    delete from user_table where age>30 and city='nj';
    2.3.16 根据上题的表,计算 根据上题的表,计算 出每个城市的人数和平均年龄
    select city,count(name),AVG(age) from user_table group by city;
    2.3.17 查询下表平均成绩大于 60 分的同学的学号 s_d) 和平均成绩(score)
    表 Student 学生表
    S_id Sname Ssex
    1 Xiaoli 男
    2 xiaowang 女
    3 zhanglong 男
    4 zhaohu 女
    表 Course 课 程 表
    C_id Cname T_id
    1 语文 1
    2 历史 3
    3 数学 2
    4 政治 4
    表 SC 成绩表
    sid C_id score
    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 Student(
    S_id int primary key auto_increment,
    Sname char(100),
    Ssex char(100))
    engine=innodb;


    insert into Student(S_id,Sname,Ssex) values(1,'Xiaoli','男'),
    (2,'xiaowang','女'),
    (3,'zhanglong','男'),
    (4,'zhaohu','女');


    create table Course(
    C_id int primary key auto_increment,
    Cname char(100),
    T_id int)
    engine=innodb;


    insert into Course(C_id,Cname,T_id) values
    (1,'语文',1),
    (2,'历史',3),
    (3,'数学',2),
    (4,'政治',4);


    create table SC(
    sid int,
    C_id int,
    score int)
    engine=innodb;


    insert into SC(sid,C_id,score) values
    (1,2,99),
    (3,4,88),
    (1,3,55),

    (2,1,77);

    create table Teacher(
    T_id int auto_increment primary key,
    Tname char(100))
    engine=innodb;


    insert into Teacher(T_id, Tname) values
    (1,'zhangsan'),
    (2,'lisi'),
    (3,'wangwu'),
    (4,'zhaoliu');


    mysql> select sid,c from (select sid,avg(score) c from SC group by sid) a where c>60;
    +------+---------+
    | sid | c |
    +------+---------+
    | 1 | 77.0000 |
    | 2 | 77.0000 |
    | 3 | 88.0000 |
    +------+---------+


    查询上所有同学的学号姓名、选课数、总成绩
    mysql> select s.sname,s.S_id,count(s.S_id),sum(c.score) from Student s join SC c on s.S_id=c.sid group by
    s.S_id;
    +-----------+------+---------------+--------------+
    | sname | S_id | count(s.S_id) | sum(c.score) |
    +-----------+------+---------------+--------------+
    | Xiaoli | 1 | 2 | 154 |
    | xiaowang | 2 | 1 | 77 |
    | zhanglong | 3 | 1 | 88 |
    +-----------+------+---------------+--------------+
    2.3.18 有两个表 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 join B on A.ID = B.ID;
    Tim football
    Jimmy tennis
    John soccer
    2.3.19 写出 MySQL5.6 新建用户 dev ,授权 op 库 库 test 表所有权限,任何地址的访问权限 SQL
    grant all on op.* to dev@'%' identfied by '123';
    2.3.20 写出一条 sql 语句:取出表 A 中满足时间 2006 年 年 1 月 月 1 日至 2006 年 年 1 月 月 31 日的记录(时间
    为 字段为 time )
    select * from A where time between '2006-01-01' and '2006-01-31';
    2.3.21 写出一条 SQL 语句:清除 A 表中的数据,但不删除表
    truncate table A;
    2.3.22 查找在机关单位任职的人员姓名、性别、出生日期、单位名称、并且查询结果按照单位排 查找在机关单位任职的人员姓名、性别、出生日期、单位名称、并且查询结果按照单位排
    序;
    select 姓名,性别,出生日期,单位名称 from table order by 单位名称;
    2.3.23 查找性别为女的少数民族的非中共人员姓名、民族、出生日期;
    select 姓名,民族,出生日期 from table where 性别=女 and 面貌!=中共人员
    2.3.24 在事业单位查找具有研究生学历博士学位的在任人员,要求显示姓名、性别、出生日期、政 在事业单位查找具有研究生学历博士学位的在任人员,要求显示姓名、性别、出生日期、政
    ; 治面貌、单位名称、职务名称、批准任职日期,同时结果按照批准任职日期升序;
    select 姓名,性别,出生日期,政治面貌,单位名称,职务名称,批准任职日期 from db1 order by 批准任职日
    期;
    2.3.25 查询在不同单位性质类别的单位任职的人数;
    select count(*) from db group by 单位;
    2.3.26 请 请 写出下列语句的执行结果:select replace (ltrim(rtrim('abc3453436')),'34','abc')
    abcabc5abc36

    2.3.27 写一个查询语句,从数据库表中取出年龄 age 最大的十个人
    select * from table order by age desc limit 10;
    2.3.28 编写 SQL 语句。统计计算机系 58 班每个月过生日的男生人数,井按月进行排序
    表 dept (系):
    dept_id(系编号),dept_name(系名称)
    表 class(班级):
    class_id(班编号),dept_i(系编号),class_name(班名)
    表 setdent(学生):
    setdent_id(学生编号),class_id(班编号), sex(性别),birthday(生日)
    select dept.dept_name,class.class_name,count(student_id) date_format(student.birthday,%m)
    from dept
    join calss
    on dept.dept_id=class.dept_i
    join student
    on class.calss_id=student.class_id
    where student.sex=’m’
    group by date_format(student.birthday,%m)
    order by date_format(student.birthday,%m)
    desc ;
    2.3.29 现有 T 表:(字段:ID ,NAME ,ADDRESS ,PHONE ,LOGDATE )
    查询 T 表中地址中包含“北京”的 SQL 语句
    select * from T where ADDRESS like '%北京%';
    插入一条数据到 T 表中
    insert into T(ID,NAME,ADDRESS,PHONE,LOGDATE) value(1,2,3,4,5);
    请写出将 T 表中第 3~5 行数据列出来的 SQL 语句
    select * from T limit 3,5;
    2.3.30 Mysql 创建数据库的命令,创建表的命令,插入语句的命令?
    create database
    create table
    insert into

    2.3.31 数据库中的两个数据库表,定义如下:
    表名 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 applyNo , applyDate from cardApply where applyNo=’1111’
    查询同一个 ID 卡号有两条以上记录的 ID 卡号及记录个数
    Select applyNo,count(applyNo) from cardApply group by applyNo having count(applyNo)>2;
    将 ID 卡号为 11111 的记录在两个表中的申请状态均改为 02
    Update cardApply set state=‘02’ where applyNo=‘1111’;
    删除 cardApplyDetall 表中所有姓李的记录
    Delete from cardApplyDetall where name like ‘李%’;
    假如某一天有 10 个人申请,另外一天有 20 个人申请,还有一天有 30 个人申请,查询出申请卡最多
    的那一天日期
    Select applyDate,count(applyNo) from cardApply group by applyDate order by count(applyNo) desc limit
    1;
    2.3.32 第一题
    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 comment ‘学号’,
    Sname varchar(64) not null comment ‘姓名’,
    Sage tinyint unsigned not null default 0 comment ‘年龄’,

    Ssex enum(‘m’,’f’) not null default ‘m’ comment ‘性别’
    )engine=innodb charset=utf8 comment ‘学生表’;
    查询姓张的学生名单
    Select * from student where sname like ‘张%’;
    查询所有同学的学号、姓名、选课数、总成绩
    Select s.s# ,s.sname,count(C#),sum(sc.score) from student as s
    Join sc
    On s.s#=sc.s#
    Group by s.s#,s.sname
    查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩
    Select s.sname,sum(sc.socre) from student as s
    Join sc
    On s.s#=sc.s#
    Join course as co
    On sc.c#=co.c#
    Join teacher as te
    On co.t#=te.t#
    Where te.tname=’叶平’
    2.3.33 第二题
    第一题中的教师表中哪个字段可以建立唯一索引?写出建立唯一索引的语句
    Alter table teacher add unique key idx(t#);
    2.3.34 第三题
    如何检查第一题中学生表在数据库中所占的空间大小
    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 -uroot -p123 ",table_schema,"
    ",table_name," >/tmp/",table_schema,"_",table_name,".sql" )
    FROM information_schema.tables
    WHERE table_schema NOT IN('information_schema','performance_schema','sys')
    INTO OUTFILE '/tmp/bak.sh' ;

    2.3.35 部门表:t_dept (deptid ,deptname )工资表:t_salary (id,employeeid,deptid,salary )要求:
    于 查出员工的平均工资大于 3000 的部门名称
    Select td.deptname,avg(ts.salary) from t_dept as td join t_salary as ts
    On td.deptid=ts.deptid
    Group by td.deptname
    Having avg(ts.salary)>3000;
    2.3.36 student 表(Sno ,Sname ,Sage ,Ssex )Course 表(Cno ,Cname ,Ccredit )SC 表(Sno, ,
    Cno,grade )
    建表 student、course、SC(略)
    查询年龄小于 20 的学生学号、年龄,并显示
    Select s.sno,s.sage from student as s where s.sgae<20
    查询年龄不在 20-23(包括 20,23)的学生的成绩
    Select s.sname,s.sage,sc.score from student as s
    Join sc
    On s.sno=sc.sno
    Where s.sage<20
    Union all
    Select s.sname,s.sage,sc.score from student as s
    Join sc
    On s.sno=sc.sno
    Where s.sage>23
    2.3.37 给出查询表 A (ID,Name )中存在 ID 重复三次以上的记录的 SQL 语句
    Select id ,count(id) from a group by id having count(id)>3;
    2.3.38 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 neutron. Ipallocations set
    ip_address=’ 202.113.14.92’ where ip_address=’ 10.4.182.36’”;
    2.3.39 写出以下 SQL 语句(涉及到表名和字段自定义)
    查询某一个表前 20 条记录
    Delete from t where id<21;
    某公司从下个月起,每个人工资在原有基础上上涨 10%

    Update t set salary=salary+salary*.01 where date=date_format(now(),%m)+1;
    删除某个表中日期为 2017-01-01 以前的数据
    Delete from t where date<’ 2017-01-01’;
    新增一条记录
    Insert into t values(xxx)
    备份数据库
    Mysqldump –uroot –pxxx –A –master-data=2 –single-transaction –R –E –triggers >/bak.sql
    2.3.40 有三张表分别为客户表 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 date_format(a. acc_opendate,%m),count(c. cust_id)
    From customers as c join accounts as a
    On c. cust_id=a. cust_id
    Group by date_format(a. acc_opendate,%m)
    列出上个月开通客户列表,并输出这些客户所具有的账户和用户数量
    Select a.acc_name,count(u. user_id) from accounts as a
    Join users as u
    On a. cust_id=u. cust_id
    Where date_format(a. acc_opendate,%m) = date_format(now(),%m)-1;
    统计三个月内登录过的客户数量
    Select lost_login_date,count(user_id) from users
    Where date_format (lost_login_date,%m) in (date_format(now(),%m),date_format(now(),%m)-1,
    date_format(now(),%m)-2)
    统计老客户今年开通账户的数量,老客户是指今年以前开通的账户
    Select cust_opendate,count(cust_id) from customers
    Where date_format (cust_opendate,%y)> date_format (now(),%y)
    2.3.41 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=now() where name=’张三’;
    (c) 请写出删除名为张四的全部记录
    Delete from user where name=’张四’
    2.3.42 创建一个用户并赋 创建一个用户并赋 予权限
    Grant all on . to root@’10.0.0.%’ indentified by ‘123’;
    2.3.43 创建表空间 neuspace, 数据文件命名为 neudata.dbf, 存放在 d:\data 目录下,文件大小为
    200MB ,设为自动增长,增量 5MB ,文件最大为 500MB
    Create tablespace neuspace datafile ‘d:\data\neudata.dbf’ size 200MB AUTOEXTEND ON NEXT 5M
    MAXSIZE 500M;
    2.3.44 以系统管理员身份登录,创建账号 tom ,设置 tom 的默认表空间为 neuspace.为 为 tom 分配
    connect 和 和 resource 系统角色,获取基本的系统权限。然后为 tom 分配对用户 scott 的表 emp
    的 的 select 权限和对 SALARY ,MGR 属性的 update 权限
    Create user tom identified by tom default tablespace account;
    grant connect, resource to tom;
    grant select on scott.emp to tom
    grant update on SALARY.MGR to tom
    2.3.45 按如下要求创建 class
    属性 类型(长度) 默认值 约束 含义
    CLASSNO 数值(2) 无 主键 班级编号
    CNAME 变长字符(10)无 非空 班级名称
    Create table class(classno int(2) not null primary key auto_increment comment ‘班级编号’,
    CNAME varchar(10) not null comment ‘班级名称’)

    2.3.46 学生表有四个字段:学号、姓名、年级、学分,统计出按年级降序同名同姓的数据情况(写 学生表有四个字段:学号、姓名、年级、学分,统计出按年级降序同名同姓的数据情况(写
    出 出 sql 语句)
    Select name ,count(name) from user group by name order by class desc ;
    2.3.47 在表 class 的 的 CNAME 属性上创建索引 class_sname_idx
    Alter table class add index class_sname_idx(CNAME);
    2.3.48 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 a.学科,avg(b.成绩) from student as a join course b on a.id=b.code group by a.学科;
    查询所有学生各科成绩,显示栏位为姓名、学号、学科、成绩,并以学号与学科排序,没有成绩的
    学生也需要列出,sql 怎么编写
    Select a.name,a.code,b.学科,b.成绩 from student as a join course as b on a.code=b.id order by a.学号,b.学

    查询出单科成绩最高的,显示栏位为:姓名、学号、学科、成绩,sql 怎么编写
    Select a.name,a.code,b.id,b. 学科,max(b.成绩) from from student as a join course as b on a.code=b.id
    Group by b. 学科
    列出每位学生各科成绩,要求输出格式:姓名、学号、语文成绩、数学成绩、英语成绩,sql 怎么写
    Select a.name,a.code,b.id,

    Case when b.学科=’ 语文’ then b.成绩 end as ‘语文成绩’,
    Case when b.学科=’ 数学’ then b.成绩 end as ‘数学成绩’,
    Case when b.学科=’ 英语’ then b.成绩 end as ‘英语成绩’,
    from student as a join course as b on a.code=b.id
    Group by 姓名,学号;
    2.3.49 假如有 A****和 和 B****两 两 个表,A**** 表中包括 ID**** ,COL1**** ,COL2****, ,
    COL3**** 等栏位,B**** 表中包括 ID**** ,COL1**** ,COL2**** ,COL4****, ,
    COL5**** 等栏位,现需要把 B**** 中的 CLO1**** ,COL2**** 内容更新到 A****表 表
    COL1**** ,COL2**** 中,ID**** 为关键字段,要求只写一个 SQL
    2.3.50 不借助第三方工具,如何获得 SQL 的执行计划
    第 第3 章 MySQL 索引
    3.1 选择
    3.1.1 在 在 SQL 数据库一个班级表里只记录了 100 位同学的情况,那么对该表建立索引文件的描述正
    确的是( 不适宜,因为对少林记录的表进行索引实际上会产生不利的影响)
    一定要,因为索引有助于加快搜索记录的进程
    不适宜,因为对少林记录的表进行索引实际上会产生不利的影响
    一定要,因为索引对于任何数据库表都是必要的
    没有必要,因为建立索引对任何数据库的性能都没有影响
    3.2 简答
    3.2.1 索引的好处和坏处是什么?
    好处.在适合的索引下,查询快.
    坏处.索引需要成本去维护.
    3.2.2 数据库中,哪些列需要创建索引,哪些列不适合创建索引
    主键索引,唯一列,联合列等,
    3.2.3 Mysql 列出数据库use 切换当前用户连接的数据库_ 库名____
    3.2.4 请问以下一些查询语句是否用到该索引? 对 对 last_name 与 与 first_name 做索引
    SELECT * FROM customer_master WHERE first_name = 'Ed';

    SELECT * FROM CUSTOMER_MASTER WHERE last_name LIKE '%rane' AND first_name = 'Ed';
    SELECT * FROM CUSTOMER_MASTER WHERE last_name = 'Crane' AND first_name LIKE '%Ed';
    SELECT * FROM CUSTOMER_MASTER WHERE last_name LIKE 'Crane%' ORDER BY
    first_name,last_name;
    SELECT * FROM CUSTOMER_MASTER WHERE last_name='Crane' OR first_name='ED';
    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 的速度,
    第 第4 章 MySQL 优化
    4.1 选择
    4.1.1 顺序表(2,6,8,10,12,15,16,18,24,28,32 )中,用二分法查找关键码值,所需的关键词比较次数为
    ( (C )
    A. 3 B. 4 C.5 D. 6
    4.1.2 从二叉树的任一结点出发到根的路径上,所经过的结点序列必按其关镇字降仔指列。(C )
    A 二叉排序树 B.大顶堆 C 小顶堆 D.平衡二叉树
    4.2 填空
    4.2.1 在总计函数中,传回非 NULL 值的字段数目的函数名称是COUNT()
    4.3 简答
    4.3.1 若果一个 sql 查询语句很长,执行速度慢,你会想到哪些优化的方法?
    查询不需要的记录,使用 limit 解决;
    多表关联返回全部列,指定 A.id, A.name, B.age;
    总是取出全部列,SELECT * 会让优化器无法完成索引覆盖扫描的优化。
    优化 count() 查询
    优化关联查询

    优化子查询(即嵌套查询)
    优化 GROUP BY 和 DISTINCT
    优化 LIMIT 分页
    优化 UNION 查询
    4.3.2 数据库里有些数据会反复被查询,问有什么好方法提高效率?
    建立索引
    分区(如 MySQL,按时间分区)
    尽量使用固定长度字段和限制字段长度(如 varchar(10))
    增加缓冲区
    如果设计表的级联,不同的表存储在不同磁盘上,以增加 I/O 速度
    优化 sql 语句,减少比较次数
    限制返回条目数(mysql 中使用 limit)
    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 的记录总数
    4.3.4 什么是跨站脚本攻击,有何危害,sq| 注入攻击如何防范
    XSS 跨站脚本攻击:两种情况。一种通过外部输入然后直接在浏览器端触发,即反射型 XSS;还有
    一种则是先把利用代码保存在数据库或文件中,当 web 程序读取利用代码并输出在页面上时触发漏
    洞,即存储型 XSS。DOM 型 XSS 是一种特殊的反射型 XSS。
    跨站点脚本(XSS)允许攻击者通过利用因特网服务器的漏洞来发送恶意代码到其他用户。攻击者
    利用跨站点脚本(XSS)攻击向那些看似可信任的链接中注入恶意代码。当用户点击了链接后,内
    嵌的程序将被提交并且会在用户的电脑上执行,这会使黑客获取。
    危害:前端页面能做的事它都能做。(不仅仅盗取 cookie、修改页面等)
    漏洞防范
    (1) 特殊字符 HTML 实体转码。最好的过滤方式是在输出和二次调用的时候进行加 HTML 实体

    一类的转码,防止脚本注入。
    (2) 标签事件属性黑名单。特殊字符容易被绕过,所以还得加标签事件得黑名单或者白
    名单,这里推荐使用白名单的方式,实现规则可以直接使用正则表达式来匹配,如果匹配到的事件
    不在白名单列表,就可以直接拦截,而不是过滤为空。
    4.3.5 在工作中,一台线上 MSSQL 数据库查询数据突然变得异常缓慢,如果交给你排查,请写出排
    查思路
    首先应该从系统级别来排查。先找出到底哪里慢,是特定操作慢呢,还是所有操作都慢了。
    既然是突然变慢,那么就是说之前还是比较快的。自从某个特殊事件发生后,慢了下来。特殊事件
    一般包括:
    1、程序做了修改。
    2、突然有大数据量的系统访问。
    3、某些不常用功能突然启用,或大量访问。
    4、某些硬件出了功能性问题。
    对于系统整体变慢,基本上还是先查系统日志。查最近的系统更新日志。查看磁盘剩余容量。硬件
    是否由异常。
    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';
    4.3.7 列出您认为 sql 优化可以从哪些方面进行
    1、sql 语句的执行计划是否正常。
    2、减少应用和数据库的交互次数、同一个 sql 语句的执行次数。
    3、数据库实体的碎片的整理(特别是对某些表经常进行 insert 和 delete 动作,尤其注意,索引字段
    为系列字段、自增长字段、时间字段,对于业务比较频繁的系统,最好一个月重建一次)。 4、减
    少表之间的关联,特别对于批量数据处理,尽量单表查询数据,统一在内存中进行逻辑处理,减少
    数据库压力(java 处理批量数据不可取,尽量用 c 或者 c++ 进行处理,效率大大提升)。
    5、对访问频繁的数据,充分利用数据库 cache 和应用的缓存。
    6、数据量比较大的,在设计过程中,为了减少其他表的关联,增加一些冗余字段,提高查询性能。
    4.3.8 某个系统 sql 忽然变慢,影响了系统的性能,但通过 sqlplus 或者 PL/SQL developer 运行改
    sql ,速度却很快,请问产生此情况的可能原因,并简述解决办法
    listener.log 过大导致

    第 第5 章 MySQL 集群
    5.1 选择
    5.1.1 下面对 Linux 下 下 mysqldump 备份命令及参数描述正确的是(mysqldump -h ip -u -p
    DBNAME>back.sql )
    mysqldump -h ip -u -p DBNAME>back.sql mysqldump -P ip -h DBNAME>back.sql
    mysqldump -u ip -P DBNAME>back.sql mysqldump -h ip -u DBNAME>back.sql
    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 主从结构的主数据库中不可能出现以下哪种日志____中继日志____
    错误日志 事务日志 中继日志 redo log
    5.1.3 对于数据库备份正确的做法是:( 停止数据库开始备份)
    停止业务开始备份 停止数据库开始备份 不需要停止备份 根据情况而定
    5.2 填空
    5.2.1 如何用 mysql 命令进行备份和恢复?以 Lest 库为例,创建一个备份,并再用此备份进行恢复
    mysqldump -uroot -p123456 –B Lest > lest.sql
    source /backup/lest.sql
    5.2.2 Mysql 备份工具mysqldump__xtrabackup
    5.3 简答
    5.3.1 每天凌晨 2 点对 mfdata 数据库进行备份,备份到/data/mysql/ 下,并以时间为备份名。
    Mysqldump –uroot –p123 –B mfdata >/data/mysql/mfdata_ $(date +%F).sql
    5.3.2 mysql 备份命令
    本地备份 mysqldump -uroot -p -S /tmp/mysql.sock
    远程备份 mysqldump -uroot -p -h 10.0.0.51 -P3306

    5.3.3 说明一下 mysql 主从复制原理并描述一下部署主从复制的步骤
    1.change master to 时,ip pot user password binlog position 写入到 master.info 进行记录

    1. start slave 时,从库会启动 IO 线程和 SQL 线程
      3.IO_T,读取 master.info 信息,获取主库信息连接主库
    2. 主库会生成一个准备 binlog DUMP 线程,来响应从库
    3. IO_T 根据 master.info 记录的 binlog 文件名和 position 号,请求主库 DUMP 最新日志
    4. DUMP 线程检查主库的 binlog 日志,如果有新的,TP(传送)给从从库的 IO_T
    5. 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 文件。
    6. relay-log 会有自动清理的功能。
      5.3.4 备份 Mysql 的所有数据库。
      mysqldump -u username -p -all-databases > BackupName.sql
      5.3.5 对 对 mysql 数据库 test 进行备份和恢复
      mysqldump -uroot -p123456 -P3306 test -t > 0106.sql
      create database test
      source /backup/0106.sql
      5.3.6 如何备份某个库,某个库下的某个表,某个库排除某个表
      mysqldump -u username -p dbname table1 table2 ...-> BackupName.sql
      dbname 参数表示数据库的名称;
      table1 和 table2 参数表示需要备份的表的名称,为空则整个数据库备份;
      BackupName.sql 参数表设计备份文件的名称,文件名前面可以加上一个绝对路径。通常将数据库被
      分成一个后缀名为 sql 的文件;
      --ignore-table 选项 mysqldump 备份数据库时忽略某个表
      5.3.7 如何恢复备份的数据,过程,注意事项?
      1 mysql -u root -p [dbname] < backup.sq
      2 还原直接复制目录的备份 通过这种方式还原时,必须保证两个 MySQL 数据库的版本号是相同
      的。MyISAM 类型的表有效,对于 InnoDB 类型的表不可用,InnoDB 表的表空间不能直接复制。

    5.3.8 主从概念,如何配置,管理 主从概念,如何配置,管理 ,监控,有确定。主从如何同步的?
    1.change master to 时,ip pot user password binlog position 写入到 master.info 进行记录

    1. start slave 时,从库会启动 IO 线程和 SQL 线程
      3.IO_T,读取 master.info 信息,获取主库信息连接主库
    2. 主库会生成一个准备 binlog DUMP 线程,来响应从库
    3. IO_T 根据 master.info 记录的 binlog 文件名和 position 号,请求主库 DUMP 最新日志
    4. DUMP 线程检查主库的 binlog 日志,如果有新的,TP(传送)给从从库的 IO_T
    5. 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 文件。
    6. relay-log 会有自动清理的功能。
      监控
      1)监控 MYSQL 的运行状态;
      2)Slave 机器的 IO 和 SQL 状态都必须为 YES,缺一不可;
      5.3.9 msyql 备份命令?mysql 如何给 jfedu 用户对所有表授权访问,密码为 jfedu.net
      mysql 备份 mysqldump -h localhost -u root -p jacken > /data/jacken.db
      授权:mysql> grant all privileges on . to jfedu@localhost identified by "jfedu.net";
      5.3.10 如何判断 mysql 主从是否同步? 该如何使其同步?
      mysql> show slave status\G #查看是否都为 yes
      Slave_IO_Running
      Slave_SQL_Running
      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。
    写出对 MySQL 数据库 test 进行备份和恢复的命令
    mysqldump -uroot -p123456 -P3306 test -t > 0106.sql
    create database test
    source /backup/0106.sql
    5.3.12 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 语句选择日志保存方式。
    5.3.13 Mysql 主从是否同步,要在主库上查看还是从库上查看,主要关注哪些参数
    从库上查看
    show slave status\G #查看是否都为 yes
    Slave_IO_Running
    Slave_SQL_Running
    5.3.14 说明一下目前线上 mysql 集群 的部署方案
    MHA+atlas
    Mycat+MGR
    InnoDB cluster
    PXC
    MGC
    5.3.15 用哪个命令可以对 Mysql 中的数据库进行备份?
    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 文件
    5.3.16 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
    5.3.17 简述数据库中全量备份、差异备份、事务日志备份的恢复方式
    mysql -hhostname -uusername -ppassword databasename < backupfile.sql
    mysqlbinlog -d test mysql-bin.000003 >003bin.sql
    5.3.18 如果需要可以回滚的修改以下 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>
    5.3.19 SAN 方式高可用,你对这方面有了解吗?
    SAN(Storage Area Network)简单点说就是可以实现网络中不同服务器的数据共享,
    共享存储能够为数据库服务器和存储解耦。使用共享存储时,服务器能够正常挂载文件系统并操
    作,
    如果服务器挂了,备用服务器可以挂载相同的文件系统,执行需要的恢复操作,然后启动 MySQL
    5.3.20 mysqldump 实现不锁表的参数
    mysqldump 备份不锁表:加上--lock-tables=false 参数,
    如果是 innodb,则加上--single-transcation 比较好。
    5.3.21 MySQL 数据库的备份命令
    Mysqldump innobackupex
    5.3.22 MySQL 的同步、半同步、一步同步主从复制有什么区别
    异步复制
    异步复制,主库将事务 Binlog 事件写入到 Binlog 文件中,此时主库只会通知一下 Dump 线程发
    送这些新的 Binlog,然后主库就会继续处理提交操作,而此时不会保证这些 Binlog 传到任何一个
    从库节点上。
    全同步复制
    全同步复制,当主库提交事务之后,所有的从库节点必须收到、APPLY 并且提交这些事务,然后主
    库线程才能继续做后续操作。但缺点是,主库完成一个事务的时间会被拉长,性能降低。
    半同步复制
    半同步复制,是介于全同步复制与全异步复制之间的一种,主库只需要等待至少一个从库节点收到
    并且 Flush Binlog 到 Relay Log 文件即可,主库不需要等待所有从库给主库反馈。同时,这里只是
    一个收到的反馈,而不是已经完全完成并且提交的反馈,如此,节省了很多时间。
    5.3.23 对于一个数据量较多的系统(数据库 10T ,每天归档 500g ),您如何设计备份策略
    每周 Full,每天 inc,或使用 DG、OGG
    5.3.24 对于 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
    第 第6 章 Oracle
    6.1 选择
    6.1.1 如果一个服务器进程非正常终止,Orade 系统将使用下列哪一个进程来释放它所占用的资源?
    (D)
    A.DBWR B.LGWR C.SMON D.PMON
    6.1.2 下例选项中,哪一部分不是 Orade 实例的组成部分?( B)
    A.SGA 系统全局区 B.控制文件 C.PMON 后台进程 D.Dnnn 调度进程
    6.1.3 Oracle 本地解析依赖那个文件
    sqlnet.ora listener.ora cman.ora tnsnames.ora
    6.1.4 在 在 Oracle 中,当控制一个显示游标时,以下哪个命令包含 into 子句?
    Open close fetch cursor
    6.1.5 Oracle 中要生成数据库表,下列哪个选项是无效表生产的语句?D
    create table cats(c_name varchar2(10),c_weighe number,c_owner varcjar2(10))
    create table cats(c_name varchar2(10),c_weighe number,c_owner varcjar2(10))
    create global temporary table temp_cats(c_name varchar2(10),c_weighe number,c_owner varcjar2(10))
    create table 51cats as select c_name,c_weight from cats where c_weigth >5
    6.1.6 在 在 oracle 中,当控制一个显示游标时,一下哪个命令包含 into 子句?
    Open close fetch cursor
    6.1.7 表中的数据可以存为一下那种文件格式(B )
    PDF EXE TXT DMP

    6.1.8 在全局存储区 SGA 中,那个部分内存区域是循环使用的(B )
    数据缓冲区 日志缓冲区 共享池 大池
    6.1.9 如果要查询数据库中所有表的信息,应当使用下列哪种数据字典视图? ( A )
    A.DBA 视图 B.ALL 视图 C.USER 视图 D.动态性能视图
    6.1.10 下列哪一项是 Oracle 数据库中最小的存储分配单元?( D )
    A.表空间 B.段 C.盘区 D.数据块
    6.1.11 下面的各选项中哪一一个正确描述了 Oracle 数据库的逻辑存储结构? (A)
    A.表空间由段组成,段由盘区组成,盘区由数据块组成
    B.段由表空间组成,表空间由盘区组成,盘区由数据块组成
    C.盘区由数据块组成,数据块由段组成,段由表空间组成
    D.数据块由段组成,段由盘区组成,盘区由表空间组成
    6.1.12 下列哪一个进程用于将修改过的数据从内存保存到磁盘数据文件? (A )
    A.DBWR B.LGWR C.RECO D.ARCH
    6.1.13 解忙后的 SOL 语句在 SGA 的哪个区域中进行缓存?( 共享池 )
    数据缓冲区 日志缓冲区 共享池 大池
    6.1.14 当数据库运行在归档模式下时,如果发生目志切换,为了保证不覆盖旧的日志信息系统将启 当数据库运行在归档模式下时,如果发生目志切换,为了保证不覆盖旧的日志信息系统将启
    动如下哪个进程? ( D )
    A.DBWR B.LGWR C.SMON D.ARCH
    6.1.15 PL/SQL 代码段中注释 符号是
    // \ - ,
    6.1.16 (C )模式存储数据库中数据字典的表和视图
    A 、DBA B、SCOTT C、SYSTEM D、SYS

    6.2 填空
    6.2.1 从存储结构的角度来说,Oracle 数据库可分为 — 段区块
    6.2.2 要更新游标结果集中的当前行,应使用FOR MODIFY 子句
    6.2.3 Oracle 查看表空间情况使用哪个数据字典dba_tablespces_v$tablespace _______
    6.2.4 Oracle 备份工具(包括导入导出)exp_ _imp__expdp impdp rman
    6.2.5 Oracle 下取得当前系统时间的代码为__select sysdate from dual; ________
    6.2.6 PL/SQL 块中不能直接使用的 SQL 命令是_DDL 命令
    6.3 简答
    6.3.1 在 在 ORACLE 中用 SQL 语句备份表 A, 备份表名为 B 。
    6.3.2 往 往 oracle 插入数据超时,root 用户下如何排查故障节点,描述重新启动 oracle 服务过程
    1、startup nomount
    这个阶段,Oracle 进程读取初始参数文件,查看 Oracle 数据库的参数是如何配置的。比如内存
    大小配置参数等。读取参数文件后,与数据库相关的内存区域被建立起来,同时,后台进程也已经
    开始启动。我们把这些内存和进程叫做 Oracle instance,一旦 Oracle Instance 启动成功,数据库就进
    入了 NoMount 阶段。
    2、Mount
    启动到这个阶段时,会打开和读取控制文件,控制文件是二进制文件,记录着 Oracle 的重要
    信息,例如,数据文件的路径等。
    这个阶段,Oracle 确定数据文件的位置,但是还没有打开这些文件,一旦数据文件的路径被定
    位后,数据库开始进入下一阶段。
    3、Open
    这个阶段,Oracle 会读取所有的数据文件,并且确定这些数据文件是一致的(consistent)。
    6.3.3 Oracle 表空间,单个数据文件最大支持存储多少 G 数据,索引需要重建吗,什么时候需要重
    建索引
    32G
    6.3.4 请写出 unix 系统中 oracle 数据库启、停命令
    启动:startup
    停止:shutdown immediate

    6.3.5 请描述 oracle 数据库备份方式
    Oracle 备份包括逻辑备份和物理备份。
    1.逻辑备份 数据库的逻辑备份包含读一个数据库记录集和将记录集写入文件。
    (1)输出(Export)输出可以是整个数据库、指定用户或指定表。
    (2)输入(Import)输入将输出建立的二进制转储文件读入并执行其命令。
    2.物理备份 物理备份包含拷贝构成数据库的文件而不管其逻辑内容。
    Oracle 支持两种不同类型的物理文件备份:脱机备份(offline backup)和联机备份(online
    backup)。
    (1) 脱机备份 脱机备份用在当数据库已正常关闭,数据库处于"offline"时,要备份下列文件
    所有数据文件 所有控制文件
    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 语句。
    6.3.7 备份如何分类
    逻辑备份与物理备份。或者冷备份与热备份。
    6.3.8 你最擅长的是 oracle 那部分
    性能优化、故障修复, RAC,DG,OGG,迁移
    6.3.9 喜欢 oracle 吗?喜欢上论坛吗?或者偏好 oracle 的那一部分
    官方文档,MOS 等;性能优化、故障修复, RAC,DG,OGG,迁移
    6.3.10 随意说说你觉得 oracle 最有意思的部分或者最困难的部分
    SQL 调优
    6.3.11 Oracle 的回滚段的作用是什么
    保存数据的前像,保证数据读取的时间点一致性。Oracle 里数据的多版本特性就是通过回滚段来实
    现的,正因为此,Oracle 数据库实现了读写不竞争的性能优势!

    6.3.12 oracle 的日只有哪几种,作用是什么
    Alert log files--警报日志,
    Trace files--跟踪日志(用户和进程),
    redo log 重做日志(记录数据库的更改)
    归档 保存 redo
    6.3.13 oracle 进程主要有哪些,作用是什么
    pmon smon dbwr lgwr arch lisner
    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 的锁, 有时会在 vlocked_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 vlocked_object;
    select t2.username,t2.sid,t2.serial#,t2.logon_time

    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#';杀掉不正常的锁。
    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 会挂起。该模式能保证零数据丢失, 一般为保证主库在某个从
    库故障后仍能正常运行,最好配置两个及以上的从库。
    6.3.16 oracle 冷备与热备的区别
    热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份。
    而冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库。
    热备份的优点在于当备份时,数据库仍旧可以被使用并且可以将数据库恢复到任意一个时间点。
    冷备份的优点在于它的备份和恢复操作相当简单,并且由于冷备份的数据库可以工作在非归档模式
    下,
    数据库性能会比归档模式稍好。(因为不必将 archive log 写入硬盘)

    第 第7 章 SQL sever
    7.1 选择
    7.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
    7.1.2 SQL Server 是一种(C )软件
    操作系统 语言处理 数据库管理系统 服务性程序
    7.1.3 SQL Server 数据库的主数据文件的扩展名为(BD )
    .sql .mdf .mdb .ldf
    7.1.4 关于 sql server 常用的数据类型,以下(C )说法是错误的
    Image 数据类型可以用来存储图像 使用字符数据类型时,可以改变长度信息
    使用数字数据类型时,可以改变长度信息 Bit 数据类型为 1 位长度,可以存储表示是/否的数据
    7.1.5 使用 T-SQL 中的(C )语句可以删除数据表格 或者视图中的一个或多个记录
    DEL PRUGE DELETE DROP
    7.1.6 使用 T-SQL 对数据的修改是通过(D )语句实现的
    MODIFY EDIT REMAKE UPDATE
    7.1.7 下列关于 SQL Server 数据库日志的说话错误是(D )
    日志文件是维护数据库完整性的重要工具 有的对 SQL 数据库的操作都需要写日志
    当日志文件的空间占满时,将无法写日志 当修改数据库时,必先写日志
    7.2 填空
    7.2.1 主数据库文件的扩展名是mdf_ ,事务日志文件的扩展名是ldf( 此题为 SqlSERVER 题)
    7.2.2 sqlserver 数据库,如何限制不同人员的访问权限
    根据需要授予角色权限

    7.2.3 SQL Server 下取得当前系统时间的代码为select GETDATE()
    7.2.4 将 将 SQL Server 数据复制到其他的数据库中,包括 Access 、Oracle 、DB2 等,采用ODBC __
    作为连接机制
    7.2.5 SQL Server 能够识别两种登录认证机制--Windows 认证和SQL SERVER 身份
    认证
    7.2.6 SQL Server 默认的数据库系统管理员的用户名是2005 以前默认是:sa ,2008 以后是安装时
    设置的 ,默认为本机的名字。
    7.2.7 在 在 SQL Server 中定义字符型,不论 char (n )格式还是 varchar (n )格式,其数据长度均不
    能超过8000
    字节
    7.2.8 在 在 SQL Server 表中,一个表只能有一个
    主键____ ,且其值必须唯一
    7.2.9 在 在 SQL Server 中,一根数据库至少包含___ 数据库主_ 文件和_ 日志____ 文件
    7.2.10 SQL Server 提供了四种数据库备份方式:数据库备份、日志备份、_ 差异____ 备份以及文件
    或文件组备份
    7.2.11 在检索信息时可以通过 WHERE 字句指定检索的条件,而且 SQL Server 还提供了 NOT、 、
    OR 和AND 三种运算符
    7.3 简答
    7.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 数据库)

    3、只要有相关的权限,所登陆到的数据当然是一样,前面已经说过,身份验证是用以识别数据的操
    作者身份,那么不管以何种身份登陆,只要具有相关权限,那么均可以对数据库及表进行相关的权
    限范围之内的增删查改的操作。
    7.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.执行这些语句

    相关文章

      网友评论

          本文标题:面试题系列-数据库笔试题参考答案

          本文链接:https://www.haomeiwen.com/subject/eeyzcktx.html