数据库系统概论学习手记(二)

课前(等待操作)
    #
    insert into 后跟子查询的实践

    即 insert into name select 列 from name1 where ---
视图
        #
        视图是从一个或者几个基本表导出的表

        视图的子查询通常不允许有order by和distinct短语
        //mysql是允许的

        with check option //表示对视图进行update、insert、delete时要满足子查询中的条件表达式
        视图可以从多表建立;
        可以从其他视图;以及视图和基本表;

        基本表为了避免冗余数据,
        一般只存放基本基本数据,
        而那些通过计算等派生的数据一般用视图,
        因为视图不是实际存在的,是虚表。
        派生出基本表没有的列叫做虚拟列,
        带虚拟列的视图也成为表达式视图。

        还可以用带有函数集和group by 子句的查询来定义视图,这种视图又成为分组视图
        视图 用了as
        create view name(列,列2)as select ....

        where 后面不能用集函数作为表达式
集函数 类似count(),avg()等

关于with check on 的实例
    #
    加入with check on 语句的view 在以后添加数据时,会先判断是否满足创建view表时的条件:
    create view view_uni as select id,name,sal from uni where id <3 with check option;

    select * from view_uni;
    +------+-------+------+
    | id   | name  | sal  |
    +------+-------+------+
    |    1 | Jan   | 1000 |
    |    2 | Grand | 2000 |
    +------+-------+------+
这里设置了id < 3,当插入id >=3 时
    #
    insert into view_uni(id) values(3);
    ERROR 1369 (HY000): CHECK OPTION failed 'day32.view_uni'

修改(更新)视图会修改基本表
    #
    update view_uni set id=4 where sal=2000;
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0

    mysql> select * from view_uni;
    +------+--------+------+
    | id   | name   | sal  |
    +------+--------+------+
    |    1 | Jan    | 1000 |
    |    4 | Grand  | 2000 |
    |    3 | Grands | 3000 |
    |    2 | guo    | 4000 |
    +------+--------+------+
    mysql> select * from uni;
    +------+--------+------+
    | id   | name   | sal  |
    +------+--------+------+
    |    1 | Jan    | 1000 |
    |    4 | Grand  | 2000 |
    |    3 | Grands | 3000 |
    |    2 | guo    | 4000 |
    +------+--------+------+
依赖列被修改时,该列也会被修改
    #
    create view view_uni as select id,name,sal,sal*1.5 as upsal from uni;
    //upsal 依赖sal
    select * from view_uni;
    +------+--------+------+--------+
    | id   | name   | sal  | upsal  |
    +------+--------+------+--------+
    |    1 | Jan    | 1000 | 1500.0 |
    |    4 | Grand  | 2000 | 3000.0 |
    |    3 | Grands | 3000 | 4500.0 |
    |    2 | guo    | 4000 | 6000.0 |
    +------+--------+------+--------+

    update view_uni set sal=1500 where id=1;
    select * from view_uni;
    +------+--------+------+--------+
    | id   | name   | sal  | upsal  |
    +------+--------+------+--------+
    |    1 | Jan    | 1500 | 2250.0 |
    |    4 | Grand  | 2000 | 3000.0 |
    |    3 | Grands | 3000 | 4500.0 |
    |    2 | guo    | 4000 | 6000.0 |
    +------+--------+------+--------+

    #
    视图的作用
        1.试图能简化用户的操作
        2.视图用户能以多种角度看待同一问题;
        3.视图对重构数据库提供了一定程度的逻辑独立性;
        4.视图能对机密数据提供安全保护。
授权
    #

    grant slect(权限) on table(对象类型)uni(对象)to user(用户)

    +--------+--------+------+--------+--------+--------+--------+--------+---------+
    |    对象  |  对象类型   |                    操作权限                          |
    +--------+--------+------+--------+--------+--------+--------+--------+---------+
    |   属性列 |   table     | select,insert,update,delete,all privileges       |
    |    视图  |   table     | select,insert,update,delete,all privileges       |
    |   基本表 |   table     | select,insert,update,delete,index all privileges |
    |   数据库 |  database   | createtable                                          |
    +--------+--------+------+--------+--------+--------+--------+--------+---------+
收回权限
    #
    revoke slect(权限) on table(对象类型)uni(对象)to user(用户)
嵌入式SQL
    #
    DBMS课采用两种方式处理
    一是预处理,DMBS预处理程序时将其主语言调用语句
    二是修改、扩充主语言使之能处理sql语句
    #
    在c中以;结束,开头加exec sql
    exec sql <sql语句>
    exec sql drop table uni
数据库单元与源程序工作单元之间的通信主要包括:
    #
    1.向主语言传递SQL语句执行状态信息,使主语言能够据此信息控制程序流程,主要SQL通信区(SQLCA)SQL通信(SQLCA)区是一个数据结构;
    2.主语言向SQL提供参数,主要用主变量(Host Variable)实现;

3.将SQL语句查询数据库的结果交主语言进一步处理,主要用主变量和游标(Cursor)实现

    #
    主变量
        我们把SQL语句中实用的主语句程序变量叫做 主变量
        主变量
            输入主变量
                由引用程序对其赋值,SQL语句调用。
            输出主变量
                由SQL语句对其赋值豁设置状态信息,返回给应用程序
            主变量可能即是输入主变量又是输出主变量。
        一个主变量可以附带一个指示变量
        指示变量是一个整形变量,用来 指示 主变量的值或条件
         所有主变量和指示变量必须在SQL语句begin declare section与end declare section之间进行说明
         SQL语句中主变量、指示变量前要加:作为标志
游标
     #
     SQL语句是面向集合的,一次可产生或处理多条记录,而主语言是面向记录的,一组主变量只能存放一条记录,为此引入 游标 

     游标:是系统为什么用户开设的一个数据缓冲区,存放SQL语句执行结果的,每个游标区都有一个名字。用户可以通过游标逐一获取记录,并赋值给主变量,交由主语句进一步处理。
     游标实际上反映了嵌入式SQL的工作原理

不使用游标的语句:
     #
        *说明性语句
        *数据定义语句
        *数据控制语句
        *查询结果为单一记录的select语句
        *非current形式的update语句
        *非current形式的delete语句
        *insert语句

    所有的说明性语句及数据定义与控制语句都不需要使用游标。它们是嵌入式SQL语句中最简单的一类语句。

使用游标的语句
       # *查询结果为多条的select语句
       *current形式的update语句
       *current形式的delete语句

动态SQL
    #
    为了弥补静态SQL语句的不足
    动态SQL语句有三种形式:
        *语句可变
        *条件可变
        *数据库对象可变、查询条件均可变

查询优化
    #
    查询优化的一般准则
        *选择运算尽可能先做。在优化策略中这是最重要最基本的一条。
        *在执行链接前对关系适当的预处理
        *把投影(project)和选择运算同时进行。
        *把投影同其前或后的双目运算结合起来
        *把某些选择同它前面要执行的笛卡尔积结合起来成为一个连接运算,连接特别是等值连接运算要比同样关系的笛卡尔积省很多时间
        *找出公共子表达式

关系数据理论
    #
    关系数据库中的关系是要满足一定要求的,满足不同程度要求的为不同范式。
    满足最低要求的叫做第一范式。
    第一范式:
    满足这个关系模式:每一个分量必须是不可分的数据项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值