数据库 面试题 实战解答

1、触发器的作用?

触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。

2、什么是存储过程?用什么来调用?

存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。可以用一个命令对象来调用存储过程。

3、 存储过程的优缺点

  • 优点:
      执行速度更快。存储过程只在创造时进行编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程执行速度更快。
      存储过程用于处理复杂的操作时,程序的可读性更强、网络的负担更小。
      使用存储过程封装事务性能更佳。
      能有效的放注入,安全性更好。
      可维护性高,在一些业务规则发生变化时,有时只需调整存储过程即可,而不用改动和重编辑程序。
      更好的代码重用。

  • 缺点:
      存储过程将给服务器带来额外的压力。
       存储过程多多时维护比较困难。
      移植性差,在升级到不同的数据库时比较困难。
      调试麻烦,SQL语言的处理功能简单。
      总之复杂的操作或需要事务操作的SQL建议使用存储过程,而参数多且操作简单SQL语句不建议使用存储过程。

4、索引的作用?和它的优点缺点是什么?

索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。

5、什么是内存泄漏?

一般我们所说的内存泄漏指的是堆内存的泄漏。堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。当应用程序用关键字new等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free或者delete释放该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了。

6、维护数据库的完整性和一致性,你喜欢用触发器还是自写业务逻辑?为什么?

尽可能使用约束,如check,主键,外键,非空字段等来约束,这样做效率最高,也最方便。其次是使用触发器,这种方法可以保证,无论什么业务系统访问数据库都可以保证数据的完整新和一致性。最后考虑的是自写业务逻辑,但这样做麻烦,编程复杂,效率低下。

7、什么是事务?什么是锁?

事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。

锁:在DBMS中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。当然锁还分级别的。

8、什么叫视图?

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

那么左连接返回10万数据。
全连接5万数据
select * from A left join B on A.id=B.id; —》10 万
select * from A inner

9、 where和Having区别:

Having:对分组之后的条件进行过滤 (having过滤分组)
where在计算之前完成的,having在计算之后才起作用的。( where过滤行)

10、on和in的区别:

in :指的是某个字段的值在某个集合中,也就是该字段取值范围。(where之后使用in)
on:主要实现在表之间进行连接条件的,有内连接,外连接等

11、union和union ALL 的区别:

union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序
union ALL :对两个结果集进行并集操作,包括重复行,不进行排序;

12、数据库的备份类型:

完全备份:整个数据集(数据库)
常用—部分备份:备份数据集(只备份一个表)
部分备份分为:增量备份、差异备份

备份格式:
mysqldump -h主机名 -P端口 -u用户名 -p密码 –database 数据库名 > 文件名.sql

13、数据库运行于哪种状态下可以防止数据的丢失?

在archivelog mode(归档模式)只要其归档日志文件不丢失,就可以有效地防止数据丢失。

14、SQL 约束有哪几种?

NOT NULL: 用于控制字段的内容一定不能为空(NULL)。
UNIQUE: 控件字段内容不能重复,一个表允许有多个 Unique 约束。
PRIMARY KEY: 也是用于控件字段内容不能重复,但它在一个表只允许出现一个。
FOREIGN KEY: 用于预防破坏表之间连接的动作,也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
CHECK: 用于控制字段的值范围。

15、数据库的乐观锁和悲观锁是什么?

确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性,
乐观锁和悲观锁是并发控制主要采用的技术手段。

16、事务隔离级别?

数据库定义了4个隔离级别:
Serializable【可避免脏读,不可重复读,虚读】
Repeatable read【可避免脏读,不可重复读】
Read committed【可避免脏读】
Read uncommitted【级别最低,什么都避免不了】

17、Truncate与delete区别?

Oracle 系统提供了向数据库添加记录的功能,自然也提供了从数据库删除记录的功能。从数据库中删除记录可以使用 DELETE 语句和 TRUNCATE 语句,但这两种语句还是有很大区别的,下面分别进行讲解。

1,使用 DELETE 语句删除数据时,Oracle 系统会产生回滚记录,所以这种操作可以使用ROLLBACK 语句来撤销

如果用户确定要删除表中的所有记录,则除了可以使用 DELETE 语句之外,还可以使用TRUNCATE 语句,而且 Oracle 本身也建议使用 TRUNCATE 语句。

2,如果用户确定要删除表中的所有记录,则除了可以使用 DELETE 语句之外,还可以使用TRUNCATE 语句,而且 Oracle 本身也建议使用 TRUNCATE 语句。

总结:

使用 TRUNCATE 语句删除表中的所有记录要比 DELETE 语句快得多。这是因为使用 TRUNCATE语句删除数据时,它不会产生回滚记录。当然,执行了 TRUNCATE 语句的操作也就无法使用ROLLBACK 语句撤销。

18、 什么是游标?游标的使用方式?

集合类型的变量:游标
什么是游标
用于临时存储一个查询返回的多行数据,通过遍历游标,可以琢行访问处理该结果集的数据。

游标的使用方式:声明–>打开–>读取–>关闭

游标声明:
          cursor 游标名[(参数列表)] is 查询语句;
          
游标的打开:
    open 游标名;
    
 游标的取值:
 
fetch  +游标名称  into  你定义的变量;就是将抓取的游标赋给你之前定义的其他变量。

close 游标的关闭:

in :输入参数

out:输出参数

19、无参数和有参数的区别及使用方法:

无参:在编写时不需要给定参数类型,直接调用。
有参:在首行括号后加入(参数)

20、Oracle 和Mysql 的区别?

1.数据库的不同,MySQL中可以有多个库,Oracle 只能有一个。

2.MySQL中是库中有表。
Oracle中是表是在表空间中管理。

2.MySQL的用户是外面独立的管理。
Oracle是通过表空间来管理用户。

3.ORacle—实例(orcl对象)—表空间—用户—表

备注: 实例指:安装时创建那个。

 
文章总结: 以上是根据自己面试过程,整理出来的一些问题, 如写作错误,欢迎指正。未完待续。继续期待ing.

转载请注明本站地址。谢谢

发布了41 篇原创文章 · 获赞 13 · 访问量 4725

猜你喜欢

转载自blog.csdn.net/weixin_46163590/article/details/105045354