十一、drop、delete与truncate分别在什么场景之下使用?
参考回答:
(1)不再需要一张表的时候,用drop;
(2)想删除部分数据行时候,用delete,并且带上where子句;
(3)保留表而删除所有数据的时候用truncate;
十二、什么是视图?以及视图的使用场景有哪些?
参考回答:
视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。
对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。只暴露部分字段给访问者,所以就建一个虚表,就是视图。
查询的数据来源于不同的表,而查询者希望以统一的方式查询,这样也可以建立一个视图,把多个表查询结果联合起来,查询者只需要直接从视图中获取数据,不必考虑数据来源于不同表所带来的差异。
十三、什么是三个范式
参考回答:
(1)第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。
(2)第二范式(2NF):数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖(部分函数依赖指的是存在组合关键字中的某些字段决定非关键字段的情况),也即所有非关键字段都完全依赖于任意一组候选关键字。
(3)第三范式(3NF):在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。所谓传递函数依赖,指的是如果存在"A → B → C"的决定关系,则C传递函数依赖于A。因此,满足第三范式的数据库表应该不存在如下依赖关系:关键字段→非关键字段 x →非关键字段y。
十四、触发器的作用?
参考回答:
触发器是一特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。
如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。
十五、非关系型数据库和关系型数据库区别,有什么优势?
参考回答:
非关系型数据库的优势:
(1)性能:NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。(2)可扩展性:同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。
关系型数据库的优势:
(1)复杂查询:可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。(2)事务支持:使得对于安全性能很高的数据访问要求得以实现。
拓展:
(1)对于这两类数据库,对方的优势就是自己的弱势,反之亦然。
(2)NOSQL数据库慢慢开始具备SQL数据库的一些复杂查询功能,比如MongoDB。
(3)对于事务的支持也可以用一些系统级的原子操作来实现例如乐观锁之类的方法来曲线救国,比如Redisset nx。
十六、什么是临时表,临时表什么时候删除?
参考回答:
临时表可以手动删除:
DROP TEMPORARY TABLE IF EXISTS temp_tb;
临时表只在当前连接可见,当关闭连接时,MySQL会自动删除表并释放所有空间。因此在不同的连接中可以创建同名的临时表,并且操作属于本连接的临时表。
创建临时表的语法与创建表语法类似,不同之处是增加关键字TEMPORARY,
如:
CREATE TEMPORARY TABLE tmp_table ( NAME VARCHAR (10) NOT NULL, timedate NOT NULL ); select* from tmp_table;
十七、什么是存储过程?
有哪些优缺点?参考回答:存储过程是一些预编译的SQL语句。更加直白的理解:存储过程可以说是一个记录集,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候调用他就行了。
(1)存储过程是一个预编译的代码块,执行效率比较高。
(2)一个存储过程替代大量T_SQL语句 ,可以降低网络通信量,提高通信速率。
(3)可以一定程度上确保数据安全。
十八、存储过程如何调用
参考回答:
(1)可以用一个命令对象来调用存储过程。
(2)可以供外部程序调用,比如:java程序。
十九、存储过程与函数的区别
参考回答:
存储过程:
(1)用于在数据库中完成特定的操作或者任务(如插入、删除等)
(2)程序头部声明用procedure
(3)程序头部声明时不需描述返回类型可以使用in/out/in out 三种模式的参数
(4)可作为一个独立的PL/SQL语句来执行
(5)可以通过out/in out 返回零个或多个值
(6)SQL语句(DML 或SELECT)中不可调用存储过程
函数:
(1)用于特定的数据(如选择)
(2)程序头部声明用function
(3)程序头部声明时要描述返回类型,而且PL/SQL块中至少要包括一个有效的return语句
(4)可以使用in/out/in out 三种模式的参数
(5)不能独立执行,必须作为表达式的一部分调用
(6)通过return语句返回一个值,且改值要与声明部分一致,也可以是通过out类型的参数带出的变量
(7)SQL语句(DML 或SELECT)中可以调用函数
二十、什么是 内连接、外连接、交叉连接、笛卡尔积?
参考回答:
(1)内连接: 只连接匹配的行
(2)左外连接: 包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行
(3)右外连接: 包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行
(4)全外连接: 包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。
(5)交叉连接: 生成笛卡尔积-它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个行都一一匹配