数据库使用笔记(2)

数据更新

插入

插入元组

将新元组插入指定表中,语句格式

1
2
3
INSERT
INTO <表名> [(<属性列1>[,<属性列2 >…)]
VALUES (<常量1> [,<常量2>]… );

INTO子句

  • 指定要插入数据的表名及属性列

  • 属性列的顺序可与表定义中的顺序不一致

  • 没有指定属性列:表示要插入的是一条完整的元组,且属性列属性与表定义中的顺序一致

  • 指定部分属性列:插入的元组在其余属性列上取空值

VALUES子句

  • 提供的值必须与INTO子句匹配

  • 值的个数

  • 值的类型

插入子查询结果

1
2
3
INSERT 
INTO <表名> [(<属性列1> [,<属性列2>… )]
子查询;

子查询

  • SELECT子句目标列必须与INTO子句匹配

    • 值的个数

    • 值的类型

修改

  • 语句格式
1
2
3
UPDATE <表名>
SET <列名>=<表达式>[,<列名>=<表达式>]…
[WHERE <条件>];
  • 功能

    • 修改指定表中满足WHERE子句条件的元组

    • SET子句给出<表达式>的值用于取代相应的属性列

    • 如果省略WHERE子句,表示要修改表中的所有元组

关系数据库管理系统在执行修改语句时会检查修改操作是否破坏表上已定义的完整性规则

  • 实体完整性
  • 参照完整性
  • 用户定义的完整性
    • not null
    • unique
    • 值域约束

删除

  • 语句格式
1
2
3
DELETE
FROM <表名>
[WHERE <条件>];
  • 功能

    • 删除指定表中满足WHERE子句条件的元组
  • WHERE子句

    • 指定要删除的元组
    • 缺省表示要删除表中的全部元组,表的定义仍在字典中

SQL中的空值

  • 空值就是“不知道”或“不存在”或“无意义”的值。

  • 一般有以下几种情况:

    • 该属性应该有一个值,但目前不知道它的具体值

    • 该属性不应该有值

    • 由于某种原因不便于填写

  • 空值是一个很特殊的值,含有不确定性。对关系运算带来特殊的问题,需要做特殊的处理。
    • 插入时未完全赋值或者赋值为null
    • 修改为null
  • 判断一个属性的值是否为空值,用IS NULL或IS NOT NULL来表示。

  • 属性定义(或者域定义)中

    • 有NOT NULL约束条件的不能取空值

    • 加了UNIQUE限制的属性不能取空值

    • 码属性不能取空值

  • 空值与另一个值(包括另一个空值)的算术运算的结果为空值

  • 空值与另一个值(包括另一个空值)的比较运算的结果为UNKNOWN。

  • 有UNKNOWN后,传统二值(TRUE,FALSE)逻辑就扩展成了三值逻辑

image-20220526181318751

视图

  • 视图的特点

    • 虚表,是从一个或几个基本表(或视图)导出的表

    • 只存放视图的定义,不存放视图对应的数据

    • 基表中的数据发生变化,从视图中查询出的数据也随之改变

建立视图

  • 语句格式
1
2
3
4
CREATE  VIEW 
<视图名> [(<列名> [,<列名>]…)]
AS <子查询>
[WITH CHECK OPTION];
  • [WITH CHECK OPTION]

    • 对视图进行UPDATE,INSERT和DELETE操作时要保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)
  • 子查询可以是任意的SELECT语句,是否可以含有ORDER BY子句和DISTINCT短语,则决定具体系统的实现。

  • 组成视图的属性列名:全部省略或全部指定

    • 全部省略:

      • 由子查询中SELECT目标列中的诸字段组成
    • 明确指定视图的所有列名:

      • 某个目标列是聚集函数或列表达式

      • 多表连接时选出了几个同名列作为视图的字段

      • 需要在视图中为某个列启用新的更合适的名字

eg. 创建一个employees表的视图

1
2
3
4
create view employeesView
as select emp_no, birth_date, first_name, last_name, gender
from employees
where gender = 'M';

eg. 创建一个employees表的视图并要求进行修改和插入操作时仍需保证该视图中只有gender=’M’的雇员

1
2
3
4
5
create view employeesView
as select emp_no, birth_date, first_name, last_name, gender
from employees
where gender = 'M'
with check option;

创建视图的语法和用法与创建表格基本一致,可以参考前面的笔记。

对修改基表的结构后(指修改属性 / 列),视图和基表之间的映射关系可能被破坏,这会导致视图无法正常工作。

删除视图

  • 语句格式
1
DROP  VIEW  <视图名>[CASCADE];
  • 该语句从数据字典中删除指定的视图定义

  • 如果该视图上还导出了其他视图,使用CASCADE级联删除语句,把该视图和由它导出的所有视图一起删除

  • 删除基表时,由该基表导出的所有视图定义都必须显式地使用DROP VIEW语句删除

查询视图

  • 用户角度:查询视图与查询基本表相同

  • 关系数据库管理系统实现视图查询的方法

    • 视图消解法(View Resolution)

      • 进行有效性检查

      • 转换成等价的对基本表的查询

      • 执行修正后的查询

eg. 在信息系学生的视图中找出年龄小于20岁的学生。

1
2
3
SELECT  Sno,Sage
FROM IS_Student
WHERE Sage<20;

视图消解转换后的查询语句为:

1
2
3
SELECT Sno,Sage    
FROM Student
WHERE Sdept= 'IS' AND Sage<20;

但是在有些情况下,视图消解法不能生成正确的查询

eg. 在S_G视图中查询平均成绩在90分以上的学生学号和平均成绩

1
SELECT * FROM S_G where Gavg >= 90;

S_G视图的子查询定义:

1
2
3
4
5
CREATE VIEW S_G(Sno, Gavg)
AS
SELECT Sno,AVG(Grade)
FROM SC
GROUP BY Sno;

更新视图

数据库系统会通过将对视图的更新转变为对基本表的更新

  • 允许对行列子集视图进行更新

  • 对其他类型视图的更新不同系统有不同限制

    • 更新视图的限制:一些视图是不可更新的,因为对这些视图的更新不能唯一地有意义地转换成对相应基本表的更新

eg. 含有平均值属性的视图,无法直接编辑平均值(因为它是有意义的,是计算出来的)

视图的作用

  • 当视图中数据不是直接来自基本表时,定义视图能够简化用户的操作

    • 基于多张表连接形成的视图

    • 基于复杂嵌套查询的视图

    • 含导出属性的视图

  • 视图机制能使不同用户以不同方式看待同一数据,

  • 适应数据库共享的需要

  • 使用户的外模式保持不变,用户的应用程序通过视图仍然能够查找数据

  • 由于对视图的更新是有条件的,因此应用程序中修改数据的语句可能仍会因基本表结构的改变而改变。

  • 视图能够对机密数据提供安全保护

    • 对不同用户定义不同视图,使每个用户只能看到他有权看到的数据
  • 适当的利用视图可以更清晰的表达查询

数据库安全性

  • 问题的提出

    • 数据库的一大特点是数据可以共享

    • 数据共享必然带来数据库的安全性问题

    • 数据库系统中的数据共享不能是无条件的共享

    • 军事秘密、国家机密、新产品实验数据、市场需求分析、市场营销策略、销售计划、客户档案、医疗档案、银行储蓄数据

  • 数据库的安全性是指保护数据库以防止不合法使用所造成的数据泄露、更改或破坏 。

  • 系统安全保护措施是否有效是数据库系统主要的性能指标之一。

TCSEC / TDI安全级别划分

  • 按系统可靠或可信程度逐渐增高

  • 各安全级别之间具有一种偏序向下兼容的关系

安全级别 定义
A1 验证设计(Verified Design)
B3 安全域(Security Domains)
B2 结构化保护(Structural Protection)
B1 标记安全保护(Labeled Security Protection)
C2 受控的存取保护(Controlled Access Protection)
C1 自主安全保护(Discretionary Security Protection)
D 最小保护(Minimal Protection)

计算机系统的安全模型

  • 计算机系统中,安全措施是一级一级层层设置

  • 系统根据用户标识鉴定用户身份,合法用户才准许进入计算机系统

  • 数据库管理系统还要进行存取控制,只允许用户执行合法操作

  • 操作系统有自己的保护措施

  • 数据以密码形式存储到数据库中

image-20220606223528767

image-20220606223556049

存取控制

  • 存取控制机制组成

    • 定义用户权限,并将用户权限登记到数据字典中

      • 用户对某一数据对象的操作权力称为权限

      • DBMS提供适当的语言来定义用户权限,存放在数据字典中,称做安全规则或授权规则

    • 合法权限检查

      • 用户发出存取数据库操作请求

      • DBMS查找数据字典,进行合法权限检查

  • 用户权限定义和合法权检查机制一起组成了数据库管理系统的存取控制子系统

自主存取控制(Discretionary Access Control,简称DAC)

  • C2级
  • 用户对不同的数据对象有不同的存取权限
  • 不同的用户对同一对象也有不同的权限
  • 用户还可将其拥有的存取权限传授给其他用户

强制存取控制(Mandatory Access Control,简称 MAC)

  • B1级

  • 每一个数据对象被标以一定的密级

  • 每一个用户也被授予某一个级别的许可证

  • 对于任意一个对象,只有具有合法许可证的用户才可以存取

ch24