知识点:数据库安全与保护 ★★
1、数据库安全与保护包括:
(1)完整性控制:指数据库中数据的正确性和相容性。
(2)数据库的安全性:指保护数据库以防止不合法的使用而造成数据泄露、更改或破坏。
(3)并发控制:事务就是为保证数据的一致性而产生的一个概念和基本手段。
(4)数据库的备份与恢复:保证数据库中数据的可靠性和完整性。
第一节 数据库完整性
知识点:完整性约束条件的作用对象 ★ (简答题)
1、完整性约束条件的作用对象
完整性约束条件的作用对象可以是列、元组和表。
列级约束:包括对数据类型的约束、对数据格式的约束、对取值范围或取值集合的约束、对空值的约束。
元组约束:指元组中各个字段之间的相互约束。
表级约束:指若干元组之间、关系之间的联系的约束。
2、简述完整性约束条件中列级约束包括的内容。
(1)对数据类型的约束,其包括数据类型、长度、精度等。
(2)对数据格式的约束。
(3)对取值范围或取值集合的约束。
(4)对空值的约束。
知识点:实体完整性 ★ (简答题)
1、主键列必须遵守的规则
每一个表只能定义一个主键。
主键的值(键值)必须能够唯一标志表中的每一行记录,且不能为 NULL。
复合主键不能包含不必要的多余列。
一个列名在复合主键的列表中只能出现一次。
2、简述 MySQL 中候选键与主键之间的区别。
(1)一个表中只能创建一个主键,但可以定义若干个候选键。
(2)定义主键约束时,系统会自动产生 PRIMARY KEY 索引,而 定义候选键约束时,系统自动产生 UNIQUE 索引。
知识点:参照完整性约束的实现策略 ★★★ (简答题)
CASCADE 表示级联策略,即从被参照表中删除或更新记录行时,自动删除或更新参照表中匹配的记录行。
SET NULL 表示置空策略,即当从被参照表中删除或更新记录行时,设置参照表中与之对应的外键列的值为 NULL,这个策略需要被参照表中的外键列没有声明限定词NOT NULL。
RESTRICT 表示限制策略,即当要删除或更新被参照表中被参照列上,并在外键中出现的值时,系统拒绝对被参照表的删除或更新操作。与“NO ACTION”动作语义相同。
3、指定外键的规则
(1) 被参照表必须已经用一条 CREATE TABLE 语句创建了,或者必须是当前正在创建的表。
(2) 必须为被参照表定义主键。
(3) 必须在被参照表的表名后面指定列名或列名的组合。这个列或列组合必须是这个被参照表的主键或候选键。
(4) 尽管主键是不能够包含空值的,但允许在外键中出现一个空值。
(5) 外键中的列的数目必须和被参照表的主键中的列的数目相同。
(6) 外键中的列的数据类型必须和被参照表的主键中的对应列的数据类型相同。
更新完整性约束 ★ (简答题)
4、使用 ALTER TABLE 语句更新与列或表有关的各种约束的注意事项。
完整性约束不能直接被修改。若要修改某个约束,实际上是用ALTER TABLE 语句先删除该约束,然后再增加一个与该约束同名的新约束。 使用 ALTER TABLE 语句,可以独立地删除完整性约束,而不会删除表本身。若使用 DROP TABLE 语句删除一个表,则表中所有的完整性约束都会自动被删除。
第二节 触发器
知识点:触发器 ★★ (简答题)
1、简述触发器的概念及其作用。
触发器(Trigger)是用户定义在关系表上的一类由事件驱动的数据库对象,也是一种保证数据完整性的方法。
主要作用:实现主键和外键不能保证的复杂的参照完整性和数据的一致性,从而有效地保护表中的数据。
知识点:使用触发器 ★★ (简答题)
2、MySQL 所支持的触发器有三种:
INSERT 触发器:引用 NEW 虚拟表,访问被插入的行。
DELETE 触发器:引用 OLD 虚拟表,访问被删除的行。
UPDATE 触发器:引用 NEW 虚拟表,访问新更新的值。引用 OLD 虚拟表,访问以前的值。
3、使用 INSERT 触发器的注意事项:
在 INSERT 触发器代码内,可引用一个名为 NEW(不区分大小写)的虚拟表,来访问被插入的行。
在 BEFORE INSERT 触发器中,NEW 中的值可以被更新。
对于 AUTO_INCREMENT 列,NEW 在 INSERT 执行之前包含的是 0 值, 在 INSERT 执行之后将包含新的自动生成值。
4、使用 DELETE 触发器的注意事项:
在 DELETE 触发器代码内,可以引用一个名为 OLD(不区分大小写)的虚拟表,来访问被删除的行。 OLD 中的值全部是只读的,不能被更新。
5、使用 UPDATE 触发器的注意事项:
在 UPDATE 触发器代码内,可以引用一个名为 OLD(不区分大小写) 的虚拟表访问以前(
UPDATE 语句执行前)的值,也可以引用一个名为 NEW(不区分大小写)的虚拟表访问新更新的值。
在 BEFORE UPDATE 触发器中,NEW 中的值可能也被更新,即允许更改将要用于 UPDATE 语句中的值(只要具有对应的操作权限)。
OLD 中的值全部是只读的,不能被更新。
当触发器涉及对触发表自身的更新操作时,只能使用 BEFORE UPDATE 触发器,而 AFTER UPDATE 触发器将不被允许。
【1810】有两个表 R(A)和 S(B),R(A)={1,3},S(B)={5,6}。定义如下触发器:
CREATE TRIGGER my_tri AFTER INSERT ON R FOR EACH ROW INSERT INTO S VALUES (NEW.A+2) 当执行完 INSERT INTO R( SELECT*FROM S)之后,分别写出 R 和 S 的结果。
答案:
R(A)={1,3,5,6},S(B)={5,6,7,8}
第四节 事务与并发控制
知识点:事务的定义 ★★★ (简答题)
1、简述事务的概念与事务的特征。
事务是用户定义的一个数据操作序列,这些操作可作为一个完整的工作单元,要么全部执行,要么全部不执行,是一个不可分割的工作单位。
特征(事务的 ACID 特征):原子性、一致性、隔离性和持续性。
助记口诀:远离一尺(原离一持)。
2、事务与程序的区别
事务与程序很相似,但它们是两个彼此相联而又不同的概念:程序是静止的,事务是动态的,是程序的执行而不是程序本身;同一程序的多个独立执行可以同时进行,而每一步执行则是一个不同的事务。
知识点:并发操作问题 ★ (简答题)
3、典型的 3 种并发操作问题
(1)丢失更新:事务 T1,T2 同时读入同一数据并加以修改,T2 的提交结果会破坏 T1 提交的结果。
(2)不可重复读:事务 T1 读取数据后,事务 T2 执行更新操作,使 T1无法再现前一次读取结果。
(3)读“脏”数据:事务 T1 修改数据后撤销,使得 T2 读取的数据与数据库中不一致。
知识点:封锁 ★★ (简答题)
4、简述封锁的概念及封锁的类型。
封锁是最常用的并发控制技术,它的基本思想是:需要时,事务通过向系统请求对它所希望的数据对象加锁,以确保它不被非预期改变。
基本的封锁类型有两种:排他锁(或 X 锁)和共享锁(或 S 锁)。
5、封锁的粒度
我们通常以粒度来描述封锁的数据单元的大小。DBMS 可以决定不同粒度的锁。由最底层的数据元素到最高层的整个数据库,粒度越细,并发性就越大,但软件复杂性和系统开销也就越大。
知识点:封锁的级别 ★★★ (简答题)
0 级封锁
指封锁的事务不重写其他非 0 级封锁事务的未提交的更新数据。该状态实用价值不大。
1 级封锁 指被封锁的事务不允许重写未提交的更新数据。这防止丢失更新的发生。
2 级封锁 指被封锁的事务既不能重写也不读未提交的更新数据。这除了 1 级封锁的效果外还防止了读脏数据。
3 级封锁 指被封锁的事务不读未提交的更新数据,不写任何(包括读操作的)未提交数据,防止了不可重读的
问题。这是严格的封锁,它保证了多个事务并发执行的“可串行化”。
知识点:活锁与死锁 ★★ (简答题)
3、封锁可能引起哪些问题?
封锁带来的一个重要问题是可能引起“活锁”和“死锁”。 在并发事务处理过程中,由于锁会使一事务处于等待状态调度其他事务处理,因而该事务可能会因优先级低而永远等待下去,这种现象称为“活锁”。活锁问题的解决与调度算法有关,一种最简单的办法是“先来先服务”。
两个以上事务循环等待被同组中另一事务锁住的数据单元的情形,称为“死锁”。
4、预防死锁的办法:
(1)一次性锁请求。(2)锁请求排序。(3)序列化处理。(4) 资源剥夺。
第五节 备份与恢复
知识点:备份与恢复 ★ (简答题)
1、请列举说明会造成数据库运行事务异常中断的因素。(至少 4 个)
(1)计算机硬件故障(2)计算机软件故障(3)病毒(4)人为误操作(5)自然灾害(6)盗窃
2、数据库备份与恢复的概念
数据备份是指通过导出数据或者复制表文件的方式来制作数据库的复本。
数据库恢复则是当数据库出现故障或遭到破坏时,将备份的数据库加载到系统,从而使数据库从错误状态恢复到备份时的正确状态。
数据库的恢复是以备份为基础的,它是与备份相对应的系统维护和管理操作。
评论: