精华内容
下载资源
问答
  • 数据库知识整理,包括数据库和表的创建,增删改查,子查询,关联查询,连接,交并差集,索引,序列,视图,各种函数,DDL、DML、DQL的实例。 每个知识点都有基于ORACLE scott 账户下employee 表的实例代码。
  • MySQL数据库知识整理

    2021-01-21 14:32:54
    本文是对MySQL数据库基础知识整理,希望能给您有所帮助 SQL, 数据, 数据库 上一篇:今天会是有Offer的一天么:面试...
  • 数据库知识整理

    千次阅读 2019-03-28 23:11:22
    where条件查询知识汇总 语法: where 条件表达式 常用的运算符 字符匹配符 在where子句中使用匹配符like或not like可以把表达式与字符串进行比较,从而实现对字符串的模糊查询。其语法格式如下: Where ...

     

    where条件查询知识汇总

    语法:

    where 条件表达式

    常用的运算符

    字符匹配符

    在where子句中使用匹配符like或not like可以把表达式与字符串进行比较,从而实现对字符串的模糊查询。其语法格式如下:

    Where 表达式 [not] like ‘字符串’ [escape ‘换码字符’]

    注意,比较字符串是不区分大小写的,如M%和m%是相同的比较运算符。

    例子:

    Select * from student where name like ‘李_’

    Select * from student where name like ‘李%’

    Select * from student where name like ‘[李王刘]%’

    Select * from student where name like ‘[^李王刘]%’

    分类汇总

    常用聚合函数的具体用法即含义

    例子:

    Select count(*) as total from student;

    Select count(distinct stuno) from student;

    Select max(成绩) as 最高分,min(成绩) as 最低分,avg(成绩) as平均分,sum(成绩) as 总分 from student where stuno=’10010’;

    分组汇总

    使用聚合函数只返回单个汇总,而在实际应用中,更多的是需要进行分组汇总,如汇总每个同学的平均分、总分等。使用group by字句可以进行分组汇总,为结果集中的每一行产生当一个汇总值。

    注意:select 子句中的列表只能包含在group by指定的列或聚合函数指定的列中,例如执行如下命令:

    Select 学号,课程号 from student group by 课程号

    必须删掉学号改成:

    Select 学号,课程号 from student group by 学号,课程号

    Select子句包含聚合函数则分类计算,又如:

    Select count(*) as num, class from student group by class;

    Select 子句包含where或all

    如果查询命令在使用where子句的同时又进行分组,那么语句的执行顺序是先确定选出满足条件的记录集,然后对此记录进行分组。又如:

    Select stuno,avg(score) as avrscore from student where score > 80 group by stuno;

    使用all时,则忽略where子句指定的条件,查询结果包含不满足where子句的分组,相应属性值用空值填充。又如:

    Select stuno,avg(score) as avrscore from student where score > 80 group by all stuno;

    分组刷选

    如果使用group by子句分组,则还可以用having子句对分组后的结果进行过滤筛选。与where子句区别

    1. 作用对象不同:where子句作用于表和视图中的行,而having子句作用于形成的组
    2. 执行顺序不同:若查询语句中同时又where子句和having子句,执行时,先去掉不满足where条件的行,然后分组,分组后再去掉不满足having条件的组。
    3. Where子句中不能使用聚合函数,但having子句的条件中可以包含聚合函数。

    例如查询选修4门及以上课程其成绩都在70以上的学生的学号和平均成绩:

    Select stuno,avg(score) as avrscore from student where score > 80 group by stuno; having count(lesson)>= 4

    嵌套查询

    嵌套查询,指一个select查询语句中包含另一个(或多个)select查询语句。例如:

    Select stuno,lesson from student where stuno = (select stuno from shool where name = ‘Tom’);

    此外还有all any关键字,又如:

    Select * from student where birthdate > all(select birthdate forom student where class = ‘1001’) 注出生日期都要比1001班的学生要晚。

    Select * from student where birthdate < any(select birthdate forom student where class = ‘1001’) 注出生日期都要比1001班的学生要早。

    多列多值嵌套查询

    如果子查询中的返回结果是一个多行多列的表,则这样的查询称为多列多值子查询。由于子查询返回多列多值,因此,在主查询中只能使用关键字exists或not exists进行匹配刷选。

    又如:

    Select * from student where exists (slect * from course where student.lessonno = course.lessonno and lesson=’dadabase technolege’)

     

    补充知识case when的使用

    case when也是一个很好的分类查询,与我们熟悉编程语言的switch case类似,用于分类执行一些设定的条件查询。

    select

    case when score > 90 then 'perfect'

    when score >80 and score < 90 then 'good'

    when score > 60 and score < 80 then 'ok'

    else 'bad' end score_class,

    count(*)

    from student

    group by

    case when score > 90 then 'perfect'

    when score >80 and score < 90 then 'good'

    when score > 60 and score < 80 then 'ok'

    else null end;

    参考:

    https://www.cnblogs.com/shuibi/p/6560237.html

    https://www.jianshu.com/p/e9355a81c94b

     

     

     

    展开全文
  • 此文档是作者身体力行,总结下来的经验,从最常用的建库,建表语句,到触发器,索引,函数,存储过程等,都有例子,由浅入深,简单实用,一看就会。一小时学会mysql,足矣。
  • Sytem ,简称 DBS ) :数据库系统是指在计算机系统中引入数据库后的系统构成,一般由数据库数据库管理系统(及其开发工具)、应用系统、数据库管理员构成。解析数据库系统和数据库是两个概念。数据库系统是一个人...
  • 数据库知识整理 - 数据库完整性

    千次阅读 多人点赞 2018-11-23 12:28:29
    主要内容 实体完整性 小拓展:索引的应用 参照完整性 用户定义的完整性 1. 属性上的约束条件 ...数据的完整性是为了防止数据库中存在不符合语义的数据;数据的安全性是保护数据库免受恶意破坏和非法存取。 ...

    主要内容

    1. 属性上的约束条件

    2. 元组上的约束条件

    1. 定义触发器

    2. 触发器激活顺序


     

    数据的完整性和安全性是两个既有联系又不尽相同的概念。数据的完整性是为了防止数据库中存在不符合语义的数据;数据的安全性是保护数据库免受恶意破坏和非法存取。

    下面我们将进一步了解数据库的完整性。


     

    实体完整性

    关系模型的实体完整性是关于元组(记录)唯一性的定义,在CREATE TABLE 中用PRIMARY KEY 来实现。

    主码由单个属性构成时,可使用列级约束条件表级约束条件;而当主码由多个属性构成时,只能使用表级约束条件。

    关于约束条件的内容可以回顾“基本表的定义、删除和修改”

     

    PROMARY KEY 短语定义了关系的主码后,每当用户程序对基本表插入一条记录或对主码列进行更新操作时,关系数据库管理系统都会按照实体完整性进行全表扫描,依次判断表中的每一条记录的主码值是否与即将插入记录的主码值相同。

    但这种全表扫描效率极低,因而关系数据库管理系统一般会在主码上自动建立一个索引


     

    小拓展:索引的应用

    假设在Student表中,学生的姓名Sname为主码。

    在基本表中,学生的记录是无序地逐条插入的,现在我们先后插入了Tom、Amy、Jenny、Belly、Jack和Anne的记录。

    (1)如果我们要查询Anne的资料,首先得找到“Anne”所在的元组,然后才能输出她的资料,而这样我们必须得遍历6个元组,因为Anne的记录在最后一行元组。

    (2)如果我们要查询Alex的资料,显而易见,Alex并不在Student表中,但计算机是不知道的,它必须得一个个去查去对比。遍历6个元组后,它才终于得出结论——No result。

    (3)如果我们要插入新同学Ben的资料,计算机依然要遍历6个元组,确定无重复后才能插入记录。

     

    当我们使用索引后,Student表中的记录顺序就会变成Amy、Anne、Belly、Jack、Jenny和Tom,按照字母表的顺序。

    接着我们再重复一遍上面的操作:

    (1)查询Anne的资料:根据索引,“A”有Amy和Anny,“A-n”只有Anne,可以开始查询,一共遍历2个元组

    (2)查询Alex的资料:根据索引,“A”有Amy和Anne,“A-l”没有对应的元组,无法查询,一共遍历2个元组

    (3)插入Ben的资料:根据索引,“B”只有Belly,“B-e”也还是Belly,而“B-e-n”无重复值,可以插入,一共遍历1个元组

     

    从这个简单的例子我们就可以看出索引对于查询效率的重大意义,以后有时间我会围绕“索引”再写一篇博文。


     

    参照完整性

    关系模型的参照完整性在CREATE TABLE 中用FOREIGN KEY 短语定义哪些列为外码,用REFERENCES 短语指明这些外码参照哪些表的主码。

    关于约束条件的内容可以回顾“基本表的定义、删除和修改”

     

    参照完整性将两个表中的相应元组联系起来了。因此,对参照表或被参照表进行增、删、改操作时,都有可能会破坏参照完整性,因此我们必须对违约操作进行处理:

    (1)拒绝执行(NO ACTION)—— 默认策略;

    (2)级联操作(CASCADE):当删除或修改被参照表的一个元组导致与参照表不一致时,同时删除或修改参照表中所有相关的元组;

    (3)设置为空值(SET NULL):当删除或修改被参照表的一个元组导致与参照表不一致时,将参照表中所有相关的元组的对应属性值设为空值。

     

    //显式说明参照完整性的违约处理示例:

    CREATE TABLE SC

    (Sno CHAR(9),

    Cno CHAR(4),

    Grade SMALLINT,

    PRIMARY KEY(Sno,Cno),                                       /*定义表级实体完整性*/

    FOREIGN KEY(Sno) REFERENCES Student(Sno)

               ON DELETE CASCADE

               ON UPDATE CASCADE,

    FOREIGN KEY(Cno) REFERENCES Course(Cno)

               ON DELETE NO ACTION                              /*当删除Course表中的元组造成与SC表不一致时,拒绝删除*/

               ON UPDATE CASCADE                                /*当更新Course表中的元组造成与SC表不一致时,级联更新*/

    );


     

    用户定义的完整性

     

    1. 属性上的约束条件

    在CREATE TABLE 中定义属性的同时定义约束条件:

    (1)列值非空(NOT NULL);

    (2)列值唯一(UNIQUE);

    (3)检查列值是否满足一个条件表达式(CHECK短语)。

    关于约束条件的内容可以回顾“基本表的定义、删除和修改”

    不满足约束条件的操作将被拒绝执行。

     

    //Student表的Ssex只允许取“男”或“女”:

    CREATE TABLE Student(

    Sno CHAR(9) PRIMARY KEY,

    Sname CHAR(20) UNIQUE,            

    Ssex CHAR(2) NOT NULL CHECK(Ssex IN ('男','女')),

    Sage SMALLINT,

    Sdept VARCHAR(20)

    );

     

    2. 元组上的约束条件

    同属性值限制相比,元组级的限制可以设置不同属性之间取值的相互约束条件。

    //当学生性别为男生时,其名字不能以“Ms.”开头:

    CREATE TABLE Student(

    Sno CHAR(9) PRIMARY KEY,

    Sname CHAR(20) UNIQUE,            

    Ssex CHAR(2) NOT NULL CHECK(Ssex IN ('男','女')),

    Sage SMALLINT,

    Sdept VARCHAR(20),

    CHECK (Ssex = '女' OR Sname NOT LIKE 'Ms.%')

    );


     

    完整性约束命名子句

    通俗点讲就是给一个约束条件起名字,方便增、删和改。需要先提一下的是,对于约束条件并没有ALTER短语,我们只能先把旧的删掉再插入一个新的。

    //学号在20170000~20170499之间,姓名不能取空值,年龄小于30,性别只能是“男”或“女”:

    CREATE TABLE Student(

    Sno NUMERIC(9)

          CONSTRAINT C1 CHECK (Sno BETWEEN 20170000 AND 20170499),

    Sname CHAR(20)

          CONSTRAINT C2 NOT NULL,

    Ssex CHAR(2)

          CONSTRAINT C3 CHECK(Ssex IN ('男','女')),

    Sage NUMERIC(2),

          CONSTRAINT C4 CHECK(Sage < 30),

    CONSTRAINT StudentPKey PRIMARY KEY(Sno) 

    );

     

    //去掉对性别的限制:

    ALTER TABLE Student

               DROP CONSTRAINT C3;

     

    //增加新的约束条件:

    ALTER TABLE Student

               ADD CONSTRAINT C5 CHECK(Sage < 25);


     

    域中的完整性约束条件

    域是一组具有相同数据类型的值的集合,类似于枚举类型。

    //建立一个性别域并声明域的取值范围:

    CREATE DOMAIN GenderDomain CHAR(2)

             CONSTRAINT GD CHECK (VALUE IN ('男','女'));


     

    断言

     

    在SQL中可以用CREATE ASSERTION 语句来指定更具一般性的约束。

    断言创建以后,任何对断言中所涉及关系的操作都会触发关系数据库管理系统对断言的检查,任何使断言不为真值的操作都会被拒绝执行。

     

    //限制数据库课程最多60名学生选修:

    CREATE ASSERTION ASSE_SC_NUM

    CHECK (60 >= (

              SELECT COUNT(*)

              FROM Course,SC

              WHERE SC.Cno = Course.Cno AND Course.Cname = '数据库')

                  );

    每当学生选修课程时,将在SC表中插入一条元组(Sno,Cno,NULL),ASSE_SC_NUM断言被触发检查。如果选修数据库课程的人数已经超过60人,CHECK子句返回值为“假”,对SC表的插入操作会被拒绝。

     

    //删除对数据库课程的断言:

    DROP ASSERTION ASSE_SC_NUM;


     

    触发器

     

    触发器(Trigger)是用户定义在基本表上的一类由触发事件驱动的操作过程。

    触发器被定义后会保存在数据库服务器中。任何用户对表的增、删、改操作均由服务器自动激活相应的触发器,在关系数据库管理系统核心层进行集中的完整性控制。

    触发器类似于约束,但比约束更加灵活。

     

    需要注意的是,触发器在SQL99后才写入SQL标准,但是很多关系数据库管理系统在统一标准之前就产生了各自的触发器,因而这些触发器的语法各不相同、互不兼容。上机实验时需要留意所用系统的触发器说明。

     

    1. 定义触发器

    触发器又叫“事件-条件-动作”规则(event-condition-action)。当特定的触发事件发生时,对规则的条件进行检查,若条件成立,规则中的动作将被执行,反之拒绝执行。若不设置规则的动作条件,触发事件发生时立即执行动作。

    一般格式:

    CREATE TRIGGER <触发器名>

    {BEFORE|AFTER} <触发事件> ON <目标基本表名>

    REFERENCING {NEW|OLD} {ROW|TABLE} AS <临时变量名>

    FOR EACH {ROW|STATEMENT}

    [WHEN <触发条件>]

    <触发动作体>

     

    我们可以看到,在触发器的一般格式中有多个的可选项,下面会一个个介绍:

    (1)CREATE TRIGGER <触发器名>

    只有建立基本表的用户才有权限在表上创建触发器,并且一个表上只能创建一定数量的触发器,具体数量由关系数据库管理系统决定;

    同一模式(命名空间)中,触发器名必须唯一,且必须与目标基本表位于同一模式。

     

    (2){BEFORE|AFTER} <触发事件> ON <目标基本表名>

    {BEFORE|AFTER} 指示触发器被激活的时机,在触发事件执行之前或之后;

    触发事件可以是INSERTDELETEUPDATE,也可以是这几个事件的组合,还可以是UPDATE OF <触发列, ...>,即进一步制定修改哪些属性列时激活触发器;

    ON <目标基本表名> 的意思就很明显了。

     

    (3)REFERENCING {NEW|OLD} {ROW|TABLE} AS <临时变量名>

    触发事件执行前后,元组或表的内容保存在<临时变量名>中,以便在触发动作体中使用。

    需要注意的是,只有行级触发器才能在触发动作体中使用NEW|OLD变量,而在语级触发器中禁止使用。

    /*现在看不懂上面几个新名词不要紧,下面会进一步说明*/

     

    (4)FOR EACH {ROW|STATEMENT}

    该语句可将触发器定义为行级触发器(ROW语级触发器(STATEMENT

    当触发事件仅涉及基本表中的一行元组或元组中的一个属性值,我们可以将触发器定义为行级触发器。每当一个元组被UPDATE(或其他操作),且触发条件成立时,触发动作体就会执行一次,即一个个触发,一个个操作;

    当触发事件涉及整体基本表的改动时,如插入或删除一行元组,则将触发器定义为语级触发器。所有INSERTDELETE语句执行后,且触发条件成立时,触发动作体才执行一次,即所有触发后,来一次总操作。

     

    (5)[WHEN <触发条件>]

    触发条件为可选语句,设置后在执行触发动作体前将进行条件判断,不设置则直接执行。

     

    (6)<触发动作体>

    触发动作体可以是INSERTDELETEUPDATEPL/SQL过程块

     

    下面通过三个例子体会一下~

    //当对表SC的Grade属性进行修改时,若分数增加了10%,则将此次操作记录到另一个表SC_U(Sno,Cno,Oldgrade,Newgrade)中:

    CREATE TRIGGER SC_T

    AFTER UPDATE OF Grade ON SC

    REFERENCING

              OLD ROW AS OldTuple,

              NEW ROW 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,OldTuple.Grade,NewTuple.Grade)

     

    //将每次对表Student的插入操作所增加的学生个数记录到C中:

    CREATE TRIGGER Student_Count

    AFTER INSERT ON Student

    REFERENCING 

              OLD TABLE AS OldTable

    FOR EACH STATEMENT                                /*定义为语级触发器*/

             INSERT INTO OldTable(Numbers)

             SELECT COUNT(*) FROM OldTable

    (可回顾“插入数据”

     

    //定义一个BEFORE行级触发器,为Teacher表定义完整性规则“教授的工资不得低于4000元,如果低于4000元,自动补为4000”:

    CREATE TRIGGER Insert_OR_Update_Sal

    BEFORE INSERT OR UPDATE ON Teacher

    REFERENCING

              NEW ROW AS NewTuple

    FOR EACH ROW

    BEGIN                                              /*PL/SQL过程块开端*/

               IF (NewTuple.Job = '教授') AND (NewTuple.Sal < 4000)

                    THEN NewTuple.Sal = 4000;

               END IF;                                 /*IF语句结束*/

    END;                                                /*PL/SQL过程块结尾*/

     

    //删除触发器:

    DROP TRIGGER Insert_OR_Update_Sal ON Teacher;

     

    2. 触发器激活顺序

    先执行BEFORE触发器再执行AFTER触发器。同种触发器中,遵循“先创建先执行”的原则。有些关系数据库管理系统会按照触发器名称的字母排列顺序执行。


     

    展开全文
  • Sql数据库知识整理

    2009-09-16 15:40:02
    这是我整理的一些Sql的理论知识,希望与大家共同学习!
  • 数据库”这种东西一点都不酷,庞大而且繁杂,具备高级劝退属性——第一次接触它的时候有这种想法一点都不奇怪,但在我们认识它,熟悉它并且使用它之后,就会发现这东西很酷,它可以帮助我们更好地整理大量复杂的...

    “数据库”这种东西一点都不酷,庞大而且繁杂,具备高级劝退属性——第一次接触它的时候有这种想法一点都不奇怪,但在我们认识它,熟悉它并且使用它之后,就会发现这东西很酷,它可以帮助我们更好地整理大量复杂的数据信息。虽然数据库里的东西多而杂,但东西的摆放并不杂乱。

    看到“数据库”这个名词,可能很多非计算机专业的同学都准备点右上角的叉叉了_(:з」∠)_还请阁下留步,“数据库”本身并不是多深奥的概念,而且它在我们的生活中已经随处可见了,只是大家可能还没意识到,在我们网购、玩网游、使用社交软件的时候,数据库已经悄悄地发挥了它的作用。

    那接下来我们就进入正题喽~


     

    主要内容

    1. 数据(data)

    2. 数据库(database)

    3. 数据库管理系统(database management system,DBMS)

    4. 数据库系统

    1. 概念模型

    2. 层次模型

    3. 网状模型

    4. 关系模型


     

    数据库系统概述

    在系统地学习数据库之前,我们先来认识四个基本概念:数据数据库数据库管理系统数据库系统

     

    1. 数据(data)

    数据是数据库中存储的基本对象,广义的理解认为数据的种类很多。在游戏中我们角色的各项能力值、角色技能的演出效果(动画和音频),技能伤害的判定以及网购时商品的各类信息、商家的粉丝数、三项指标(描述相符、服务态度和物流服务)等,这些都可以被称为数据。判断的依据就是它是否在描述某样事物。

    有时候数据只是一个简单的数字,我们还得给它赋予含义,比如各项能力值里有攻击力、防御力、敏捷度等各个数值,技能伤害可以是一般伤害、暴击伤害、异常状态伤害等。数据与其语义是密不可分的。

     

    2. 数据库(database)

    存放数据的仓库,只是这个仓库在计算机存储设备上,而且数据按一定的格式存放。过去人们把数据存放在文件柜里,现在人们可以借助计算机和数据库更便捷地管理和利用大量复杂的数据。数据库数据具有永久存储有组织可共享三个基本特点,具有较小的冗余度(redundancy)、较高的数据独立性(data independency)易扩展性(scalability)数据共享性

    *百科上没能找到“易扩展性”的资料,所以这里补充一下:由于数据面向整个系统,具有一定的结构,不仅可以被多个应用共享使用,而且容易增添新的应用,这就使得数据库系统弹性大,易于扩充,能更好满足不同用户的需求。

     

    3. 数据库管理系统(database management system,DBMS)

    数据库管理系统是位于用户(通过应用程序)与操作系统之间的一层数据管理软件,可以实现科学地组织和存储数据,高效地获取和维护数据。它的主要功能包括以下六个方面:

    (1)数据定义:数据定义语言(Data Definition Language,DDL),用于对数据对象的组成和结构进行定义;

    (2)数据组织、存储和管理:提高存储空间的利用率和数据的存取效率(索引查找、hash查找、顺序查找等);

    (3)数据操纵:数据操纵语言(Data Manipulation Language,DML),对数据进行查询、插入、删除和修改等;

    (4)数据库的事务管理和运行管理:数据库在建立、运用和维护时,保证数据的安全性、完整性、多用户对数据的并发使用及故障后的系统恢复,这些都是数据库管理系统必须提供的数据控制功能

    (5)数据库的建立和维护:数据库初始数据的输入,数据库的转储恢复,数据库的重组织和性能监视、分析等;

    (6)其他功能:与网络中其他软件系统的通信,与另一个数据库管理系统或文件系统的数据转换等。

     

    4. 数据库系统

    数据库的建立、运用和维护等工作只靠一个数据库管理系统是远远不够的,还要有专门的人员来完成这些工作,这些人被称为数据库管理员(DataBase Administrator,DBA)数据库、数据库管理系统、数据库管理员和应用程序共同组成了数据库系统。


     

    数据库系统的诞生

    20世纪50年代后期到60年代中期,操作系统中已经有了专门的数据管理软件,一般称为文件系统。文件系统实现了对数据的长期保存和系统管理,但它依旧存在三个明显的缺点:数据共享性差、冗余度大、数据独立性差。

    20世纪60年代后期以来,数据量日益繁多复杂,这时候数据库系统应运而生,一把解决了文件系统遗留的三个问题。

    数据库系统实现了整体数据的结构化,使数据不再只针对某一个应用,而是面向整个组织或企业,数据结构之间是有联系的。说到这里,我们现在所学的三门专业课,操作系统数据库数据结构已经联系起来了。


     

    数据模型

    数据库技术的发展沿着数据模型的主线推进,数据模型是对现实世界数据特征的抽象,用于描述、组织和操作数据。现有的数据库均为基于某种数据模型,数据模型是数据库系统的核心和基础

    数据模型可分为两大类:第一类是概念模型,第二类是逻辑模型(层次模型、网状模型和关系模型等)和物理模型

    数据模型的三个组成要素数据结构数据操作数据的完整性约束条件。(这三个要素会在后续内容中说明)

     

    1. 概念模型

    概念模型是现实世界到机器世界的一个中间层次——信息世界,主要用于设计数据库

    基本概念:

    (1)实体(entity):客观世界具体存在的人事物或抽象的概念和联系。比如一个学生、学生的一次选课、学生与学院的关系等;

    (2)属性(attribute):实体所具有的某一特性。一个实体可以通过多个属性来描述;

    (3)码(key):唯一标识实体的属性(集)。比如学号是学生实体的码;

    (4)实体型(entity type):实体名(属性1,属性2,...)。如:学生(学号,姓名,性别,出生年月);

    (5)实体集(entity set):同一类型实体的集合称为实体集。全体学生就是一个实体集;

    (6)联系(relationship):实体内部的联系通常指属性间的联系,而实体之间的联系通常指不同实体集之间的联系(一对一、一对多和多对多)。

     

    2. 层次模型

    层次模型是数据库系统中最早出现的数据模型,采用树型数据结构来表示各类实体以及实体间的联系,层次数据库系统以层次模型作为数据的组织方式。(以后可能会挖个新坑来写数据结构的东西_(:з」∠)_)

    层次模型(还有网状模型)中的每个结点称为一个记录类型(实体),记录类型中的数据称为字段(属性)

    层次模型的基本特点是,任何一个给定的记录值只能按其层次路径查看,没有一个子女记录值能够脱离双亲记录值而独立存在

     

    层次模型的数据操纵主要有查询、插入、删除和更新。

    进行插入操作时,如果没有相应的双亲记录值就不能插入它的子女记录值。进行删除操作时,如果删除双亲记录值,相应的子女记录值也将同时被删除。在进行数据操纵时遵循的规则就是完整性约束条件

     

    优点:

    (1)数据结构比较简单清晰;

    (2)查询效率高。DBMS(数据库管理系统)中常常用指针来实现记录间的联系,这种联系亦是记录之间的存取路径;

    (3)提供了良好的完整性支持。

    缺点:

    (1)现实中许多联系是非层次性的,结点间的多对多联系不适合用层次模型表示;

    (2)一个结点具有多个双亲结点时,只能通过引入冗余数据(易产生不一致性)或引入虚拟结点(创建非自然的数据结构);

    (3)无法单独查询子女结点。

    因此,层次模型更适合“一对多”的情况。

     

    3. 网状模型

    网状模型采用图型数据结构来表示各类实体以及实体间的联系,层次模型实际上是特殊的网状模型。

    优点:

    (1)能够更直接地描述现实世界,如一个结点可以有多个双亲,结点之间可以有多种联系;

    (2)存取效率较高。

    缺点:

    (1)结构过于复杂,不利于最终用户掌握;

    (2)网状模型的DDL(数据定义语言)和DML(数据操纵语言)复杂,并且要嵌入某一种高级语言,用户不易掌握;

    (3)由于记录之间的联系通过存取路径实现,所以应用程序访问数据时必须选择适合的存取路径,这就要求用户必须了解系统结构的细节,加重了敲代码的负担。

     

    层次模型和网状模型统称为格式化模型。格式化模型的数据库系统在20世纪70年代至80年代非常流行,但由于它们在使用和实现上都要涉及数据库物理层的复杂结构,现在已逐渐被关系模型的数据库系统取代

     

    4. 关系模型

    关系模型是最重要的一种数据模型(也是这一系列的主要讲述对象)。关系数据库系统采用关系模型作为数据的组织方式。

    每个关系的数据结构就是一张规范化二维表。

    学号姓名年龄性别系名年级
    20190301欧阳18数技2019
    20190305翠花19数技2019
    20190316小嘤18数艺2019
    ..................

    下面介绍关系模型中的重要术语

    (1)关系(relation):一个关系对应一张二维表;

    (2)元祖(tuple):表中的一行即为一个元祖;

    (3)属性(attribute):表中的一列即为一个属性,表中的6列分别对应6个属性;

    (4)码(key):表中的某个属性(组),它可以唯一确定一个元组。如学号可以唯一确定一个学生,所以它是本关系的码;

    (5)域(domain):属性的取值范围来自某个域;

    (6)分量:元组中的一个属性值;

    (7)关系模式:关系名(属性1,属性2,...)。如学生(学号,姓名,年龄,性别,系名,年级)。

    关系模型要求关系必须是规范化的,关系中的每一个分量必须是不可分的数据项。

    关系模型的数据操纵主要包括查询、插入、删除和更新数据,这些操作必须满足关系的完整性约束条件。关系的完整性约束条件包括三大类:实体完整性参照完整性用户定义的完整性

     

    优点:

    (1)与格式化模式不同,它建立在严格的数学概念基础上;

    (2)关系模型的概念单一,用户易懂易用;

    (3)关系模型的存取路径对用户透明,从而具有更高的数据独立性和安全保密性,简化了程序猿的工作和数据库的开发建立工作。

    虽然关系模型深受用户欢迎,但它仍旧存在缺点。由于存取路径对用户是隐蔽的,查询效率往往不如格式化数据模型。不过查询请求是可以优化的,用户不必考虑这些细节问题。


     

    数据库系统的三级模式结构

    模式(schema)是数据库中全体数据的逻辑结构和特征的描述,只涉及“型”的描述不涉及具体的“值”。模式的具体值称为模式的实例(instance),同一个模式可以有很多实例。

    模式是相对稳定的,而实例是相对变动的。模式反映的是数据的结构及其联系,而实例反映的是数据库某一时刻的状态。

     

    数据库系统的三级模式结构是指数据库系统是由外模式模式内模式三级构成。

    (1)模式(schema)逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。

    (2)外模式(external schema)子模式(subschema)或用户模式,它是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述。

    外模式通常是模式的子集,一个数据库可以有多个外模式。对于模式中同一数据,外模式中的结构、类型、长度、保密级别都可以不同。

    每个用户只能看见和访问外模式中的数据,所以外模式是保证数据库安全性的一个有力措施。

    (3)内模式(internal schema)存储模式(storage schema),一个数据库只有一个内模式,它是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式。

     

    数据库系统中位于三级模式之间的两层映像:外模式/模式映像模式/内模式映像

    目前我们只需要知道外模式/模式映像保证了数据与程序的逻辑独立性,而模式/内模式映像保证了物理独立性

    数据与程序之间的独立性使数据的定义和描述可以从应用程序分离出去,数据的存取由DBMS管理,简化了应用程序的编制,大大减少了代码的维护和修改。


     

    数据库的用户

    这里的用户指最终用户(end user)。最终用户通过应用系统的用户接口使用数据库。常用的接口方式有浏览器、菜单驱动、表格操作、图形显示、报表书写等。

    最终用户分为以下三类:

    (1)偶然用户。这类用户不常访问数据库,但每次访问往往需要不同的数据库信息;

    (2)简单用户。多数最终用户为简单用户,其主要工作是查询和更新数据库,一般都是通过应用程序猿精心设计并具有良好界面的应用程序存取数据库;

    (3)复杂用户。具有较高科学技术背景的人员,能够直接使用数据库语言访问数据库,甚至基于DBMS的应用程序接口编制直接的应用程序。


    (笔者现为大二学生,“数据库知识整理”系列的内容大部分参考自教材《数据库系统概论(第5版)》)

    展开全文
  • 数据库知识整理 - 关系数据库》 看下“关系的完整性”的部分*/ );   区分 列级完整性约束条件 和 表级完整性约束条件 的方法比较简单——看约束条件短语的位置: 在 子句结尾 是作为 列级 完整性约束...

    主要内容

    1. SQL的发展

    2. SQL的优点

    3. SQL的基本概念

    1. 模式的定义与删除

    2. 基本表的定义、删除和修改

    3. 索引的建立和删除


    SQL概述

     

    1. SQL的发展

    结构化查询语言(Structured Query Language,SQL)数据查询数据操纵数据定义数据控制功能于一体,它的标准自公布以来随数据库技术的发展而不断丰富完善。

    自SQL成为国际标准语言后,各个数据库厂家纷纷推出各自的SQL软件或与SQL的接口软件。这就使大多数数据库均用SQL作为共同的数据存取语言和标准接口,使不同数据库系统之间的操作有了共同的基础。

    SQL之所以能够为用户和业界所接受并成为国际标准,是因为它是一个综合的、功能极强同时又简洁易学的语言。

    但尽管SQL的标准在不断发展,目前还没有一个数据库系统能够支持SQL标准的所有概念和特性。大部分数据库系统能支持SQL/92标准中的大部分功能以及SQL99SQL2003中的部分新概念。同时,许多软件厂商对SQL基本命令集还进行了不同程度的扩充和修改,又可以支持标准以外的一些功能特性。

    接下来我们将会了解SQL的基本概念和功能。

     

    2. SQL的优点

    (1)综合统一非关系数据语言分多钟语言以完成不同的操作,而且需要修改模式时,必须停止数据库的运行,修改后要重装数据库,十分麻烦。相比之下,SQL集数据查询、数据操纵、数据定义和数据控制功能于一体,语言风格统一,可以独立完成数据库生命周期的全部活动,这就为数据库应用系统的开发提供了良好的环境。特别是用户在数据库系统投入运行后,还可以根据需要随时地、逐步地修改模式,而不影响数据库的运行,使得数据库系统具有良好的可扩展性。

    (2)高度非过程化非关系数据模型需要指明存取路径,而用SQL进行数据操作时,只要提出“做什么”,而无须指明“怎么做”,数据的存取由系统自动完成。这不但大大减少了用户负担,而且有利于提高数据独立性。

    (3)面向集合非关系数据模型的操作对象是一条记录,而SQL的操作对象是元组的集合,哪个比较高效一目了然。

    (4)SQL既可以作为独立语言,又可以作为嵌入式语言作为独立语言,用户可以在终端键盘上直接键入SQL命令来对数据库进行操作;作为嵌入式语言,它可以嵌入到高级语言(例如C、C++、Java等)程序中,供程序猿使用。关键是,两种使用方式下SQL的语法结构基本一致,因此提供了极大的灵活性和方便性。

    (5)简洁易学!学习语言最怕就是要背的东西多,而SQL语言十分简洁,完成核心功能只用了9个动词,而且接近英语口语,相当易学。数据查询(SELECT)、数据定义(CREAT,DROP,ALTER)、数据操纵(INSERT,UPDATE,DELETE)和数据控制(GRANT,REVOKE)。

     

    3. SQL的基本概念

    SQL支持关系数据库系统的三级模式结构,其中外模式包括若干视图(view)和部分基本表(base table)模式包括若干基本表内模式包括若干存储文件(stored file)

    用户可以用SQL对基本表视图进行查询或其他操作,基本表和视图都是关系(二维表)。

    基本表是独立存在的,在关系数据库管理系统中,一个关系对应一个基本表一个或多个基本表对应一个存储文件。一个表可以带若干索引,索引也存放在存储文件中

    存储文件的逻辑结构组成了关系数据库的内模式。

    视图是从一个或几个基本表或视图中导出的表,它本身并不独立存在,数据库中只存放视图的定义,而不存放它对应的数据,数据仍存放在原来的基本表中,因此视图只是一个虚表。


     

    SQL的常用数据类型

    数据类型含义
    CHAR(n)长度为n的定长字符串
    VARCHAR(n)最大长度为n的变长字符串
    INT长整型(4字节)
    SMALLINT短整型(2字节)
    BIGINT大整型(8字节)
    FLOAT(n)可选精度的浮点数,精度至少为n位数字
    BOOLEAN逻辑布尔量
    DATE日期(YYYY-MM-DD)
    TIME时间(HH:MM:SS)

     

    数据定义

    SQL的数据定义语句
    操作对象操作方式
    创建删除修改
    模式CREAT SCHEMADROP SCHEMA 
    CREAT TABLEDROP TABLEALTER TABLE
    视图CREAT VIEWDROP VIEW 
    索引CREAT INDEXDROP INDEXALTER INDEX

    需要注意的是,SQL标准不提供修改模式和视图定义的语句,如果用户要修改模式或视图,只能先将它们删除然后重建。SQL标准也没有提供索引相关的语句,但为了提高查询效率,商用关系数据库管理系统都提供了索引机制。

    在早期的数据库系统中,所有数据库对象都属于一个数据库,也就是说只有一个命名空间。而现代的关系数据管理系统提供了一个层次化的数据库对象命名机制。

    一个关系数据库管理系统的实例中可以建立多个数据库,一个数据库中可以建立多个模式,一个模式下通常包括多个表、视图和索引等数据库对象:数据库【模式(表、视图和索引)】

     

    1. 模式的定义与删除

    (1)定义模式CREATE SCHEMA <模式名> AUTHORIZATION <用户名> [<表定义子句>|<视图定义子句>|<授权定义子句>]

    定义模式实际上定义了一个命名空间,在这个空间中可以进一步定义该模式包含的数据库对象,例如基本表、视图、索引等。

    如果模式定义语句中没有指定<模式名>,<模式名>隐含为<用户名>。

    例如:

    用户WANG定义一个模式TEST,并且在其中定义一个表TAB

     

    CREATE SCHEMA TEST AUTHORIZATION WANG

    CREATE TABLE TAB(COL1 SMALLINT, COL2 INT);

     

    (2)删除模式DROP SCHEMA <模式名> <CASCADE|RESTRICT>;

    CASCADE(级联),表示在删除模式的同时,把模式中的所有数据库对象删除;RESTRICT(限制),表示如果模式中定义了数据库对象,则拒绝该删除语句的执行。

     

     

    2. 基本表的定义、删除和修改

    (1)定义基本表CREATE TABLE <表名> (<列名><数据类型> [列级完整性约束条件]...[表级完整性约束条件])

    建表的同时通常可以定义与该表有关的完整性约束条件,表的定义以及约束条件会被存放在数据字典中。

    *数据字典是关系数据库管理系统的一组系统表,记录了数据库中所有的定义信息。关系数据库管理系统在执行SQL的数据定义语句时,实际上就是在更新数据字典中相应的信息。

    例如:

    建立一个“学生”表Student,定义各列数据类型以及完整性约束条件

     

    CREATE TABLE Student

    (Sno CHAR(9) PRIMARY KEY,            /*列级完整性约束条件,Sno是主码*/

    Sname CHAR(20) UNIQUE,                 /*列级完整性约束条件,Sname取唯一值*/

    Ssex CHAR(2) NOT NULL,                  /*列级完整性约束条件,Ssex不能取空值*/

    Sage SMALLINT,

    Sdept VARCHAR(20),

    Cpno CHAR(4),                                       /*先定义Cpno的数据类型才能再将它设为外键*/

    FOREIGN KEY (Cpno) REFERENCES Course (Cno)

     /*表级完整性约束条件,Cpno是外码,被参照表是Course,被参照列是Cno*/ 

    /*上面看不太懂的同学请翻到《数据库知识整理 - 关系数据库》看下“关系的完整性”的部分*/

    );

     

    区分列级完整性约束条件表级完整性约束条件的方法比较简单——看约束条件短语的位置:子句结尾是作为列级完整性约束条件,而在子句开头是作为表级完整性约束条件。

    比如主码由两个属性构成:

    PRIMARY KEY(Sno,Cno),

     

    (2)定义基本表所属的模式有两种较简单的方法。一种方法是定义模式的同时定义基本表,就像上面定义模式的例子;另一种方法是在表名中直接给出:

    CREATE TABLE "S-T".Student(...);

     

    (3)修改基本表ALTER TABLE <表名> [操作子句] ;

    修改基本表主要有4个操作子句:

    <1> ADD子句用于增加新列或新的完整性约束条件。如:

    Student表中增加“entrance(入学时间)”列ALTER TABLE Student ADD entrance DATE;

    增加课程名称必须取唯一值的约束条件ALTER TABLE Student ADD UNIQUE(Cname);

    <2> DROP COLUMN子句用于删除表中的列。如果指定了CASCADE短语,则自动删除引用了该列的所有对象,比如视图;如果指定了RESTRICT短语,则如果该列被其他对象引用,拒绝删除操作。

    <3> ALTER COLUMN子句用于修改列原有的定义,包括列名和数据类型。如:

    年龄的数据类型从字符型转为整型ALTER TABLE Student ALTER COLUMN Sage INT;  /*相当于直接覆盖*/

    <4>DROP CONSTRAINT子句用于删除完整性约束条件。

     

    (4)删除基本表DROP TABLE <表名> [RESTRICT|CASCADE];

    RESTRICT是有条件的删除,存在任何依赖该表的对象,该表都不能被删除;CASCADE是无条件的删除,删除表的同时,所有依赖该表的对象也自动删除。

    默认情况下是RESTRICT

     

     

    3. 索引的建立和删除

    当表的数据量比较大时,建立索引是加快查询速度的有效手段。索引虽然能够加速数据库查询,但需要占用一定的存储空间。当基本表更新时,索引需要进行维护,这样又增加了数据库的负担,所以要有选择地创建索引。

    索引建立在基本表的一列或多列上。

     

    (1)建立索引CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名> (<列名> [<次序>]);

    UNIQUE表明此索引的每一个索引值只对应唯一的数据记录;CLUSTER表示要建立聚簇索引,这里暂时不作过多介绍。

    <次序>有两种:ASC(升序)DESC(降序),默认值为ASC。

    举栗子:

    为学生-课程数据库中的Student、Course和SC三个表建立索引。Student和Course表按学号(课程号)升序唯一索引,SC表按学号升序,课程号降序建立唯一索引。

    CREATE UNIQUE INDEX Stusno ON Student(Sno);

    CREATE UNIQUE INDEX Cousno ON Course(Cno);

    CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);

     

    (2)修改索引ALTER INDEX <旧索引名> RENAME TO <新索引名>;

     

    (3)删除索引DROP INDEX <索引名>;

     


     

    路过的圈毛君:“这里介绍的只是SQL的基本概念和基础功能。对于SQL语言,不同的数据库产品在处理策略上可能会与SQL的国际标准有所差别,所以使用具体的数据库系统时以用户手册的说明为准。”

    展开全文
  • 数据库知识整理.md

    2020-04-03 11:40:41
    非常详细的数据库知识整理,主要涵盖:数据库基础知识、DDL、DML、DQL、DCL、事务讲解、Mysql、JDBC、Java操作Mysql、数据库连接池、Redis型非关系数据库、Java使用Jedis操作Redis数据库
  • 数据库(DB):长期存储在计算机内、有组织、可共享的大量数据的集合。数据库中的数据按照一定的数据模型组织、描述和存储,具有娇小的冗余度、交稿的数据独立性和易扩展性,并可为各种用户共享。 数据库管理系统...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 122,013
精华内容 48,805
关键字:

数据库知识整理

友情链接: dv-hop仿真.zip