15个 mysql dba面试题基础面试题,DBA 们准备好了吗

3062人阅读
面试(57)
MySQL DBA的基础面试题目
1, mysql的复制原理以及流程。
(1)先问基本原理流程,3个线程以及之间的关联。
(2)再问一致性,延时性,数据恢复。
(3)再问各种工作遇到的复制bug的解决方法
3,问mysql中varchar与char的区别以及varchar(50)中的30代表的涵义。
(1)varchar与char的区别
& & & & char是一种固定长度的类型,varchar则是一种可变长度的类型
(2)varchar(50)中50的涵义
& & & & &最多存放50个字节
(3)int(20)中20的涵义
& & & & &int(M)中的M&indicates the&maximum display width (最大显示宽度)for integer types. The maximum legal display width is 255.
(4)为什么MySQL这样设计?
4,问了innodb的事务与日志的实现方式。&
(1)有多少种日志
错误日志:记录出错信息,也记录一些警告信息或者正确的信息
慢查询日志:设置一个阈值,将运行时间超过该值的所有SQL语句都记录到慢查询的日志文件中。
二进制日志:记录对数据库执行更改的所有操作
&&查询日志:记录所有对数据库请求的信息,不论这些请求是否得到了正确的执行。
(2)日志的存放形式
(3)事务是如何通过日志来实现的,说得越深入越好。
隔离性: 通过 锁 实现
原子性、一致性和持久性是通过 redo和undo来完成的。
5,问了mysql
binlog的几种日志录入格式以及区别
(1)各种日志格式的涵义
(2)适用场景
(3)结合第一个问题,每一种日志格式在复制中的优劣。
6,问了下mysql数据库cpu飙升到500%的话他怎么处理?
(1) 没有经验的,可以不问
(2)有经验的,问他们的处理思路
7,sql优化。
(1)explain出来的各种item的意义
(2)profile的意义以及使用场景。
(3)explain中的索引问题。
8, 备份计划,mysqldump以及xtranbackup的实现原理,
(1) 备份计划
(2)备份恢复时间
(3)备份恢复失败如何处理
9, 500台db,在最快时间之内重启。
10, 在当前的工作中,你碰到到的最大的mysql db问题是?
11, innodb的读写参数优化
(1)读取参数,global buffer pool以及 local buffer
(2)写入参数
(3)与IO相关的参数
(4)缓存参数以及缓存的适用场景
12 ,请简洁地描述下MySQL中InnoDB支持的四种事务隔离级别名称,以及逐级之间的区别?
SQL标准定义的四个隔离级别为:
read uncommited
read committed
repeatable read
serializable
Read Uncommitted(读取未提交内容)
&&&&&&在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。
Read Committed(读取提交内容)
&&&&&&这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别也支持所谓的不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。
Repeatable Read(可重读)
&&&&&&这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读(Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control&间隙锁)机制解决了该问题。注:其实多版本只是解决不可重复读问题,而加上间隙锁(也就是它这里所谓的并发控制)才解决了幻读问题。
Serializable(可串行化)
这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。
对于不同的事务,采用不同的隔离级别分别有不同的结果。不同的隔离级别有不同的现象。主要有下面3种现在:
1、脏读(dirty read):一个事务可以读取另一个尚未提交事务的修改数据。
2、非重复读(nonrepeatable read):在同一个事务中,同一个查询在T1时间读取某一行,在T2时间重新读取这一行时候,这一行的数据已经发生修改,可能被更新了(update),也可能被删除了(delete)。
3、幻像读(phantom read):在同一事务中,同一查询多次进行时候,由于其他插入操作(insert)的事务提交,导致每次返回不同的结果集。
不同的隔离级别有不同的现象,并有不同的锁定/并发机制,隔离级别越高,数据库的并发性就越差,4种事务隔离级别分别表现的现象如下表:
read uncommitted
read committed
repeatable read
serializable
13,表中有大字段X(例如:text类型),且字段X不会经常更新,以读为为主,请问
(1)您 是选择拆成子表,还是继续放一起?
(2)写出您这样选择的理由?
1 & 提高检索效率
14,MySQL中InnoDB引擎的行锁是通过加在什么上完成(或称实现)的?为什么是这样子的
通过 & 行多版本控制
15 &MyISAM 与innodb的区别
(1) 问5点不同
& & & & & & & & & & & & MyISAM & & & & & & & & &Innodb
事物支持 : & 不支持 & & & & & & & & & & 支持
锁的粒度: & & table & & & & & & & & & & &Row
存储容量: & &没有上限 & & & & & & & 64TB
哈希索引 : & 不支持 & & & & & & & & & & & 支持
全文索引: & 支持 & & & & & & & & & & & & 不支持
外键: & & & & & &不支持 & & & & & & & & & &支持
(2) 问各种不同mysql版本的2者的改进
(3)2者的索引的实现方式
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:476457次
积分:4214
积分:4214
排名:第4964名
原创:19篇
转载:379篇
评论:36条
(1)(1)(10)(46)(100)(31)(65)(25)(21)(6)(3)(1)(1)(1)(22)(8)(6)(6)(5)(1)(4)(7)(6)(15)(2)(7)君,已阅读到文档的结尾了呢~~
mysql dba面试题【可编辑】
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
mysql dba面试题【可编辑】
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口MySQL DBA基本面试题总结
一.基础知识
1.MYSQL逻辑上可以分为多少层?
SQL层:查询的解析,优化,执行
存储引擎:数据存储,锁,事务管理,恢复
2.存储引擎最常用有那些?简单的描述下
MyISAM:默认的MySQL插件式存储引擎,它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。
InnoDB:用于事务处理应用程序,具有众多特性,包括ACID事务支持。
BDB:可替代InnoDB的事务引擎,支持COMMIT、ROLLBACK和其他事务特性。
Memory:将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问。
Merge:允许MySQLDBA或开发人员将一系列等同的MyISAM表以逻辑方式组合在一起,并作为1个对象引用它们。
Archive:为大量很少引用的历史、归档、或安全审计信息的存储和检索提供了完美的解决方案。
Federated:能够将多个分离的MySQL服务器链接起来,从多个物理服务器创建一个逻辑数据库。十分适合于分布式环境或数据集市环境。
Cluster/NDB:MySQL的簇式数据库引擎,尤其适合于具有高性能查找要求的应用程序。
3,简述在MYSQL数据系统里最常见的系统瓶项有那些?
A.磁盘搜索。
B.磁盘读/写
C.CPU周期
4.内存带宽
磁盘搜索。需要花时间从磁盘上找到一个数据,用在现代磁盘的平均时间通常小于10ms,因此理论上我们能够每秒大约搜索1000次。这个时间在新磁盘上提高不大并且很难为一个表进行优化。优化它的方法是将数据分布在多个磁盘上。
磁盘读/写。当磁盘放入正确位置后,我们需要从中读取数据。对于现代的磁盘,一个磁盘至少传输10-20Mb/s的吞吐。这比搜索要容易优化,因为你能从多个磁盘并行地读。
CPU周期。我们将数据读入内存后,需要对它进行处理以获得我们需要的结果。表相对于内存较小是最常见的限制因素。但是对于小表,速度通常不成问题。
内存带宽。当CPU需要的数据超出CPU缓存时,主缓存带宽就成为内存的一个瓶颈。这在大多数系统正是一个不常见的瓶颈但是你应该知道它
4.MYSQL的备份有多少种,请简要的描述:
A.直接拷贝数据文件到安全地方进行保存
B.使用MYSQLHOSTCOPY备分数据
C.使用MYSQLDUMP备份数据
D.使用MYSQL的同步复制,实现数据实时数据同步备份
5.MYSQL CLUSTER 的环境主要由那三部份组成的?
A.管理各个节点的MANAGE节点主机
B.SQL层的SQL服务器节点
C.STORAGE层的NDB数据节点。
二.综合题
1. 为什么要对MYSQL的表进行分区
A.与单个磁盘或文件系统分区相比,可以存储更多的数据
B. 对于那些已经失去保存意义的数据,通常可以通过删除与那些数据有关的分区,很容易地删除那些数据。相反地,在某些情况下,添加新数据的过程又可以通过为那些新数据专门增加一个新的分区,来很方便地实现。
C. 一些查询可以得到极大的优化
D. 涉及到例如SUM()和COUNT()这样聚合函数的查询,可以很容易地进行并行处理
E. 通过跨多个磁盘来分散数据查询,来获得更大的查询吞吐量
2. 简述MYSQL的常用的优化工具或监控工具有那些?
Mysqlreport,mysqlsla
Iostat ,vmstat,top
3. .优化INNODB性能会考虑那几方面?
A基础设施:硬件,CPU,内存,磁盘等
B操作系统;OS是基于LINUX还是WINDOS同,及32位还是64位
C.MYSQL的INNODB的设置,如:innodb_buffer_pool_size,innodb_log_file_size,innodb_log_buffer_size,innodb_flush_log_at_trx_commit,innodb_thread_concurrency,等
D.生产应用
E.标准的SQL编写
4. Mysql用户与权限管理:
A)开放DBA用户管理MySQL中具体数据库(testdb)的权限;
grant all privileges on testdb todba1@&192.168.0.10&identified by &dbapasswd&;
B)开放user用户管理MySQL中具体数据库的表(testdb.table1)的权限
grant all on testdb.teable1 touser@&192.168.0.10&identified by &dbapasswd&;
C)开放user用户管理MySQL中具体数据库的表(testdb.table1)的部分列的权限
grant select(id, se, rank) on testdb.table1to user@&192.168.0.10&identified by &dbapasswd&;
5. 写出INNODB存储引擎的基于二进制时间点的备份与恢复,mysql的安装目录为:/usr/local/mysql,数据库名为:db
全备份:/usr/local/mysql/bin/mysqldump &single-transaction&flush-logs &master-data=2 -u root -p*** db1&full_0625.sql
增量备份:用 flush logs 来生成数据库增量备份(二进制日志文件)
mysqladmin -u root -p*** flush-logs
每隔一段时间执行此步骤,来生成增量备份文件,例如,每半小时或者每15分钟。
第一种恢复
/usr/local/mysql/bin/mysq -u root -p db1&full_0625.sql
mysqlbinlog mysql-bin.000002 | mysql
mysqlbinlog mysql-bin.000003 | mysql
mysqlbinlog mysql-bin.000004 | mysql
mysqlbinlog mysql-bin.000005 | mysql
第二种恢复
1. /usr/local/mysql/bin/mysq -u root -p db1&full_0625.sql
2. 使用MySQL工具 mysqlbinlog 来把增量备份产生的二进制文件转化为 SQL 文本文件
mysqlbinlog -u root -p*** mysql-bin.000002 &mysql-bin.000002.sql
3. 依次使用 MySQL 数据库增量备文件,来恢复数据库
mysql -uroot -p***&mysql-bin.000001.sql
mysql -uroot -p***&mysql-bin.000002.sql
mysql -uroot -p***&mysql-bin.000003.sql
mysql -uroot -p***&mysql-bin.000004.sql
mysql -uroot -p***&mysql-bin.000005.sql
6. 获取MYSQL锁的等待情况可以通过检查那个变量来了解表的争夺
table_locks_waited,table_locks_immediate
7. 请写出MYSQL常用自带工具的五种?
Mysql,mysqladmin, mysqldump,mysqlhotcopy,mysqldumpslow
8. 优化INNODB性能会考虑那几方面?
标签(Tag):
------分隔线----------------------------
------分隔线----------------------------15个 MySQL 基础面试题,DBA 们准备好了吗?_数据库技术_Linux公社-Linux系统门户网站
你好,游客
15个 MySQL 基础面试题,DBA 们准备好了吗?
来源:Linux中国 &
作者:Linux
此前我们已经有发表过Linux 面试基础问答之一、二和三共3篇文章,获得读者的好评,同时我们得到反馈,有些读者希望这种交互式学习方法能够做得更加灵活。心动不如行动,我们这就为您奉上 15个 MySQL 面试题。
推荐文章:
11个Linux基础面试问题
Linux 面试基础问题 - 第2部分
Linux 面试基础问题 - 第3部分
问题1:你如何确定 MySQL 是否处于运行状态?
答案: Debian 上运行命令 service mysql status,在 上运行命令 service mysqld status。然后看看输出即可。
root@localhost:/home/avi# service mysql status
/usr/bin/mysqladmin& Ver 8.42 Distrib 5.1.72, for debian-linux-gnu on i486Copyright (c) ,
and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.
Server version 5.1.72-2Protocol version 10Connection Localhost via UNIX socketUNIX socket /var/run/mysqld/mysqld.sockUptime: 1 hour 22 min 49 sec
Threads: 1& Questions: 112138& Slow queries: 1& Opens: 1485& Flush tables: 1& Open tables: 64& Queries per second avg: 22.567.
问题2:如何开启或停止 MySQL 服务?
答案:运行命令 service mysqld start 开启服务;运行命令 service mysqld stop 停止服务。
root@localhost:/home/avi# service mysql stop
Stopping MySQL database server: mysqld.
root@localhost:/home/avi# service mysql start
Starting MySQL database server: mysqld.
Checking for corrupt, not cleanly closed and upgrade needing tables..
问题3:如何通过 Shell 登入 MySQL?
答案:运行命令 mysql -u root -p
root@localhost:/home/avi# mysql -u root -p Enter password: Welcome to the MySQL monitor.& C or \g. Your MySQL connection id is 207 Server version: 5.1.72-2 (Debian)
Copyright (c) , Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.
Type '' or '\h' for help. Type '\c' to clear the current input statement.
问题4:如何列出所有数据库?
答案:运行命令
mysql& +--------------------+ | Database& & & & &
| +--------------------+ | information_schema | | a1& & & & & & & &
| | cloud& & & & & & & | | mysql& & & & & & & | | phpmyadmin& & & &
| | playsms& & & & & & | | sisso& & & & & & & | | test& & & & & & &
| | ukolovnik& & & & & | | wordpress& & & & & | +--------------------+ 10 rows in set (0.14 sec)
问题5: 如何切换到某个数据库并在上面工作?
答案:运行命令 use database_ 进入名为 database_name 的数据库。
mysql& Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A
Database changed mysql&
相关资讯 & & &
图片资讯 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款http://blog.csdn.net/wanlixingzhe/article/details/7387725
  1. 数据抽象:物理抽象、概念抽象、视图级抽象,内模式、模式、外模式
  2. SQL语言包括数据定义、数据操纵(Data Manipulation),数据控制(Data Control)
  数据定义:Create Table,Alter Table,Drop Table, Craete/Drop Index等
  数据操纵:Select ,insert,update,delete,
  数据控制:grant,revoke
  3. SQL常用命令:
  CREATE TABLE Student(
  ID NUMBER PRIMARY KEY,
  NAME VARCHAR2(50) NOT NULL);//建表
  CREATE VIEW view_name AS
  Select * FROM Table_//建视图
  Create UNIQUE INDEX index_name ON TableName(col_name);//建索引
  INSERT INTO tablename {column1,column2,…} values(exp1,exp2,…);//插入
  INSERT INTO Viewname {column1,column2,…} values(exp1,exp2,…);//插入视图实际影响表
  UPDATE tablename SET name=’zang 3’//更新数据
  DELETE FROM Tablename WHERE//删除
  GRANT (Select,delete,…) ON (对象) TO USER_NAME [WITH GRANT OPTION];//授权
  REVOKE (权限表) ON(对象) FROM USER_NAME [WITH REVOKE OPTION] //撤权
  列出工作人员及其领导的名字:
  Select E.NAME, S.NAME FROM EMPLOYEE E S
  WHERE E.SUPERName=S.Name
  4. 视图:
  5. 完整性约束:实体完整性、参照完整性、用户定义完整性
  6.什么是第三范式:
  1NF:每个属性是不可分的。
  2NF:若关系R是1NF,且每个非主属性都完全函数依赖于R的键。例SLC(SID#, CourceID#, SNAME,Grade),则不是2NF;
  3NF:若R是2NF,且它的任何非键属性都不传递依赖于任何候选键。
  7. ER(实体/联系)模型
  8. 索引作用
  9. 事务:是一系列的数据库操作,是数据库应用的基本逻辑单位。事务性质:原子性、
  原子性。即不可分割性,事务要么全部被执行,要么就全部不被执行。
  一致性或可串性。事务的执行使得数据库从一种正确状态转换成另一种正确状态
  隔离性。在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务,
  持久性。事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存。
  10. 锁:共享锁、互斥锁
  两段锁协议:阶段1:加锁阶段 阶段2:解锁阶段
  11. 死锁及处理:事务循环等待数据锁,则会死锁。
  死锁处理:预防死锁协议,死锁恢复机制
  12. 存储过程:存储过程就是编译好了的一些sql语句。
  1.存储过程因为SQL语句已经预编绎过了,因此运行的速度比较快。
  2. 可保证数据的安全性和完整性。通过存储过程可以使没有权限的用户在控制之下间接地存取数据库,从而保证数据的安全。通过存储过程可以使相关的动作在一起发生,从而可以维护数据库的完整性。
  3.可以降低网络的通信量。存储过程主要是在服务器上运行,减少对客户机的压力。
  4:存储过程可以接受参数、输出参数、返回单个或多个结果集以及返回值。可以向程序返回错误原因
  5:存储过程可以包含程序流、逻辑以及对数据库的查询。同时可以实体封装和隐藏了数据逻辑。
  13. 触发器: 当满足触发器条件,则系统自动执行触发器的触发体。
  触发时间:有before,after.触发事件:有insert,update,delete三种。触发类型:有行触发、语句触发
  14.内联接,外联接区别?
  内连接是保证两个表中所有的行都要满足连接条件,而外连接则不然。
  在外连接中,某些不满条件的列也会显示出来,也就是说,只限制其中一个表的行,而不限制另一个表的行。分左连接、右连接、全连接三种
经典查询:
& & & &1.一道SQL语句面试题,关于group by
  表内容:
  如果要生成下列结果, 该如何写sql语句?
  ------------------------------------------
  create table #tmp(rq varchar(10),shengfu nchar(1))
  insert into #tmp values('','胜')
  insert into #tmp values('','胜')
  insert into #tmp values('','负')
  insert into #tmp values('','负')
  insert into #tmp values('','胜')
  insert into #tmp values('','负')
  insert into #tmp values('','负')
  1)select rq, sum(case when shengfu='胜' then 1 else 0 end)'胜',sum(case when shengfu='负' then 1 else 0 end)'负' from #tmp group by rq
  2) select N.rq,N.胜,M.负 from (
  select rq,胜=count(*) from #tmp where shengfu='胜'group by rq)N inner join
  (select rq,负=count(*) from #tmp where shengfu='负'group by rq)M on N.rq=M.rq
  3)select a.col001,a.a1 胜,b.b1 负 from
  (select col001,count(col001) a1 from temp1 where col002='胜' group by col001) a,
  (select col001,count(col001) b1 from temp1 where col002='负' group by col001) b
  where a.col001=b.col001
  2.请教一个面试中遇到的SQL语句的查询问题
  表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。
  ------------------------------------------
  select (case when a&b then a else b end ),
  (case when b&c then b esle c end)
  from table_name
  3.面试题:一个日期判断的sql语句?
  请取出tb_send表中日期(SendTime字段)为当天的所有记录?(SendTime字段为datetime型,包含日期与时间)
  ------------------------------------------
  select * from tb where datediff(dd,SendTime,getdate())=0
  4.有一张表,里面有3个字段:语文,数学,英语。其中有3条记录分别表示语文70分,数学80分,英语58分,请用一条sql语句查询出这三条记录并按以下条件显示出来(并写出您的思路):
  大于或等于80表示优秀,大于或等于60表示及格,小于60分表示不及格。
  显示格式:
  语文 & & & & & & &数学 & & & & & & & &英语
  及格 & & & & & & &优秀 & & & & & & & &不及格
  ------------------------------------------
  select
  (case when 语文&=80 then '优秀'
  when 语文&=60 then '及格'
  else '不及格') as 语文,
  (case when 数学&=80 then '优秀'
  when 数学&=60 then '及格'
  else '不及格') as 数学,
  (case when 英语&=80 then '优秀'
  when 英语&=60 then '及格'
  else '不及格') as 英语,
  from table
  5.在sqlserver2000中请用sql创建一张用户临时表和系统临时表,里面包含两个字段ID和IDValues,类型都是int型,并解释下两者的区别?
  ------------------------------------------
  用户临时表:create table #xx(ID int, IDValues int)
  系统临时表:create table ##xx(ID int, IDValues int)
  用户临时表只对创建这个表的用户的Session可见,对其他进程是不可见的.
  当创建它的进程消失时这个临时表就自动删除.
  全局临时表对整个SQL Server实例都可见,但是所有访问它的Session都消失的时候,它也自动删除.
  6.sqlserver2000是一种大型数据库,他的存储容量只受存储介质的限制,请问它是通过什么方式实现这种无限容量机制的。
  ------------------------------------------
  它的所有数据都存储在数据文件中(*.dbf),所以只要文件够大,SQL & &Server的存储容量是可以扩大的.
  SQL Server 2000 数据库有三种类型的文件:
  主要数据文件
  主要数据文件是数据库的起点,指向数据库中文件的其它部分。每个数据库都有一个主要数据文件。主要数据文件的推荐文件扩展名是 .mdf。
  次要数据文件
  次要数据文件包含除主要数据文件外的所有数据文件。有些数据库可能没有次要数据文件,而有些数据库则有多个次要数据文件。次要数据文件的推荐文件扩展名是 .ndf。
  日志文件
  日志文件包含恢复数据库所需的所有日志信息。每个数据库必须至少有一个日志文件,但可以不止一个。日志文件的推荐文件扩展名是 .ldf。
  7.请用一个sql语句得出结果
  从table1,table2中取出如table3所列格式数据,注意提供的数据及结果不准确,只是作为一个格式向大家请教。
  如使用存储过程也可以。
  table1
  月份mon 部门dep 业绩yj
  -------------------------------
  一月份 & & &01 & & &10
  一月份 & & &02 & & &10
  一月份 & & &03 & & &5
  二月份 & & &02 & & &8
  二月份 & & &04 & & &9
  三月份 & & &03 & & &8
  table2
  部门dep & & &部门名称dname
  --------------------------------
  01 & & &国内业务一部
  02 & & &国内业务二部
  03 & & &国内业务三部
  04 & & &国际业务部
  table3 (result)
  部门dep 一月份 & & &二月份 & & &三月份
  --------------------------------------
  01 & & &10 & & & &null & & &null
  02 & & &10 & & & & 8 & & & &null
  03 & & &null & & & 5 & & & &8
  04 & & &null & & &null & & &9
  ------------------------------------------
  select a.部门名称dname,b.业绩yj as '一月份',c.业绩yj as '二月份',d.业绩yj as '三月份'
  from table1 a,table2 b,table2 c,table2 d
  where a.部门dep = b.部门dep and b.月份mon = '一月份' and
  a.部门dep = c.部门dep and c.月份mon = '二月份' and
  a.部门dep = d.部门dep and d.月份mon = '三月份' and
  select a.dep,
  sum(case when b.mon=1 then b.yj else 0 end) as '一月份',
  sum(case when b.mon=2 then b.yj else 0 end) as '二月份',
  sum(case when b.mon=3 then b.yj else 0 end) as '三月份',
  sum(case when b.mon=4 then b.yj else 0 end) as '四月份',
  sum(case when b.mon=5 then b.yj else 0 end) as '五月份',
  sum(case when b.mon=6 then b.yj else 0 end) as '六月份',
  sum(case when b.mon=7 then b.yj else 0 end) as '七月份',
  sum(case when b.mon=8 then b.yj else 0 end) as '八月份',
  sum(case when b.mon=9 then b.yj else 0 end) as '九月份',
  sum(case when b.mon=10 then b.yj else 0 end) as '十月份',
  sum(case when b.mon=11 then b.yj else 0 end) as '十一月份',
  sum(case when b.mon=12 then b.yj else 0 end) as '十二月份',
  from table2 a left join table1 b on a.dep=b.dep
  8.华为一道面试题
  一个表中的Id有多个记录,把所有这个id的记录查出来,并显示共有多少条记录数。
  ------------------------------------------
  select id, Count(*) from tb group by id having count(*)&1
  select * from(select count(ID) as count from table group by ID)T where T.count&1
& & & & 1、对数据库SQL2005、ORACLE熟悉吗?
  SQL2005是微软公司的数据库产品。是一个RDBMS数据库,一般应用在一些中型数据库的应用,不能跨平台。
  ORACLE是ORACLE公司的数据产品,支持海量数据存储,支持分布式布暑,支持多用户,跨平台,数据安全完整性控制性能优越,是一个ORDBMS,一般用在大型公司。
  2、能不能设计数据库?如何实现数据库导入与导出的更新
  使用POWERDISINE工具的使用,一般满足第三范式就可以了。EXP与IMP数据库的逻辑导入与导出
  3、如何只显示重复数据,或不显示重复数据
  显示重复:select * from tablename groupby id having count(*)&1
  不显示重复:select * from tablename groupby id having count(*)=1
  4、什么是数据库的映射
  就是将数据库的表与字段对应到模型层类名与属性的过程
  5、写分页有哪些方法,你一般用什么方法?用SQL语句写一个分页?
  如何用存储过程写分页?
  在SQLSERVER中使用TOP分页,在ORACLE中用ROWNUM,或分析函数ROW_NUMBER
  使用TOP:
  select top 20,n.* from tablename n minus select top 10,m.* fromtablename m
  使用分析函数:
  select * from
  (select n.*,row_number() over(order by columnname) num from tablename n)
  where num&=10 and num &=20;
  使用过程时,只要将分页的范围用两个参数就可以实现。在ORACLE中,要将过程封装在包里,还要用动态游标变量才能实现数据集的返回。
  6、ORACLE中左连接与右连接
  左连接:LEFT JOIN 右连接:RIGHT JOIN
  select n.column,m.column from tablename1 n left join tablename2 m
  onn.columnname=m.columnname
  用WHERE实现:
  select n.column,m.column from tablename1 n, tablename2 m
  where n.columnname(+)=m.columnname
  7、什么是反射、序列化、反序列化?事务有几种级别?
  反射是在程序运行时动态访问DDL的一种方式。序列化是将对象对二进制、XML等方式直接向文件的存储。反序列化是将存储到文件的对象取出的过程。事务的级别的三种:页面级、应用程序级、数据库级。
  8、数据测试如何测试?
  在PLSQL里对过程或函数可能通过专用的测试工具,通过对
  9、用事务的时候,如果在业务逻辑层中,调用数据库访问层中的方法,访问层中有很多类,类又有很多方法,每个方法都要实现,那么如何处理?
  通用数据访问层的实现
  10、什么时候会用到触发器
  A安全管理、B日志管理、C复杂业务逻辑实现
  11、如何在数据库中显示树控制? 用父ID与子ID来实现
  12、如何实现数据库的优化?
  A、调整数据结构的设计。这一部分在开发信息系统之前完成,程序员需要考虑是否使用ORACLE数据库的分区功能,对于经常访问的数据库表是否需要建立索引等。
  B、调整应用程序结构设计。这一部分也是在开发信息系统之前完成,程序员在这一步需要考虑应用程序使用什么样的体系结构,是使用传统的Client/Server两层体系结构,还是使用Browser/Web/Database的三层体系结构。不同的应用程序体系结构要求的数据库资源是不同的。
  C、调整数据库SQL语句。应用程序的执行最终将归结为数据库中的SQL语句执行,因此SQL语句的执行效率最终决定了ORACLE数据库的性能。ORACLE公司推荐使用ORACLE语句优化器(Oracle Optimizer)和行锁管理器(row-level manager)来调整优化SQL语句。
  D、调整服务器内存分配。内存分配是在信息系统运行过程中优化配置的,数据库管理员可以根据数据库运行状况调整数据库系统全局区(SGA区)的数据缓冲区、日志缓冲区和共享池的大小;还可以调整程序全局区(PGA区)的大小。需要注意的是,SGA区不是越大越好,SGA区过大会占用操作系统使用的内存而引起虚拟内存的页面交换,这样反而会降低系统。
  E、调整硬盘I/O,这一步是在信息系统开发之前完成的。数据库管理员可以将组成同一个表空间的数据文件放在不同的硬盘上,做到硬盘之间I/O负载均衡。
  F、调整操作系统参数,例如:运行在UNIX操作系统上的ORACLE数据库,可以调整UNIX数据缓冲池的大小,每个进程所能使用的内存大小等参数。
  13、EJB与JAVA BEAN的区别?
  Java Bean 是可复用的组件,对JavaBean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。Enterprise Java Bean 相当于DCOM,即分布式组件。它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。
  EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。
  14、forward 和redirect的区别
  forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。
  redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。
  15、HashMap和Hashtable的区别。
  HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。
  HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
  HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。
  Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
  最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。
  Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。
  16、数据库类型中 VARCHAR 和 CHAR 的区别是?
  1.char 的长度是固定的,而 varchar2 的长度是可以变化的, 比如,存储字符串“abc&,对于 char (20), 表示你存储的字符将占 20 个字节(包括 17 个空字符),而同样的 VARCHAR2 (20)则只占用 3 个字节的长度, 20 只是最大值,当你存储的字符小于 20 时,按实际长度存储。由于 char 是以固定长度的,所以它的速度 会比 varchar 快得多!但程序处理起来要麻烦一点,要用 trim 之类的函数把两边的空格去掉!1.char 的长度是固定的,而 varchar2
的长度是可以变化的, 比如,存储字符串“abc&,对于 char (20), 表示你存储的字符将占 20 个字节(包括 17 个空字符),而同样的 VARCHAR2 (20)则只占用 3 个字节的长度, 20 只是最大值,当你存储的字符小于 20 时,按实际长度存储。由于 char 是以固定长度的,所以它的速度 会比 varchar 快得多!但程序处理起来要麻烦一点,要用 trim 之类的函数把两边的空格去掉!
  2.CHAR 的效率比 VARCHAR2 的效率稍高。
  3.目前 VARCHAR 是 VARCHAR2 的同义词。工业标准的 VARCHAR 类型可以存储空字符串,但是 oracle 不这样 做,尽管它保留以后这样做的权利。Oracle 自己开发了一个数据类型 VARCHAR2,这个类型不是一个标准的 VARCHAR,它将在数据库中 varchar 列可以存储空字符串的特性改为存储 NULL 值。如果你想有向后兼容的 能力,Oracle 建议使用 VARCHAR2 而不是 VARCHAR。
  17、如何插入单引号到数据库表中
  可以用 ASCII 码处理,其它特殊字符如&也一样,如: insert into t values('i'chr(39)'m'); -- chr(39)代表字符' 或者用两个单引号表示一个 or insert into t values('I''m'); -- 两个''可以表示一个'
  18、怎么获得今天是星期几 , 还关于其它日期函数用法
  (1)可以用 to_char 来解决,如: select to_char(to_date('','yyyy-mm-dd'),'day')
  (2)在获取之前可以设置日期语言,如: ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';
  (3)在函数中指定,如: select to_char(to_date('','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American')
  (4)其它更多用法,可以参考 to_char 与 to_date 函数 如获得完整的时间格式 select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') (5)随便介绍几个其它函数的用法: 本月的天数 SELECT to_char(last_day(SYSDATE),'dd') days FROM dual 今年的天数 select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year')
from dual 下个星期一的日期 SELECT Next_day(SYSDATE,'monday') FROM dual 知道出生日期, 如何求年龄?
  19、 求上个月月底的日期
  现在时 4 月 23 求上个月的月底时几号?(3 月 31 日) select to_char(trunc(sysdate, 'MM') -1 , 'YYYY-MM-DD') select trunc(sysdate,’mm’)-1 select to_char()
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:64842次
积分:1711
积分:1711
排名:第16558名
原创:16篇
转载:638篇
(5)(18)(6)(48)(170)(108)(72)(34)(55)(26)(3)(82)(24)(7)

我要回帖

更多关于 sqlserver dba面试题 的文章

 

随机推荐