第一章
三级模式结构
- 模式
- 外模式
- 内模式
两级映射
- 外模式 / 模式映像
- 模式 / 内模式映像
数据库管理系统的六个功能
- 数据定义
- 数据查询
- 数据插入、更新、删除功能
- 数据库事务管理
- 数据库安全和完整性控制功能
- 数据备份和恢复功能
第二章
完整性约束条件的理解
实体完整性
- 主属性不能取空值
参照完整性
- 用户自定义的完整性
关系代数表达式
第三章
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语句