什么都不会的学习之路——数据库(未完结)

第一章绪论

1.数据库系统概述

1.数据库四个基本概念

  1. 数据

    定义:描述事物的符号记录

    特点:数据与其语义是不可分的

    结构:记录是计算机存储数据的一种格式或一种方法。

  2. 数据库

    定义:是长期存储在计算机内、有组织的可共享大量数据的集合

    基本特征:数据按一定的数据模型组织、描述和储存

    ​ 可为各种用户共享、冗余度较小、易扩展

    ​ 数据独立性较高

  3. 数据库管理系统

    用途:科学地组织和存储数据、高效地获取和维护数据

    功能:数据定义功能

    ​ 数据组织、存储和管理

    ​ 数据操纵功能

    ​ 数据库的事务管理和运行管理

    ​ 数据库的建立和维护功能

  4. 数据库系统

2.数据管理技术的产生和发展

  1. 数据管理技术的发展过程:(共享程度;独立性;结构化;控制能力)

    人工管理阶段:无共享,冗余度极大;

    ​ 不独立,完全依赖于程序;

    ​ 无结构;

    ​ 应用程序自己控制

    文件系统阶段:共享性差,冗余度大;

    ​ 独立性差;

    ​ 记录内有结构,整体无结构;

    ​ 应用程序自己控制

    数据库系统阶段:共享性高,冗余度小;

    ​ 具有高度的物理独立性和一定的逻辑独立性;

    ​ 整体结构化,用数据模型描述;

    ​ 由DBMS提供数据安全性、完整性、并发控制和恢复能力

2.数据模型

1.两类数据模型

  1. 概念模型,也称信息模型
  2. 逻辑模型和物理模型

2.概念模型

1.E-R图

  1. 概念

    实体型 (矩形)

    属性 (椭圆形)

    联系 (菱形)

  2. 关系

    实体集和属性之间的关系

    联系和属性之间的关系

    实体集和联系之间的关系

3.数据模型组成要素

数据结构、数据操作和完整性约束

4.层次模型

树形结构来表示各类实体以及实体间的联系

​ 特点:

  • 结点的双亲是唯一的

  • 只能直接处理一对多的实体联系

  • 每个记录类型可以定义一个排序字段,也称为码字段。

  • 任何记录值只有按其路径查看时,才能显出它的全部意义。

  • 没有一个子女记录值能够脱离双亲记录值而独立存在。

    数据操作:查询、插入、删除、更新

5.网状模型

​ 网状数据库系统采用网状结构来表示各类实体以及实体间的联系。

​ 特点:

  • 允许多个结点没有双亲结点
  • 允许一个结点有多个双亲结点
  • 允许两个结点之间有多种联系
  • 要为每个联系命名,并指出与该联系有关的双亲记录和子女记录

3.数据库系统的结构

数据库系统的三级模式结构:模式、外模式、内模式

  1. 模式:

    1. 数据库中全体数据的逻辑结构和特征的描述

    2. 模式的地位:是数据库系统模式结构的中间层

  2. 外模式

    1. 数据库用户使用的局部数据的逻辑结构和特征的描述

      数据库用户的数据视图,是与某一应用有关的数据的逻辑表示

    2. 外模式的用途:

      保证数据库安全性的一个有力措施
      每个用户只能看见和访问所对应的外模式中的数据
      外模式描述的是数据的局部逻辑结构

  3. 内模式

    1. 是数据物理结构和存储方式的描述
      是数据在数据库内部的表示方式

    2. 用途

      记录的存储方式(顺序存储,按照B树结构存储,按hash方法存储)
      索引的组织方式
      数据是否压缩存储
      数据是否加密
      数据存储记录结构的规定

4.小结

  1. 数据库系统概述

    数据库的基本概念

    数据管理的发展过程

    数据库系统的特点

  2. 数据模型

    数据模型的三要素

    三种主要数据库模型

    数据库系统内部的系统结构

  3. 数据库系统内部的系统结构

    数据库系统三级模式结构

    数据库系统两层映像系统结构

  4. 数据库系统的组成

第二章 关系数据库

1.关系数据结构及形式化定义

1.关系

  • 单一的数据结构——关系

  • 逻辑结构——二维表

  1. 域:域是一组具有相同数据类型的值的集合

  2. 笛卡尔积:笛卡尔积是域上面的一种集合运算。笛卡尔积可表示为一个二维表,表中每行对应一个元组,表中每一列的值来自一个域

  3. 关系

    候选码:关系中的某一属性组的值能唯一地标识一个元组

    主码:一个关系有多个候选码,则选定其中一个为主码

    全码:若所有的属性组是候选码,那么称之为全码

    主属性:候选码的属性称为主属性,不包含在任何候选码的属性叫做非主属性或非码属性

2.关系模式

关系模式是型(静态),关系是值(动态)
关系模式是对关系的描述:

  • 元组集合的结构
  • 完整性约束条件

关系模式形式化表示:R(U,D,DOM,F)

3.关系数据库

  1. 关系数据库:在一个给定的应用领域中,所有关系的集合构成一

    个关系数据库

  2. 关系数据库的型: 关系数据库模式,是对关系数据

    库的描述

  3. 关系数据库的值**😗* 关系模式在某一时刻对应的关系

    的集合,通常称为关系数据库

4.关系模型的存储结构

2.关系操作

  1. 常用的关系操作:

    查询操作:选择投影,连接,除,,交,笛卡尔积

    数据更新:插入,删除,修改

  2. 关系操作的特点:

    操作的对象和结果都是集合,一次一集合的方式

3.关系的完整性

  1. 实体完整性:

    若属性A是基本关系R的主属性,则属性A不能取空值

  2. 参照完整性

    若属性F是基本关系R的外码它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:或者取空值(F的每个属性值均为空值)或者等于S中某个元组的主码值

4.关系代数

1.传统的集合运算

并、差、交、笛卡儿积、

2.专门的关系运算

象集:行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0SwhTggI-1653455468294)(C:\Users\86151\AppData\Roaming\Typora\typora-user-images\image-20220320115241290.png)]

1.选择:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZQYrIILX-1653455468295)(C:\Users\86151\AppData\Roaming\Typora\typora-user-images\image-20220320112726704.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KtECsA2l-1653455468296)(C:\Users\86151\AppData\Roaming\Typora\typora-user-images\image-20220320112857181.png)]

​ F:选择条件,逻辑表达式

​ R:关系R,全局

2.投影(列):[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3PuflzMg-1653455468298)(C:\Users\86151\AppData\Roaming\Typora\typora-user-images\image-20220320113107803.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KpaUxGOq-1653455468302)(C:\Users\86151\AppData\Roaming\Typora\typora-user-images\image-20220320113245679.png)]

​ A:R中的属性列

3.连接:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tLIRN7LZ-1653455468303)(C:\Users\86151\AppData\Roaming\Typora\typora-user-images\image-20220320113845157.png)]

其实就是根据 某个值将两个表连接在一起

悬浮元组:两个表中没有公共属性未被连接的元组称为悬浮元组

外连接:把悬浮原则也保存在结果关系中,将没有的属性值填(Null)

左(右)外连接:只保留左(右)边关系R中的悬浮元组

4.除运算:R➗S

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pDLBeAf7-1653455468304)(C:\Users\86151\AppData\Roaming\Typora\typora-user-images\image-20220320115041102.png)]

第三章SQL语言

1.数据定义

1.基本表定义、删除、修改

  1. 定义基本表:create table<表名>
  2. 查询基本表:select * from<表名>
  3. 修改基本表:alter table<表名>
  4. 删除基本表:drop table<表名>

2.索引的建立与删除

  1. 建立索引:create unique index <索引名> on <表名>(<列名>[<次序>])
  2. 删除索引:drop index<表名字>.<索引名>

2.数据查询

1.单表查询

  1. 选择表中若干列:

    select语句中的目标列不仅可以为表中的属性列,也可以是表达式

  2. 选择表中的若干元组:

    1. 比较大小:<,>,=,!=等

    2. 确定范围:between and

    3. 确定集合:in

    4. 字符匹配:like、通配符(%–表示任意长度字符串 、 _—表示单个字符)、转义(\)

    5. 空值查询:is null

    6. 多重条件查询:and、or

  3. ORDER BY子句:

    升序(空值最后显示):asc;降序(空值最先显示):desc;

  4. 聚集函数:

    1. 统计元组个数:count(*)
    2. 统计一列中值的个数:count(distinct |all <列名>)
    3. 平均值:avg(<列名>)
    4. 最大小值:max(<列名>)、min(<列名>)
  5. GROUPBY子句:

    使用group by子句后,select子句的列名列表中只能出现分组属性和集函数。

    where子句中不能用聚集函数作为条件表达式,要用having

    having和where区别:

    ​ where作用于基本表或试图、having作用于组

    例:

    1. 求各个课程号及相应的选课人数

      select cno,count(sno)
      from sc
      group by cno
      
    2. 查询选修2门以上课程的学生学号

      select sno 
      from sc group by sno
      having count(cno)>2
      
    3. 查询平均成绩大于等于80分的学生学号和平均成绩

      select sno avg(grade)
      from sc
      group by sno
      having avg(grade)>80
      

2.连接查询

  1. 等值与非等值连接查询

    等值连接:连接运算符为=

    select student.*,sc.*
    from student,sc
    where student.sno=sc.sno
    
  2. 自身连接

    需要给表起别名以示区别

    由于重名,需要别名前缀

    select c1.cno,c2.cpno
    from course c1,course c2
    where c1.cpno=c2.cno
    
  3. 外连接

    左外连接:left outer join<表名>on

    select student.sno,sname,ssex,sage,sdept,cno,grade
    from student left outer join sc on (student.sno=sc.sno)
    
  4. 多表连接

    两个以上的表进行连接

    select student.sno,sname,cname,grade
    from student,sc,course
    where student.sno=sc.sno and sc.sno=course.cno
    

3.嵌套查询

  1. 带有谓词in的子查询

    select * from student where sdept in
    (select sdept from student where sname='刘晨')
    
  2. 带有比较运算符的子查询

    select sno,cno
    from sc x
    where grade >=
    (select avg(grade) from sc y where y.sno=x.sno)
    
  3. 带有any(some)或all谓词的子查询

    select sname,sage from student where sage<any
    (select sage from student where sdept='cs')and sdept!='cs'
    
  4. 带有exists谓词的子查询

4.集合查询

  1. union:将多个查询结果合并起来,系统自动去掉重复元组

    select sno from sc where cno='1' union
    select sno from sc where cno ='2'
    
  2. union all:将多个查询结果合并起来,保留重复元组

3.数据更新

1.插入数据

  1. 插入元组

    insert into<表名>[(<属性列>) ]values(<常量1>)

    ​ 指定属性列:与指定属性列一致,

    insert
    into student (sno,sname,ssex,sdept,sage)
    values('201215128','陈东','男','IS',18)
    

    ​ 不指定属性列:与表顺序一致,

    insert
    into student
    values('201215128','陈东','男',18,'IS')
    

    ​ 空值情况:空值

    select * from sc
    insert
    into sc 
    values('201215128','1',null)
    
  2. 插入子查询结果

2.修改数据

update<表名> set<列名>=<表达式> where<条件>

  1. 修改某一个元组的值

    update student set sage=22 where sno='201215128'
    
  2. 修改多个元组的值

    update student set sage=sage+1
    
  3. 带有子查询

    select * from sc
    update sc set grade='0' 
    where sno in (select sno from student where sdept='cs')
    

3. 删除数据

delete from <表名> where <条件>

  1. 删除某一个元组的值

    delete from student where sno='201215128'
    
  2. 删除多个元组的值

    delete from student where sno='201215128'
    
  3. 删除带有子查询

    delete from sc where sno in (select sno from student where sdept='cs')
    

4.空值的处理

1. 空值的产生

写了的属性:null,没写的:默认mull

不知道,不存在的值

5.视图

1.建立视图

create view<视图名> as<子查询>

  1. 基于单表

    /*建立信息系学生的视图*/
    create view stu as 
    select * from student where sdept='is'
    
  2. 基于多表

    /*基于多个基表的视图*/
    create view is_stu_c1(sno,sname,grade) 
    as
    select student.sno,sname,grade from student,sc 
    where sdept='is'and student.sno=sc.sno and sc.cno='1'
    
  3. 基于视图的视图

    /*建立信息系选修了1号课程且成绩在90分以上的学生的视图*/
    create view is_cl_grade 
    as
    select sno,sname,grade 
    from is_stu_c1 
    where grade>=90
    
  4. 带表达式的视图

    /*定义一个反应学生出生年份的视图*/
    create view stu_birth(sno,sname,sbirth)
    as
    select sno,sname,2022-sage 
    from student
    
  5. 分组视图

    /*将学生的学号和平均成绩定义为一个视图*/
    create view stu_avgGrade(sno,avg_grade)
    as
    select sno,avg(grade)
    from sc
    group by sno
    

2.删除视图

drop view <视图名>

3.查询视图

select

4.更新视图

与数据更新基本一致,但是一些视图是不能更新的

第四章数据库完整性

数据的正确性、数据的相容性

1.实体完整性

1. 实体完整性定义

  1. create table中用primary key定义

  2. 注意,单/多属性构成的码的说明方法

    (单)列级约束条件

    (单)表级约束条件(多,只能用表约束)

2.实体完整性检查和违约处理

  1. 检查主码值是否唯一
  2. 检查主码的各个属性是否为空

2.参照完整性

1.参照完整性定义

  1. create table中用foreign key定义

2.参照完整性检查和违约处理

3.用户定义的完整性

4.完整性约束命令字句

第五章SQL Server编程结构

  1. 变量

    1. 局部变量:

      格式:declare @变量名 变量类型[, …n ]

      DECLARE  @myc1   INT
      

      赋值:select @局部变量=变量值

      ​ set @局部变量=变量值

      SET   @myc1=“abc”
      SELECT  @myc1=123
      
    2. 全局变量:以@@开头

    3. begin–end语句块:允许嵌套使用,begin end成对出现

      格式:begin

      ​ < SQL语句| SQL语句块>

      ​ end

    4. if — else条件语句

      格式:if<条件>

      ​ < SQL语句| SQL语句块>

      ​ [else

      ​ < SQL语句| SQL语句块>]、

    5. case语句

      格式:case <运算式>

      ​ when <运算式> then<运算式>

      ​ when <运算式> then<运算式>

      ​ [else<运算式> ]

      ​ end

      USE  student-course
          GO
         UPDATE   sc
         SET   Grade=
         CASE
          WHEN  cno=001THEN  grade*1.1
          WHEN  cno=002THEN  grade*1.05
          WHEN  cno=003THEN  grade*1.1
         END
         GO
      
    6. 循环语句

      格式:while <条件>

      ​ < SQL语句| SQL语句块>

      ​ [break]

      ​ [continue]

    7. 转移语句

      格式:GOTO <标号>

      --例:求解5!
             DECLARE    @s   INT,  @t   INT
             SET  @s=1
             SET  @t=1
      REPEAT:
             SET  @s=@s*@t
             SET  @t=@t+1
             IF    @t<=5
                     GOTO   REPEAT
             PRINT5的阶乘=+STR(@s)
      
      
    8. 输出语句

      SELECT <表达式|变量>

      PRINT <表达式|变量>

第六章 存储过程

1.创建和执行存储过程:

create procedure 存储过程名

[ {@参数1 数据类型} [= 默认值] [OUTPUT],

…… ,

{@参数n 数据类型} [= 默认值] [OUTPUT]

]

as
sql语句

1.无参数

/*创建*/
create procedure p1
as
select * from sc where grade>=90
/*执行*/
exec p1

2.带参数

/*创建*/
create procedure p2(@cj int)
as
select * from sc where grade>=@cj
/*执行*/
exec p2 90

3.默认值

/*创建*/
create procedure p3(@cj int=90)
as
select * from sc where grade>=@cj
/*执行默认*/
exec p3
/*执行输入*/
exec p3 80

4.通配符

/*创建*/
create procedure p4(@name char(10)='%李勇')
as
select * from student where sname like @name
/*执行默认*/
exec p4
/*执行输入*/
exec p4 's%'

2.修改存储过程

alter procedure 存储过程名

​ [ {@参数1 数据类型} [= 默认值] [OUTPUT],

​ …… ,

​ {@参数n 数据类型} [= 默认值] [OUTPUT] ]

as

SQL语句

alter procedure select_students 
as select * from student 
where sdept ='sc'

3.删除存储过程

drop procedure select_students

4.触发器

不允许使用参数,没有返回值。

不允许用户调用,当对表进行插入、删除、修改操作时由系统自动调用并执行(相当于事件方法)。

1. 创建触发器

​ create trigger 触发器名

​ on { 表名|视图名 }

{for|after|instead of}[insert,update,delete]

​ as

​ SQL语句系列

注意:

1. CREATE  TRIGGER语句必须是一个批处理的第一条语句。
2. 创建触发器的权限默认属于表的所有者,且不能授权给其他人。
3. 触发器不能在临时表或系统表上创建,后触发也不能创建在视图上。
4. 一个触发器只能创建在一个表上;
5. 一个表可以有一个替代触发器和多个后触发器(可以是同一种操作类型,可同时触发)。
 /*创建一个表table1,其中只有一列a。在表上创建一个触发器,每次插入操作时,将变量@str的值设为“TRIGGER IS WORKING”并显示。
*/
create table table1(a int)
go
/*创建触发器*/
create trigger table_insert
on table1
after insert
as
begin
declare @str char(50)
set @str = 'TRIGGER IS WORKING'
print @str
end
go
/*验证*/
insert into table1
value(11)

2. 查看触发器的定义和相关性

1、查看触发器基本信息

语法格式:sp_help 触发器名

2、查看触发器定义

语法格式:sp_helptext 触发器名

3、查看触发器的依赖关系(相关性

语法格式:sp_depends 触发器名

3.触发器的修改和删除

  1. 修改触发器

    alter tigger 触发器名

    on 表名

    for { [delete],[ update] ,[ insert] }

    [not for replication]

    as

    SQL语句

  2. 重命名触发器

    sp_rename 原触发器名,新触发器名

  3. 删除触发器

    drop trigger 触发器名

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值