Oracle/MySQL重点面试题 - 煎饼果子

Oracle/MySQL重点面试题

首页 / 技术之路 / 正文

1. Oracle和MySQL的区别?

1、Oracle是大型数据库,而MySQL是中小型数据库。但是MySQL是开源的,但是Oracle是收费的,而且比较贵。

2、Oracle的内存占有量非常大,而mysql非常小

3、MySQL支持主键自增长,指定主键为auto increment,插入时会自动增长。Oracle主键一般使用序列。

4、MySQL字符串可以使用双引号包起来,而Oracle只可以单引号

5、MySQL分页用limit关键字,而Oracle使用rownum字段表明位置,而且只能使用小于,不能使用大于。

6、Oracle在处理长字符串的时候,长度是小于等于4000个字节,如果要插入更长的字符串,考虑用CLOB类型,插入修改记录前要做进行修改和 长度的判断,如果为空,如果长度超出返回操作处理.(CLOB类型是内置类型,它一般都作为某一行中的一列,有些数据库也有别名)

7、MySQL中0、1判断真假,Oracle中true false

8、MySQL中命令默认commit,但是Oracle需要手动提交

9、MySQL在windows环境下大小写不敏感 在unix,linux环境下区分大小写,Oracle不区分

2. Oracle的行转列

行转列 pivot 列转换 unpivot

pivot(聚合函数 for 列名 in(类型))

3. sql的执行顺序

开始->FROM子句->WHERE子句->GROUP BY子句->HAVING子句->ORDER BY子句->SELECT子句->LIMIT子句->最终结果

4. oracle实现分组查询

roup by 要分组的列名 对数据集合处理的函数,可以处理多行数据
--5个分组函数
--count --计数函数,用于数量的统计
--sum 求和函数,对数据进行求和
--avg 求评平均,对一组数据求平均值
--min ,求最小值
--max ,求最大值

5. 左连接怎么使用的

select * from table_1 left join table_2 on table_1.id = table_2.id

6. 索引怎么用,在一张表上创建很多索引可以吗,为什么?

create index 索引名 on 表名(列名) tablespace 表空间名

可以。因为.......(待补充)

7. 如果想查某个时间段的数据,该怎么查?

select * from table_1 where date between 时间段1 AND 时间段2

8. 数据库怎么优化查询?

1.尽量少用in操作符

2.尽量用not exists或者外连接替代not in操作

3.尽量不使用<>或者!=运算符

4.在设计表的时候,把索引列设置为not null

5.尽量不使用通配符%或者_作为查询字符串的第一个字符

6.where字句避免在索引列上计算使用

7.用>=代替>

8.利用SGA共享池,避开parse阶段

9.where后面的条件,表连接的语句在前,可以过滤掉最大数量记录的条件居后

10.使用表的别名,并将之作为每列的前缀

11.显式或者隐式运算的字段不能索引

12.用Union all 代替union

13.通过改变Oracle的SGA的大小

9. 索引的实现方式

btree索引 hash索引 R-tree索引 full-text 全文索引

10. MySQL的索引是是用什么数据结构,并介绍内部如何实现?

btree结构:
又叫多路平衡搜索数,一颗m叉的btree特性如下
1.树中每个节点最多包含m个孩子
2.除跟节点与叶子节点外,每个节点 只是有[ceil(m/2)]个孩子
3.若个节点不是 叶子节点,则至少有两个孩子
4.所有的叶子节点都在同一层
5.每个非叶子节点由n个key与n+1个指针组成,其中[ceil(m/2)-1]<=n<=m-1

11. 索引会对更新造成影响吗,为什么

会。因为虽然索引大大提高了查询效率,同时也降低了更新表的速度

12. 视图索引的创建

create unique index index_name on test(id);

13. 视图为什么比一般的语句好用?

因为是一种虚拟存在的表,不在数据中实际存在。可以简化查询

14. MySQL存储引擎有哪些,默认用哪个

myisam和innodb 默认innodb

15. 创建存储过程

create procedure 存储过程名(参数列表)
BEGIN
存储过程体(一组合法的sql语句)
END

16. 给出一个内查询的例子

select xxx from table_1 where id in (select id from table_2 where name = 'jack');

17. 数据库查询优化

同8.

18. 介绍一下innodb 和MyIsam,他们的区别

INNODB存储引擎是mysql的默认存储引擎,提供了具有提交,回滚,崩溃恢复能力的事务安全。但是对于MYLSAM的存储引擎,INNODB写的处理效率差一些,并且会占用更多的磁盘空间以保留数据和索引.

MyIsam不支持事务,也不支持外键,其优势就是访问速度快。对事务的完整性没有要求或者以select,为主的应用基本都可以使用这个引擎来创建表.

19. 数据库索引怎么使用?分类?在哪些地方使用过?

create [unique|fulltext] INDEX  index_name
[USING index_type]
on tb_name;

索引的分类 :
单值索引:即一个索引只包含单个列一个表可以有多个单列索引
唯一索引:索引的列的值必须唯一,但允许有空值
复合索引:即一个索引包含多个列

在大量数据中查找等操作的时候,可以使用索引提高检索效率。

20. 事务,事务的特性?

  • 事务就是用户定义的一系列执行SQL语句的操作, 这些操作要么完全地执行,要么完全地都不执行, 它是一个不可分割的工作执行单元。
  • 原子性,一致性,隔离性,持久性

21. truncate、delete、drop的区别?

1.delete可以加where ,truncate不可以
2.truncate删除,效率高一点点
3.加入要删除的表中有自增长列
如果用delete删除后,在插入数据,自增长的列值从断点 开始
而truncate删除后,再插入数据 自增长的列的值从1开始.
4.truncate删除没有返回值的,delete是有返回值
5.truncate删除不能回滚,delete删除可以回滚

6.drop语句将表所占用的空间全释放掉

22. oracle提供的内置函数?

  • 字符函数:

length() 返回str长度

trim() 去除字符串两边空格

lower() 转小写

upper() 转大写

concat() 拼接两个字符串

instr(str,find_str) 查询find_str在str是否存在

substr() 截取字符串

  • 转换函数:

1、to_number(str):将字符类型转换成number类型。
2、to_char(time,format):将time时间类型按照format的格式转换成字符类型。
3、to_date(str,format):将str类型的时间按照format的格式转换成date时间类型

  • 数值型函数

1、round(num,length):num小数保留length位长度,并且四舍五入。
2、ceil(num):返回向上取整num的结果。
3、floor(num):返回向下取整num的结果。

23. 连接表的时候是怎么操作的

select * from table_1 join table_2 on table_1.id=table_2.id where 限制条件

24. 有两个数组 任意类型 怎么最快做到查询其中有哪些数据是重复的

(不知道)

25. mysql怎么做全连接

select 查询列表
from 表1 别名 [full outer]
join 表2 别名
on 连接条件
[where 筛选条件]

26. 如何实现多条修改

可以使用while循环语句,或者IF--THEN语句结合。

27. 分页组件怎么是实现,在sql中怎么实现

在Oracle中,使用rownum进行分页,在MySQL中,使用limit关键字。

28. C3P连接池的使用和好处

ComboPooledDataSource source = new ComboPooledDataSource();
source.setDriverClass("com.mysql.jdbc.Driver");
source.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/aa?useUnicode=true&characterEncoding=utf-8");
source.setUser("root");
source.setPassword("000");
        
//获取链接
System.out.println(source.getConnection());

好处:C3P0连接池不仅可以自动清理不再使用的Connection,还可以自动清理Statement和ResultSet。

29. 手机端数据库的了解

主要有5种。

BerkeleyDB Couchbase-lite LevelDB SQLite UnQlite

30. oracle实例和用户的关系

用户是在oracle实例下建立的。不同实例可以建相同名字的用户。

31. JDBC怎么连接数据库

 //1.加载驱动程序
Class.forName("com.mysql.jdbc.Driver");
//2.获得数据库链接
Connection conn=DriverManager.getConnection(URL, USER, PASSWORD);
//3.通过数据库的连接操作数据库,实现增删改查(使用Statement类)
Statement st=conn.createStatement();
ResultSet rs=st.executeQuery("select * from user");
//4.处理数据库的返回结果(使用ResultSet类)
while(rs.next()){
   System.out.println(rs.getString("user_name")+" "+rs.getString("user_password"));
}

//关闭资源
rs.close();
st.close();
conn.close();

32. MySQL创建和删除表的关键字

创建:create 删除:drop

33. 比较表和视图的区别

是一种虚拟存在的表,不在数据中实际存在。视图可以简化查询。

34. oracle中的五个约束条件是什么?

主键约束 唯一约束 检查约束 默认约束 外键约束

35. 事物的传播属性有哪几种?分别有什么作用(Spring)

1、mandatory 表示当前方法必须在事务中进行,当前事务不存在,则抛出异常

2、required (默认的)当前方法必须在事务中进行,如果当前事务存在,则在当前事务中执行,如果不存在当前事务,则启动一个新的事务。

3、required_new 这个方法要求在新的事务中执行,会启动一个新的事务,如果存在当前事务,则该事务会先被挂起。

4、support 该方法可以不在事务中,但是如果在存在当前事务,那就在当前事务中执行。

5、never 给方法不可以在事务中执行,如果存在当前事务则抛出异常。

6、not_support 该方法不可以在事务中执行,如果存在当前事务,则该事务会被挂起。

7、nest,嵌套事务。如果当前事务不存在,则nest和requied相同。

评论区
头像
    头像
    张小菜
    2021年02月06日 10:54
    回复

    继续整理吧

      头像
      Sublime.
      2021年02月07日 22:25
      回复

      嘿嘿好滴嗷~~

文章目录