触发器及其应用实验报告总结_数据库—基础知识点总结一

7ae6f86b026473c06a2cb9781c6645af.gif点击蓝字关注我们

AI研习图书馆,发现不一样的精彩世界

基础
知识

数据库面试重要知识点总结

1. 什么是数据库三范式?
  • 第一范式:当关系模式R的所有属性都不能再分解为更基本的数据单位时,称R满足第一范式,简记为1NF

  • 第二范式:如果关系模式R满足第一范式,并且R的所有非主键属性都完全依赖于R的每一个候选关键属性,称R满足第二范式,简记为2NF

  • 第三范式:设R是满足第一范式条件的关系模式,X是R的任意属性集,如果X非传递依赖于R的任意一个候选关键字,称R满足第三范式,简记为3NF

2. 什么是事务?

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

事务具有四大特性:一致性、原子性、隔离性、持久性。

事务常用命令:   Begin Transaction、Commit Transaction、RollBack Transaction。

3. 什么是锁?

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

4. 什么是视图?

视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。

视图实际上是在数据库中通过Select查询语句从多张表中提取的多个表字段所组成的虚拟表。

  • 视图并不占据物理空间,所以通过视图查询出的记录并非保存在视图中,而是保存在原表中

  • 通过视图可以对指定用户隐藏相应的表字段,起到保护数据的作用

  • 在满足一定条件时,可以通过视图对原表中的记录进行增删改操作

  • 创建视图时,只能使用单条select查询语句

5. 什么是游标?

游标是一种能从包含多条数据记录的结果集中每次提取一条记录进行处理的机制。它对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。

游标的使用步骤:

  • 定义游标:declare cursor 名称 for select [for {readonly|update}]

  • 打开游标:open cursor

  • 操作数据:fetch... ...   current of cursor

  • 关闭游标:close cursor

6. 什么是索引?

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。

  • 索引分为:聚集索引、非聚集索引、唯一索引等

  • 一张表可以有多个唯一索引和非聚集索引,但最多只能有一个聚集索引

  • 索引可以包含多列

  • 合理的创建索引能够提升查询语句的执行效率,但降低了新增、删除操作的速度,同时也会消耗一定的数据库物理空间

7. 什么是存储过程?如何调用?

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

8. 什么是触发器?

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

9. 触发器的作用?

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

10. 索引的作用?优缺点?

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

  • 普通索引 就是一个普通的索引,可以为空,可以重复

  • 唯一索引 可以为空,不可以重复(值不可重复)

  • 主键索引 不可以为空,不可以重复

主键本身就是主键索引,我们创建表,添加了主键,就相当于添加了主键索引 11. 什么是内存泄漏?

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

12. 在关系型数据库中如何描述多对多的关系?

在关系型数据库中描述多对多的关系,需要建立第三张数据表。比如学生选课,需要在学生信息表和课程信息表的基础上,再建立选课信息表,该表中存放学生Id和课程Id。

13. 什么是数据库约束,常见的约束?

数据库约束用于保证数据库表数据的完整性(正确性和一致性)。可以通过定义约束/索引/触发器来保证数据的完整性。

总体来讲,约束可以分为:

  • 主键约束:primary key

  • 外键约束:foreign key

  • 唯一约束:unique

  • 检查约束:check

  • 空值约束:not null

  • 默认值约束:default

14. 常用的聚合函数?

Sum:求和,Avg:平均数,Max:最大值,Min:最小值,Count:记录数

15. 什么是内联接、左外联接、右外联接?
  • 内联接(Inner Join):匹配2张表中相关联的记录

  • 左外联接(Left Outer Join):除了匹配2张表中相关联的记录外,还会匹配左表中剩余的记录,右表中未匹配到的字段用NULL表示

  • 右外联接(Right Outer Join):除了匹配2张表中相关联的记录外,还会匹配右表中剩余的记录,左表中未匹配到的字段用NULL表示

在判定左表和右表时,要根据表名出现在Outer Join的左右位置关系。

16. 如何在删除主表记录时,一并删除从表相关联的记录?

如果两张表存在主外键关系,那么在删除主键表的记录时,如果从表有相关联的记录,那么将导致删除失败。

在定义外键约束时,可以同时指定3种删除策略:一是将从表记录一并删除(级联删除);二是将从表记录外键字段设置为NULL;三是将从表记录外键字段设置为默认值。

级联删除示例:

  • alter table 从表名

  • add constraint 外键名

  • foreign key(字段名) references 主表名(字段名)

  • on delete cascade

d79b3122f7333113fe3e0f27e020dcf7.pngBilibili : 洛必达数数CSDN博客:算法之美DLGitHub:statisticszhang 5b1f813f70cf8bcc2a5682c2eb800165.png

关注AI研习图书馆,发现不一样的精彩世界

实验五 触发器实验报告 [实验目的] 1. 理解Oracle触发器的种类和用途 2. 掌握行级触发器的编写 [预备知识] 1. PL/SQL程序设计 [实验原理] 1. 建立触发器 CREATE [OR REPLACE] TRIGGER <触发器名> BEFORE"AFTER INSERT"DELETE"UPDATE OF <列名> ON <表名> [FOR EACH ROW] WHEN (<条件>) <PL/SQL 程序块> ON 子句中的名称识别与数据库触发器关联的数据库触发器事件指定了影响表的 SQL DML 语句 ( INSERT、 DELETE 或 UPDATE) AFTER 指定了触发器在处理完成后触发 BEFORE 指定了触发器在处理完成前触发 默认情况下,触发器每个表触发一次 FOR EACH ROW 选项指定触发器每行触发一次(即触发器为行级触发器) 要使触发器触发,WHEN 子句中布尔型表达式的值必须判定为 TRUE 可以将 REPLACE 添加到 CREATE 语句以自动删除和重建触发器 2. 行级触发器中引用表数据 在行级触发器中,使用伪记录来表示旧数据:old和新数据:new 引用示例::new.customer_name, :old.customer_name 3. 行级触发器中的谓词 在一个多条件触发的触发器中,使用谓词可以区分当前触发的操作的类型:inserting, updating,deleting。 示例: IF Inserting THEN 语句 ; END IF; IF Updating THEN 语句 ; END IF; IF Deleting THEN 语句 ; END IF; 4. 触发器的限制 SELECT 语句必须是 SELECT INTO 语句或内部游标声明。 行级触发器不可以对触发表进行查询,包括其调用的子过程中。 不允许 DDL 声明和事务控制语句 。 如果由触发器调用存储子过程,则存储子程序不能包括事务控制语句 。 :old 和 :new 值的类型不能是 LONG 和 LONG RAW。 [实验内容] 1. 给Customer表增加一列Savings,类型为int,来存放每个顾客的存款总额。 ALTER TABLE customer ADD (saving varchar2(30)); select * from customer; 2. 更新Customer表,使得Savings字段的值正确。 3. 在Account表上增加一个行级触发器,当对account的balance进行update和insert一个 记录时同步修改Customer的Savings字段,保证数据的一致性。 4. 对account进行update操作,记录account表和customer表的变化。 5. 去掉顾客- 存款账号表中引用account表的外键约束(如果不去掉,后面的操作无法实现。当然最 佳的方法是修改其外键约束的更新策略,但考虑到复杂性,这里使用不标准的做法, 但建议大家实际运用中不要这么做)。在顾客- 存款账号表插入一条记录,表明顾客开设了一个新的账户。 6. 将一条刚才新开账户号的存款记录插入账号表,记录account表和customer表的变化。 [实验总结] 1. 实验中遇到的问题和解决的方法。 ----------------------- "触发事件 ":old ":new " "Insert "无定义,所有字段都是N"该语句完成后插入的值 " " "ULL " " "Update "更新前该行的旧值 "更新后该行的值 " "Delete "删除前该行的值 "无定义,所有字段都是N" " " "ULL "
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值