第一章

三级模式结构

  • 模式
  • 外模式
  • 内模式

两级映射

  • 外模式 / 模式映像
  • 模式 / 内模式映像

数据库管理系统的六个功能

  • 数据定义
  • 数据查询
  • 数据插入、更新、删除功能
  • 数据库事务管理
  • 数据库安全和完整性控制功能
  • 数据备份和恢复功能

第二章

完整性约束条件的理解

  • 实体完整性

    • 主属性不能取空值
  • 参照完整性

  • 用户自定义的完整性

关系代数表达式

第三章

SQL语句

  • 定义模式

    create schema "模式名" authorization "用户名";
  • 删除模式

    drop schema "模式名" <cascade | restrict>; -- 必须二选一;前者级联删除(all)
  • 创建表

    create table 表名 (
        Sno Char(9) primary key,
        Sname char(20) unique
    )
  • 修改基本表

    alter table "表名"
    add <新列名> <数据类型>
    drop <列名> <数据类型>;
  • 删除基本表

    drop table <表名> [ cascade | restrict ]

    如果表上有 View ,选择restrict 就不能删除掉表,选择 cascade 就可以删除,并且删除视图。

  • 建立索引

    create [unique] index <索引名>
    on <表名> (<列名>)
    ---栗子
    create unique index SsnoCon on Student(Sno ASC,Cno DESC);
  • 修改索引

    alter index SCno rename to 新名字;
  • 删除索引

    drop index <索引名>;

数据查询

  • 数据查询

    • 单表查询
    select * from 表名
    where <条件表达式>    -- where 列名 like '_话%'   || _ 单个字符; % 多个字符
    group by <列名1>
    having <条件表达式>
    order by <列名> [desc];

    当聚集函数(除了count(*))其他的遇到空值就跳过。

    • 连接查询

      • 等值查询与非等值查询

        select student.*,SC.*
        from student,SC
        where student.sno=sc.sno;
      • 自身连接

        select first.cno,second.cpno
        from course first,course second
        where first.cpno=second.cno;
      • 外连接

        select student.sno,sname,Ssex
        From Student left outer join sc on (student.sno=sc.sno);
      • 多表连接

        select student.sno,Sname,Grade
        From Student,SC,Course
        Where Student.sno=Sc.sno And Sc.sno,Course.sno;

数据更新

  • 插入元组

    insert 
    into <表名> [(<属性名1>,<属性名2>,...)]   //属性名省略就默认全部
    values 
    (<常量1>,<常量2>,...),
    (<常量1>,<常量2>,...);

    插入子查询的结果

    Create table <表名>
        (
            Sdep Char(15),
             Avg_age SMALLINT
        );
    Insert
    into <表名>
    select Sdep,Avg(Sage)
    From Student
    Group By Sdep;
  • 修改数据

    update <表名>
    set <列名>=<表达式> [,<列名>=<表达式>] ...
    [Where <条件>];
    ----举个例子------
    update student 
    set Sage=22
    where Sno='20213111';
  • 删除数据

    delete
    from <表名>
    [where <条件>];
    ------举个例子----------
    delete from sc;
    delete from student where sno='1111';

视图 View

  • 建立视图

    create view 视图名
    as 子查询
    [with check option]
    -----------举个例子------------
    create view Is_Student
    AS
    Select Sno,Sname,Sage
    From Student
    Where Sdept='IS';
  • 删除视图

    drop view 视图名 [cascade];
  • 查询视图

    select sno,sage
    from IS_Student
    Where Sage<20;
  • 更新、插入、删除视图

    update IS_Student
    Set Sname='LiHUa'
    Where Sno='2021';
    Insert
    into xxx
    values(xxx,xxx,xxx);
    Delete
    From IS_Student
    Where Sno='2021';

第四章

grant 语句的使用

Grant <权限> on table <表名> to <用户名> [with grant option];
-----举个例子-----------
grant select on table student to U1 with grant option;
grant all on table student to u1;
grant update(sno),select on table student to u4;

revoke 收回权限 (to改成from)

第五章

完整性规则

  • 完整性规则创建
constraint <完整性约束条件名> <完整性约束条件>
--------栗子-----------------
Create Table Student
    (
        Sno NUMERIC(6)
            Constraint c1 check (sno between 90000 and 9999999),
        Sname char(20)
            constraint c2 not null
    );
  • 修改--->去掉

    alter table Student
    drop constraint c1;
  • 修改----> 修改

    alter table student
        drop constraint c1;
    alter table student
        add constraint c1 check (sno between 1 and 10000);

触发器

  • 创建

    create trigger 触发器名字
    {before | after} 触发时间 on 表名
    Referencing new|old row as 变量
    for each {ROW|Statement}    -- 定义触发器的类型
    [when 触发条件] 触发动作体
    ----------举个栗子--------------
    create trigger SC_T
    after update of Grade on SC
    Referencing
        OldRow as oldTuple
        newrow as newtuple
    for each row                 -- 行级触发
    when (newtuple.grade >= 1.1 *oldtuple.Grade)  -- 触发的条件
        insert into SC_U (Sno,Cno,OldGrade,NewGRade)
        values (oldtuple.sno,oldtuple.cno,newtuple.grade);

    before 行级触发器

    create trigger insert_or_update_sal
    before insert or update on Teacher
    referencing new row as newTuple
    For Each Row
    Begin
        IF (newTuple.Job='教授') AND (newtuple.Sal < 4000)
            Then newTupleSal :=4000;
        End If;
    End;
  • 删除触发器

    drop trigger 触发器名 on 表名;

第六章

范式的判定,模式的分解

第七章

ER图的设计

第八章

存储过程

Create or replace procedure 过程名 ([参数1,参数2,...])
AS <过程化SQL块>
----------栗子-------------
create or replace procedure Transfer(inAccount INT,outAccount INT,amount FLOAT)
AS declare       -- 定义变量
    totalDepositOut Float;
    totalDepositIn Float;
    intAccountnum Int;
Begin 
    Select Total Into totalDepositOut From Account Where accountnum= outAccount;
    If totalDepositOut IS Null Then
        Rollback;
        Return;
    End If;
    IF totalDepositOut < amount Then
        Rollback;
        Return;
    End If;
    Select Accountnum Into inAccountnum From Account Where accountnum= inAccount;
    IF inAccountnum Is Null Then
        Rollback;
        Return;
    End If;
    Update Account Set total= total-amount Where accountnum=outAccount;
    Update Account Set total= total+amount Where accountnum=inAccount;
    Commit;
END;

----执行过程----------
Call Procedure Transfer(2021,2022,10000);
  • 修改存储过程

    /-- 重命名
    Alter Procedure 过程名1 Rename To 过程名2;
    /-- 重新编译
    Alter Procedure 过程名 Compile;
    /-- 删除
    Drop procedure 过程名();

函数:

Create or replace Function 函数名([参数1,参数2,...]) Return 类型
AS 过程化SQL语句
Last modification:June 12, 2023
请我喝瓶冰阔落吧