《数据库系统概念(第六版)》读书笔记——第6章:高级SQL

这篇读书笔记探讨了《数据库系统概念》第6章的内容,主要关注高级SQL特性,包括JDBC、函数和过程的声明与调用,以及触发器的定义、需求和适用场景。文章通过示例解释了SQL与Java/C++/C编写函数和过程的区别,并提醒读者触发器虽然功能强大,但在某些情况下并不推荐使用。

高级SQL

标签(空格分隔): 数据库


JDBC

示例(来自课后习题)

public class ResultSetTable {
   
   
    private ResultSet resultSet;
    private ResultSetMetaData reslutSetMetaDate;
    private int cols_num;

    public void resultSetTable (ResultSet resultSet) throws SQLException {
        this.resultSet = resultSet;
        reslutSetMetaDate = resultSet.getMetaData();
        cols_num = reslutSetMetaDate.getColumnCount();

        for (int i = 1; i <= cols_num; i++) {
            System.out.println(reslutSetMetaDate.getColumnName(i) + '  ');
        }
        while ( resultSet.next()) {
            for (int i = 1; i  <= cols_num; i++) {
                system.out.println(reslutSet.getString(reslutSetMetaDate.getColumnName(i)) + ' ');}
        }
    }
}

示例二

函数和过程

1. SQL和Java/C++/C都可以编写函数和过程,有什么不同?

SQL
函数和过程允许“业务逻辑”作为存储过程记录在数据库中,并在数据库内执行。尽管这样的“业务逻辑”能被写成程序设计语言过程并完全存储在数据库之外,但把它们定义成数据库的存储过程有以下的优点

- 允许多个应用访问
- 当业务规则发生变化时,进行单个节点的改变,而不必更改应用程序的其他部分
- 应用代码可以调用存储过程,而不是直接更新数据库关系
程序设计语言
SQL标准不被很多数据库所支持,由此,即便是最基本的特性在不同的数据库产品中,都会有不同的语法与语义。在这种情况下,使用一种命令式程序设计语言,从SQL查询和触发器的定义中调用,可以免去程序员学习多种非标准数据库语言的烦恼。

2. 声明和调用SQL函数和过程

示例一:普通函数
--声明函数
--给定系名,返回该系的教师数木
create function dept_count (dept_name varchar(20))
    returns integer
    beign
        declare d_count integer
        select d_count integer
        from instructor
        where instructor.dept_name = dept_name;
        return d_count;
    end
--调用函数
--返回教师数大于12的所有系的名称和预算
select dept_name, budget
from department
where dept_count(dept_name) > 12;
示例二:表函数——返回表作为结果
--声明函数
--返回包含某特定系的所有教师的表
create function instructor_of(dept_name varchar(20))
    returns table(
            ID varchar(5),
            name varchar(20),
            dept_name varchar(20),
            salary numeric(8, 2))
    retu
### 数据库系统概论学习笔记 #### 一、数据库安全性概述 数据库的安全性是指保护数据库以防止未经授权或不合法的使用所造成的泄露、更改或破坏。为了实现这一目标,多种安全措施被采用,其中包括访问控制、自主存取控制(DAC)和强制存取控制(MAC),以及视图机制和审计功能等[^1]。 #### 二、数据库应用开发流程 在构建基于数据库的应用程序过程中,应当同步推进应用程序编码工作与实际数据库结构的设计,在此期间不仅要考虑如何有效地存储所需的信息,还需关注于确保整个系统的稳定性和性能表现。当进入测试阶段时,则需特别注意对新建立起来的数据环境进行全面验证,包括但不限于功能性检测、压力测试等方面的工作[^2]。 #### 三、故障恢复策略 针对可能出现的各种意外情况——比如由于硬件损坏或是软件错误引发的问题——有效的灾难恢复计划至关重要。具体来说就是指即使是在遇到诸如未完成的操作影响到了现有记录的状态变化这类复杂情形下也能迅速恢复正常运作的能力;而这一切通常都是通过预先设定好的自动化脚本来执行,并不需要人工介入就能顺利完成整个过程[^3]。 #### 四、关于视图的理解 视图是一种虚拟表格,其内容由查询语句定义而不是物理上存在的数据集合。这意味着每当用户请求查看某个特定视角下的信息时,实际上是从底层的真实表里提取最新版本的结果集来展示给最终使用者看。因此如果源端有任何变动都会立即反映到所有关联着该对象的地方上去[^4]。 ```sql CREATE VIEW v_employee AS SELECT employee_id, first_name, last_name FROM employees; ``` 上述SQL命令创建了一个名为`v_employee`的视图,它仅显示员工ID及其名字和姓氏字段的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值