1. SQL语言的功能有哪些?
2. 内连接与外连接有什么区别?
3. 什么是事务?
4. 什么是存储过程?它与函数有什么区别与联系?
5. 各种范式有什么作用?
6. 什么是触发器?
7. 如果数据库日志满了,会出现什么情况?
8. union和union all有什么区别?
9. 什么是视图?
SQL是结构化查询语言,其功能包括:
基本SQL语句的使用方式:
【注】delete与truncate命令有哪些区别?
相同点:都可以用来删除一个表中的数据。
不同点:truncate会释放掉存储空间,不可以回滚,而delete不会释放掉存储空间,可以回滚;truncate的执行速度比delete快。
内连接,也被称为自然连接,只有两个表相匹配的行才能在结果集中出现,所以内连接可能会造成信息的丢失。
外连接不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中的所有数据行。
事务是数据库中一个单独的执行单元,它通常由高级数据库操作语言或编程语言编写的用户程序的执行所引起。当在数据库中更改数据成功时,在事务中更改的数据便会提交,不再改变。否则,事务就取消或者回滚,更改无效。
事务必须满足4个属性:
事务是一个不可分割的整体,为了保证事务的总体目标,事务必须具有原子性,即当数据修改时,要么全执行,要么全不执行,即不允许事务部份地完成,避免了只执行这些操作的一部分而带来的错误。
一个事务执行之前和执行之后,数据库数据必须保持一致性状态。
当两个或多个事务并发执行时,为了保证数据的安全性,将一个事务内部的操作与事务的操作隔离起来,不被其他正在进行的事务看到。
数据库有4种类型的事务隔离级别:不提交读、提交读、可重复读和串行化。
事务完成后,DBMS保证它对数据库中的数据的修改是永久性的,当系统或介质发生故障时,该修改也永久保持。
SQL语句在执行时要先编译,然后再被执行。在大型数据库系统中,为了提高效率,将为了完成特定功能的SQL语句集进行编译优化后,存储在数据库服务器中,用户通过指定存储过程的名字来调用执行。
存储过程不等于函数,二者虽然本质上没有区别,但还是有几点不同:
数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。
满足1NF,数据库表中的每个实例或行必须可以被唯一地区分,为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。
满足2NF,每个非主属性都不传递依赖于主属性。
可以参考另一篇文章的实例:
https://blog.csdn.net/qq_28958301/article/details/89314373#3.%C2%A0%E8%8C%83%E5%BC%8F%E5%92%8C%E5%8F%8D%E8%8C%83%E5%BC%8F
触发器是一种特殊类型的存储过程,它由事件触发,而不是程序调用或手工启动,当数据库有特殊的操作时,这些操作由数据库中的事件来触发,自动完成这些SQL语句。使用触发器可以用来保证数据的有效性和完整性,完成比约束更复杂的数据约束。
触发器与存储过程的区别:
触发器 | 存储过程 |
当某类数据操纵语句发生时隐式地调用 | 从一个应用或过程中显式地调用 |
在触发器体内禁止使用COMMIT和ROLLBACK语句 | 在过程体内可以使用SQL语句,包括COMMIT和ROLLBACK语句 |
不能接收参数输入 | 可以接收参数输入 |
触发器有2种:
语句级触发器和行级触发器有什么区别:
语句级触发器可以在语句执行之前或之后执行,行级触发在触发器所影响的每一行触发一次。
日志文件记录所有对数据库数据的修改,主要是保护数据库以防故障发生,以及恢复数据时使用,一旦数据库中日志满了,就只能执行查询等读操作,不能执行更改、备份等操作。
union在进行表求并集后去掉重复的元素,所以会对所产生的结果集进行排序运算,删除重复的记录再返回结果。
union all则只是简单地将两个结果集合并后就返回结果。
在执行查询操作时,union all要比union快得多。
视图是从数据库的基本表中选取出来的数据组成的逻辑窗口,与基本表不同,它是一个虚表。在数据库中,存放的只是视图的定义,而不存放视图包含的数据项,这些项目仍然存放在原来的基本表结构中。
视图的作用:
定义视图可以将表与表之间的复杂的操作连接和搜索条件对用户不可见,用户只需要简单地对一个视图进行查询即可,故增加了数据的安全性,但不能提高查询的效率。