精华内容
下载资源
问答
  • oracle数据库常用关键字汇总!

    千次阅读 2019-07-22 17:44:28
    oracle数据库常用关键字汇总! Oracle基础数据类型:  4类:  字符型:字符串  char(最大2000), nchar(最大1000, 支持Unicode)--->固定长度  varchar2(最大4000), nvarchar2(最大2000, 支持Unicode)--->可变...

    oracle数据库常用关键字汇总!

    Oracle基础数据类型:
      4类:
        字符型:字符串
          char(最大2000), nchar(最大1000, 支持Unicode)--->固定长度
          varchar2(最大4000), nvarchar2(最大2000, 支持Unicode)--->可变长度
        数字类型
          包括整数和小数
          number(有效数字, 总位数);
          float()--->存储二进制类型的数据, 1-126位0.30103
        日期类型:时间
          date:取值范围:公元前4712年1月1号---公元9999年12月31号, 可以直接精确到秒
          timestamp(时间戳: 更精确的数据, 可以精确到毫秒)
        其它类型:大文本, 文件
          blob: 最大4G, 以二进制的形式来存放数据
          clob: 最大4G, 以字符串的形式存放

      Oracle运算符和表达式

        表达式类似于java, 可以是常量, 可以是变量, 也可以是表中的一个字段

        算术运算符(+ - * /)
        比较运算符(> >= < <= = <>/!=)
        逻辑运算符(and or not)
        字符串连接符(||)

      常用关键字
        insert into----insert into  表名 values ();

        delete-----DELETE 表名 WHERE 列名 运算符 条件

        update----UPDATE 表名 SET 列名=值 WHERE 限制条件

        select---尽量不要写*

        where

        in

        like(%, _)---模糊查询,%表示0个或多个;_表示一个;

        order by----SELECT * FROM emp ORDER BY deptid DESC, ID DESC(排序,加上desc成倒序)

        group by--(group by 增强)-------结合分组函数使用 SELECT deptid FROM emp GROUP BY deptid

        having

        case...when...--------SELECT CASE E.SSEX WHEN 1 THEN '男' WHEN 0 THEN '女' ELSE '不详' END bb FROM EMP E;

        set

        distinct----去除一列中的重复;

        between...and(闭合区间, 即包括前面的数, 也包括后面的数)

        all-------SELECT * FROM emp e WHERE e.intime>=ALL(SELECT e1.intime FROM emp e1);

    转发自:https://www.cnblogs.com/bekeyuan123/p/6962510.html

    展开全文
  • 数据库中我们做常用的就是SQL基本查询语言,甚至有些人认为数据库就是SQL,SQL就是数据库。虽然这种观点是错误的,但是也确实从一个方面体现了这种面向结果的查询语言的重要性。一般情况下,程序人大多数人都会接触...

    SQL语言基本定义
    基本类型
    SQL表中支持很多固有类型,包括:

    类型 含义
    char(n) 存放固定长度的字符串,用户指定长度为n。如果没有使用n个长度则会在末尾添加空格。
    varchar(n) 可变长度的字符串,用户指定最大长度n。char的改进版,大多数情况下我们最好使用varchar。
    int 整数类型
    smallint 小整数类型
    numeric(p,d) 定点数,精度由用户指定。这个数有p位数字(包括一个符号位)d位在小数点右边。
    real ,double precision 浮点数和双精度浮点数。
    float(n) 精度至少位n位的浮点数
    特殊关键字
    SQL中用很多关键字来表达CRUD的操作(增删改查)。在这之外有很多特殊的关键字用来表示一些其他的含义,在总结SQL之前我们有必要进行一些了解。

    类型 含义 示例
    primary key 主键,后面括号中是作为主键的属性 primary key(student_id)
    foreign key references 外键,括号中为外键,references后为外键的表 foreign key(course_id) references Course
    not null 不为空,前面为属性的定义 name varchar(10) not null
    SQL插入/删除/修改语句
    SQL语法使用最多的就是查询,除了查找语句之外,其他的语句内容都很少。

    类型 含义

    create table 创建一张表
    insert into…values 向表中插入一条信息
    delete from 从表中删除一条信息
    update…set…where 在where的位置,更新内容为set的值
    drop table 删除表(只删除数据,不删除自增列的顺序)
    truncate table 删除表(清空一切数据,包括自增列)
    alter table…add 向表中添加某个属性
    alter table…drop 将表中的某个属性删除

    create table
    create table Student(
    ID varchar(20) not null,
    name varchar(10) not null,
    age int,
    class varchar(50),
    primary key (ID));
    创建一张叫做Student的表,表中有四个属性,ID,姓名,年龄和班级,么个属性都有各自的类型。在这张表中主键是ID。
    insert into…values
    insert into Student(ID,name,class)
    values(10152510302,”Tom”,”class 1”);
    向表中添加一行信息,一个名叫Tom的学生的信息,因为age值不是not null,也就不是必须的,所以我们不添加age属性也没有问题。

    delete from
    delete form Student
    where name=”Tom”;
    从表中删除所有名字叫做Tom的信息。如果delete from不写where查询条件表示清空这张表。

    update…set…where
    update Student
    set age=18
    where name=”Tom”;
    将所有名字叫做Tom的信息的年龄设置为18。

    drop table
    drop table Student;
    删除Student这张表。

    alter table…add
    alter table Student
    add sex varchar(5);
    向表中添加性别属性,并且将表中以存放的信息的sex值设为null。所有通过这种方式添加的属性都不能被设置为not null类型。

    alter table…drop
    alter table Student
    drop class;
    从表中将class这一列属性删除。

    SQL查询语句
    SQL最为常用的就是查询,我们使用数据库并从中查找出我们希望的内容。在这个过程中,我们可能要编写很复杂的语句。这里我们分类别详细的总结具体的查询情况。

    单关系查询
    单关系查询是指只一张表中的内容查询有关信息,不涉及其他的表,这是查询中最为基本的一种情况。我们通过这种情况来总结一些基本的SQL语句编写方法。下面先给出一些涉及到的关键字。

    类型 含义
    select 表示要查找出的表所含有的属性
    from 表示要操作的表
    where 判断条件,根据该判断条件选择信息
    distinct 在select后加入关键字distinct表示将结果去重
    all 在select后加入关键字all表示不去重(默认)
    and 在where中使用and表示将判断条件连接起来
    or 在where中使用or表示判断条件多选一
    not 在where中使用not表示判断条件取反
    在下面的查询语句中,我们仍旧使用Student这张表来进行操作。先回顾一下这张表的字段。

    create table Student(
    ID varchar(20) not null,
    name varchar(10) not null,
    age int,
    class varchar(50),
    primary key (ID));
    示例:
    select name distinct
    from Student
    where age=18 and class=”A”;
    在Student这张表中查询所有年龄是18岁,并且班级是A的学生的名字,并将结果去重。

    多关系查询
    多关系查询是指在多个表中通过一些操作查找出希望的信息。除去上面已有的关键字,我们还会使用到下面这些。

    类型 含义
    A,B 在from后面通过逗号连接多张表,表示将这些表进行笛卡儿积运算
    natural join 将natural join关键字前后的两张表进行自然连接运算
    A join B using(c) 将A和B通过c属性自然连接
    为了能够进行多关系查询,我们需要有除了Student的另外一张表。再建一张表,表示上数学课的所有学生的信息和成绩情况。(实际上这两张表建的都不好,不能满足基本的几个范式,但是为了方便起见用来举例)

    create table Math(
    ID varchar(20) not null,
    name varchar(10) not null,
    sex varchar(5),
    score int,
    primary key(ID));
    示例:
    select score
    form Student natural join Math
    where class<>”B” and sex=”men”
    将Student表和Math表自然连接,所得的结果查询出不是B班的男生的成绩。

    附加运算查询
    我们已经总结了单关系和多关系运算的查询方法,但是只有这些

    类型 含义
    as 将as前的关系起一个别名,在此语句中,可以用别名来代指这个表
    * 在select中通过: “表名.*” 来表示查找出这个表中所有的属性
    order by 让查询结果中的信息按照给定的属性排序(默认升序,上小下大)
    desc 在order by之后的属性后使用,表示采用降序排序
    asc 在order by之后的属性后使用,表示采用升序排序(默认)
    between 在where中使用between表示一个数在两个数值之间取值
    not between between的反义词,在两个数之外取值
    union/union all 将两个SQL语句做并运算,并且自动去重,添加all表示不去重
    intersect/intersect all 将两个SQL语句做交运算,并且自动去重,添加all表示不去重
    except/except all 将两个SQL语句做差运算,并且自动去重,添加all表示不去重
    is null 在where中使用is null表示这个值是空值
    is not null 在where中使用is not null表示这个值不是空值
    示例:
    select S.*
    from Student as S,Math as M
    where S.ID = M.ID
    将Student和Math两张表做笛卡儿积,结果中所有ID相同的信息,取出他们属于Student属性的部分作为结果。
    select name
    from Student natural join Math
    where class=”A” and sex=”women”
    order by score desc;
    在Student和Math自然连接的结果中,找出A班的女生的姓名,并且按照成绩的降序把名字排列出来。
    select name
    from Math
    where score between 60 and 90;
    order by score asc;
    在Math表中,找出成绩在60分到90分之间的学生姓名,并且将姓名按照成绩的升序排列出来。
    (select name
    from Student natural join Math
    where class=”A” and sex=”women”
    order by score desc)
    union
    (select name
    from Math
    where score between 60 and 90;
    order by score);
    将上面两个查出来的结果做并集,并且去重。
    select name
    from Student
    where age is null;
    在Student表中记录的年龄值未填写(为空)的所有人的姓名查出来。

    聚集函数运算查询
    已经总结了SQL语句的很多关键字,现在我们可任意的进行排序、查找。但是如果我们要获得一些与数据相关的统计信息,但是这些信息在数据库中没有,那么我们要使用SQL中的聚集函数来进行操作。

    类型 含义
    avg 平均值
    min 最小值
    max 最大值
    sum 总和
    count 计数
    distinct 表示将distinct后的属性去重
    group by 将在group by上取值相同的信息分在一个组里
    having 对group by产生的分组进行筛选,可以使用聚集函数
    示例:
    select class,avg(score) as avg_score
    from Student natural join Math
    group by class
    having avg(score) < 60;
    在Student与Math表自然连接的结果中按照班级分组,并且去除那些班级的平均成绩没到60的班级,剩下的班级和该班成绩的平均数(该班成绩的平均数这个属性被重命名为avg_score)作为一张新表被输出出来。

    展开全文
  • 4.域的基数:用白话说就是域不重复取值的域的个数 5.关系可以有三种类型:基本关系(又称基本表或基表)、查询表和视图表 6.关系是笛卡尔积的有限子集 7.候选码:关系中的某一属性组的值能唯一地标识一个元组,而...
  • Oracle数据库中关系数据库 关系数据库的基础知识 ...①在关系数据模型关系可以看成由行和列交叉组成的二维表格 ②表一行称为一个元组,可以用来标识实体集中的一个实体。(行,记...

                                Oracle数据库中的关系型数据库

    关系型数据库的基础知识

    1,关系型数据库与数据库管理系统

    2,关系型数据库的E-R模型

    3,关系型数据库的设计范式

    一,关系型数据库与数据库管理系统

    1,关系型数据库

    ①在关系数据模型中,关系可以看成由行和列交叉组成的二维表格

    ②表中一行称为一个元组,可以用来标识实体集中的一个实体。(行,记录,元组)

    ③表中的列称为属性,给每一列起一个名称即为属性名,表中的属性名不能相同。(列,字段,属性)

    ④列的取值范围称为域,同列具有相同的域,不同的列也可以有相同的域。

    ⑤表中任意两行(元组)不能相同。

    ⑥能唯一标识表中不同行的属性或属性组(即多个属性的组合)称为主键或复合主键。

    2,数据库管理系统

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

    DBMS的主要功能

               ①数据库的定义功能: DDL

                它把用DDL编写的各级源模式编译成各级目标模式,这些目标模式是对数据库结构信息的描述,而不是数据本身,它们被保存在数据字典中,供以后数据操纵或数据控制时使用。

              ②数据库的操作功能:DML

                单独数据操纵语言DML及其编译程序,实现对数据库的基本操作。基本操作有两类检索和更新。

              ③数据库的保护功能:

                 数据库的数据恢复、数据库的并发控制、数据完整性控制和数据安全性控制。

              ④数据库的维护功能:

                 数据库的数据导入、转换、存储、数据库性能监控等。

    二,关系型数据库的E-R模型

    1,实体和属性

    实体是一个数据对象,是指客观存在并可以相互区分的事物,如一个教师、一个学生、一个雇员等等。每个实体由一组属性来表示,如,一个具体的学生拥有学号、姓名、性别和班级等属性,其中学号可以唯一标识具体某个学生这个实体。具有相同属性的实体组合在一起就构成实体集—即实体集是实体的集合,而实体则是实体集中的某一个特例,例如,王同学这个实体就是学生实体集中的一个特例。

    2,联系

    在实际应用中,实体之间是存在联系的,这种联系必须在逻辑模型中表现出来。在E-R模型中,联系用菱形表示,菱形框内写明“联系名”,并用“连接线”将有关实体连接起来,同时在“连接线”的旁边标注上联系的类型,两个实体之间的联系类型可以分为3类。①一对一1:1,②一对多1:m或者1:n,③多对多m:n。

    三,关系型数据库的设计范式

    关系模式要满足的条件称为规范化形式,简称范式(NF)。

    关系模型规范化的目的:

    是为了消除存储异常,减少数据冗余,保证数据的完整性和存储效率,一般规范为3NF即可。

    (1)第一范式(1NF)

    如果关系R的所有属性均为简单属性,即每个属性都是不可再分的,则称R满足第一范式。

    简单来说:第一范式就是无重复的列

    (2)第二范式(2NF)

    如果关系R满足第一范式,且每一个非主键字段完全依赖于主键,则称R满足第二范式。

    简单说,就是把表里的某一个列设置为主键以后,就可以根据这个列查到其他相关列的信息

    例如,这里以“员工工资信息表”为例,若以(员工编码、岗位)为组合关键字(即复合主键),就会存在如下决定关系。

    (员工编码,岗位)→(决定)(姓名、年龄、学历、基本工资、绩效工资、奖金)

    在上面的决定关系中,还可以进一步拆分为如下两种决定关系。

    (员工编码)→(决定)(姓名、年龄、学历)(岗位)→(决定)(基本工资)

    (3)第三范式(3NF)

    如果关系R满足第二范式,且非主键字段之间不存在依赖关系,则称R满足第三范式。

    简单说,就是从表只能引用主表中的一个列

     例如,这里以员工信息表(EMPLOYEE)为例,该表中包含员工编号、员工姓名、年龄、部门编码、部门经理等信息,该关系    表的关键字为“员工编号”,因此存在如下决定关系:

    (员工编码)→(决定)(员工姓名、年龄、部门编码、部门经理)

    上面的这个关系表是符合第二范式的,但它不符合第三范式,因为该关系表内部隐含着如下决定关系:

    (员工编码)→(决定)(部门编码)→(决定)(部门经理)

    一个基本的关系型数据库,要满足第一范式,一个完整的关系型数据库,要满足第三范式。

    展开全文
  • 数据库通常分为层次式数据库、网络式数据库关系数据库三种。而不同的数据库是按不同的数据结构来联系和组织的。  1.数据结构模型  (1)数据结构  所谓数据结构是指数据的组织形式或数据之间的联系。...

    数据库通常分为层次式数据库、网络式数据库和关系式数据库三种。而不同的数据库是按不同的数据结构来联系和组织的。

      1.数据结构模型

      (1)数据结构

      所谓数据结构是指数据的组织形式或数据之间的联系。如果用D表示数据,用R表示数据对象之间存在的关系集合,则将DS=(D,R)称为数据结构。例如,设有一个电话号码簿,它记录了n个人的名字和相应的电话号码。为了方便地查找某人的电话号码,将人名和号码按字典顺序排列,并在名字的后面跟随着对应的电话号码。这样,若要查找某人的电话号码(假定他的名字的第一个字母是Y),那么只须查找以Y开头的那些名字就可以了。该例中,数据的集合D就是人名和电话号码,它们之间的联系R就是按字典顺序的排列,其相应的数据结构就是DS=(D,R),即一个数组

      (2)数据结构种类

      数据结构又分为数据的逻辑结构和数据的物理结构。数据的逻辑结构是从逻辑的角度(即数据间的联系和组织方式)来观察数据,分析数据,与数据的存储位置无关。数据的物理结构是指数据在计算机中存放的结构,即数据的逻辑结构在计算机中的实现形式,所以物理结构也被称为存储结构。这里只研究数据的逻辑结构,并将反映和实现数据联系的方法称为数据模型。

      目前,比较流行的数据模型有三种,即按图论理论建立的层次结构模型和网状结构模型以及按关系理论建立的关系结构模型。

      2.层次、网状和关系数据库系统

      (1)层次结构模型

      层次结构模型实质上是一种有根结点的定向有序树(在数学中"树"被定义为一个无回的连通图)。下图是一个高等学校的组织结构图。这个组织结构图像一棵树,校部就是树根(称为根结点),各系、专业、教师、学生等为枝点(称为结点),树根与枝点之间的联系称为边,树根与边之比为1:N,即树根只有一个,树枝有N个。

      按照层次模型建立的数据库系统称为层次模型数据库系统。IMS(Information Manage-mentSystem)是其典型代表。

      (2)网状结构模型

      按照网状数据结构建立的数据库系统称为网状数据库系统,其典型代表是DBTG(Data Base Task Group)。用数学方法可将网状数据结构转化为层次数据结构。

      (3)关系结构模型

      关系式数据结构把一些复杂的数据结构归结为简单的二元关系(即二维表格形式)。例如某单位的职工关系就是一个二元关系。

      由关系数据结构组成的数据库系统被称为关系数据库系统。

      在关系数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过对这些关系表格的分类、合并、连接或选取等运算来实现数据的管理。dBASEII就是这类数据库管理系统的典型代表。对于一个实际的应用问题(如人事管理问题),有时需要多个关系才能实现。用dBASEII建立起来的一个关系称为一个数据库(或称数据库文件),而把对应多个关系建立起来的多个数据库称为数据库系统。dBASEII的另一个重要功能是通过建立命令文件来实现对数据库的使用和管理,对于一个数据库系统相应的命令序列文件,称为该数据库的应用系统。因此,可以概括地说,一个关系称为一个数据库,若干个数据库可以构成一个数据库系统。数据库系统可以派生出各种不同类型的辅助文件和建立它的应用系统。


    在上面提到的“三高”需求面前,关系数据库遇到了难以克服的障碍,而对于web2.0网站来说,关系数据库的很多主要特性却往往无用武之地,例如: 

    1、数据库事务一致性需求 
    很多web实时系统并不要求严格的数据库事务,对读一致性的要求很低,有些场合对写一致性要求也不高。因此数据库事务管理成了数据库高负载下一个沉重的负担。 

    2、数据库的写实时性和读实时性需求 
    对关系数据库来说,插入一条数据之后立刻查询,是肯定可以读出来这条数据的,但是对于很多web应用来说,并不要求这么高的实时性,比方说我(JavaEye的robbin)发一条消息之后,过几秒乃至十几秒之后,我的订阅者才看到这条动态是完全可以接受的。 

    3、对复杂的SQL查询,特别是多表关联查询的需求 
    任何大数据量的web系统,都非常忌讳多个大表的关联查询,以及复杂的数据分析类型的复杂SQL报表查询,特别是SNS类型的网站,从需求以及产品设计角度,就避免了这种情况的产生。往往更多的只是单表的主键查询,以及单表的简单条件分页查询,SQL的功能被极大的弱化了。 


    关系数据库的特点:
    特点
    数据库管理系统将具有一定结构的数据组成一个集合,它主要具有以下几个特点:
    1. 数据的结构化 数据库中的数据并不是杂乱无章、毫不相干的,它们具有一定的组织结构,属于同一集合的数据具有相似的特征。
    2. 数据的共享性 在一个单位的各个部门之间,存在着大量的重复信息。使用数据库的目的就是要统一管理这些信息,减少冗余度,使各个部门共同享有相同的数据。
    3. 数据的独立性 数据的独立性是指数据记录和数据管理软件之间的独立。数据及其结构应具有独立性,而不应该去改变应用程序。
    4. 数据的完整性 数据的完整性是指保证数据库中数据的正确性。可能造成数据不正确的原因很多,数据库管理系统通过对数据性质进行检查而管理它们。
    5. 数据的灵活性 数据库管理系统不是把数据简单堆积,它在记录数据信息的基础上具有很多的管理功能,如输入、输出、查询、编辑修改等。
    6. 数据的安全性 根据用户的职责,不同级别的人对数据库具有不同的权限,数据库管理系统应该确保数据的安全性。

    简单言之,关系数据库就是,数据库表跟表之间需要存在一定的关系。比如,你系跟学生的一对多关系之类。
    而非关系数据库,就是表跟表之间不存在关系

    关系型数据库的特点

    关系型数据库最大特点就是事务的一致性:传统的关系型数据库读写操作都是事务的,具有ACID(原子性Atomicity、一致性Consistency、隔离性Isolation、持久性Durability)的特点,C就是一致性(Consistency),这个特点是关系型数据库的灵魂(其他三个AID都是为其服务的),这个特性使得关系型数据库可以用于几乎所有对一致性有要求的系统中,如典型的银行系统。

    但是,在网页应用中,尤其是SNS应用中,一致性却不是显得那么重要,用户A看到的内容和用户B看到同一用户C内容更新不一致是可以容忍的,或者说,两个人看到同一好友的数据更新的时间差那么几秒是可以容忍的,因此,关系型数据库的最大特点在这里已经无用武之地,起码不是那么重要了。

    相反的,关系型数据库为了维护一致性所付出的巨大代价就是其读写性能比较差,而像微博,facebook这类SNS的应用,对并发读写能力要求极高,关系型数据库已经无法应付(在读方面,传统上为了克服关系型数据库缺陷,提高性能,都是增加一级memcache来静态化网页,而在SNS中,变化太快,memcache已经无能为力),因此,必须用新的一种数据结构化存储来来代替关系数据库。

    关系数据库的另一个特点就是其具有固定的表结构,因此,其扩展性极差,而在SNS中,系统的升级,功能的增加,往往意味着数据结构巨大改动,这一点关系型数据库也难以应付,需要新的结构化数据存储。

    于是,非关系数据库(NoSQL)应运而生,由于不可能用一种数据结构化存储方式应付所有的新的需求,因此,非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。

    必须强调的是,数据的持久存储,尤其是海量数据的持久存储,还是需要关系数据库这员老将。

    非关系型数据库分类

    由于关系型数据库本身天然的多样性,以及出现的时间较短,因此,不像关系型数据库,有几种数据库能够一统江山,关系型数据库的非常多,并且大部分都是开源的,这里列出一些:Redis,Tokyo Cabinet,Cassandra,Voldemort,MongoDB,Dynomite,HBase,CouchDB,Hypertable,Riak,Tin, Flare,Lightcloud,KiokuDB,Scalaris,Kai,ThruDB…

    这些数据库中,其实实现大部分都比较简单,除了一些共性外,很大一部分都是针对某些特定的应用需求出现的,因此,对于该类应用,具有极高的性能。依据结构化方法以及应用场合的不同,主要分为以下几类:

    1. 面向高性能并发读写的Key-Value数据库:Key-Value数据库的主要特点就是具有极高的并发读写性能,Redis,Tokyo Cabinet,Flare就是这类的代表。
    2. 面向海量数据访问的面向文档数据库(Document store):这类数据库的特点是,可以在海量的数据中快速的查询数据。典型代表为MongoDB以及CouchDB。
    3. 面向可扩展性的分布式数据库(Object Store):这类数据库想解决的问题就是传统数据库在可扩展性上的缺陷,这类数据库可以适应数据量的增加以及数据结构的变化,Google Appengine的Big Table就是这类的典型代表,并且,BigTable特别适用于Map Reduce处理。

    这里只对这几类数据库简要的介绍,需要详情可以看:http://en.wikipedia.org/wiki/NoSQL

    有空的话,以后也扯扯各类的具体差别,另外,个人感觉RAM Database挺有前途的,果如此,memcache就几乎不用了。



    1. 关系型数据库

    关系型数据库,是指采用了关系模型来组织数据的数据库。

    关系模型是在1970年由IBM的研究员E.F.Codd博士首先提出的,在之后的几十年中,关系模型的概念得到了充分的发展并逐渐成为主流数据库结构的主流模型。

    简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织

    关系模型中常用的概念:

    • 关系:可以理解为一张二维表,每个关系都具有一个关系名,就是通常说的表名
    • 元组:可以理解为二维表中的一行,在数据库中经常被称为记录
    • 属性:可以理解为二维表中的一列,在数据库中经常被称为字段
    • :属性的取值范围,也就是数据库中某一列的取值限制
    • 关键字:一组可以唯一标识元组的属性,数据库中常称为主键,由一个或多个列组成
    • 关系模式:指对关系的描述。其格式为:关系名(属性1,属性2, ... ... ,属性N),在数据库中成为表结构

    关系型数据库的优点:

    • 容易理解:二维表结构是非常贴近逻辑世界的一个概念,关系模型相对网状、层次等其他模型来说更容易理解
    • 使用方便:通用的SQL语言使得操作关系型数据库非常方便
    • 易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率

    2. 关系型数据库瓶颈

    • 高并发读写需求

    网站的用户并发性非常高,往往达到每秒上万次读写请求,对于传统关系型数据库来说,硬盘I/O是一个很大的瓶颈

    • 海量数据的高效率读写

    网站每天产生的数据量是巨大的,对于关系型数据库来说,在一张包含海量数据的表中查询,效率是非常低的

    • 高扩展性和可用性

    在基于web的结构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,数据库却没有办法像web server和app server那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移。


    对网站来说,关系型数据库的很多特性不再需要了:

    • 事务一致性

    关系型数据库在对事物一致性的维护中有很大的开销,而现在很多web2.0系统对事物的读写一致性都不高

    • 读写实时性

    对关系数据库来说,插入一条数据之后立刻查询,是肯定可以读出这条数据的,但是对于很多web应用来说,并不要求这么高的实时性,比如发一条消息之后,过几秒乃至十几秒之后才看到这条动态是完全可以接受的

    • 复杂SQL,特别是多表关联查询

    任何大数据量的web系统,都非常忌讳多个大表的关联查询,以及复杂的数据分析类型的复杂SQL报表查询,特别是SNS类型的网站,从需求以及产品阶级角度,就避免了这种情况的产生。往往更多的只是单表的主键查询,以及单表的简单条件分页查询,SQL的功能极大的弱化了


    在关系型数据库中,导致性能欠佳的最主要原因是多表的关联查询,以及复杂的数据分析类型的复杂SQL报表查询。为了保证数据库的ACID特性,我们必须尽量按照其要求的范式进行设计,关系型数据库中的表都是存储一个格式化的数据结构。每个元组字段的组成都是一样,即使不是每个元组都需要所有的字段,但数据库会为每个元组分配所有的字段,这样的结构可以便于标语表之间进行链接等操作,但从另一个角度来说它也是关系型数据库性能瓶颈的一个因素。

    3. NoSQL

    NoSQL一词首先是Carlo Strozzi在1998年提出来的,指的是他开发的一个没有SQL功能,轻量级的,开源的关系型数据库。这个定义跟我们现在对NoSQL的定义有很大的区别,它确确实实字如其名,指的就是“没有SQL”的数据库。但是NoSQL的发展慢慢偏离了初衷,我们要的不是“no sql”,而是“no relational”,也就是我们现在常说的非关系型数据库了。

    2009年初,Johan Oskarsson举办了一场关于开源分布式数据库的讨论,Eric Evans在这次讨论中再次提出了NoSQL一词,用于指代那些非关系型的,分布式的,且一般不保证遵循ACID原则的数据存储系统。Eric Evans使用NoSQL这个词,并不是因为字面上的“没有SQL”的意思,他只是觉得很多经典的关系型数据库名字都叫“**SQL”,所以为了表示跟这些关系型数据库在定位上的截然不同,就是用了“NoSQL“一词。

    注:数据库事务必须具备ACID特性,ACID是Atomic原子性,Consistency一致性,Isolation隔离性,Durability持久性。


    非关系型数据库提出另一种理念,例如,以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。使用这种方式,用户可以根据需要去添加自己需要的字段,这样,为了获取用户的不同信息,不需要像关系型数据库中,要对多表进行关联查询。仅需要根据id取出相应的value就可以完成查询。但非关系型数据库由于很少的约束,他也不能够提供像SQL所提供的where这种对于字段属性值情况的查询。并且难以体现设计的完整性。他只适合存储一些较为简单的数据,对于需要进行较复杂查询的数据,SQL数据库显的更为合适。


    4. 关系型数据库  V.S.  非关系型数据库

    关系型数据库的最大特点就是事务的一致性:传统的关系型数据库读写操作都是事务的,具有ACID的特点,这个特性使得关系型数据库可以用于几乎所有对一致性有要求的系统中,如典型的银行系统。

    但是,在网页应用中,尤其是SNS应用中,一致性却不是显得那么重要,用户A看到的内容和用户B看到同一用户C内容更新不一致是可以容忍的,或者说,两个人看到同一好友的数据更新的时间差那么几秒是可以容忍的,因此,关系型数据库的最大特点在这里已经无用武之地,起码不是那么重要了。

    相反地,关系型数据库为了维护一致性所付出的巨大代价就是其读写性能比较差,而像微博、facebook这类SNS的应用,对并发读写能力要求极高,关系型数据库已经无法应付(在读方面,传统上为了克服关系型数据库缺陷,提高性能,都是增加一级memcache来静态化网页,而在SNS中,变化太快,memchache已经无能为力了),因此,必须用新的一种数据结构存储来代替关系数据库。

    关系数据库的另一个特点就是其具有固定的表结构,因此,其扩展性极差,而在SNS中,系统的升级,功能的增加,往往意味着数据结构巨大变动,这一点关系型数据库也难以应付,需要新的结构化数据存储。

    于是,非关系型数据库应运而生,由于不可能用一种数据结构化存储应付所有的新的需求,因此,非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合

    必须强调的是,数据的持久存储,尤其是海量数据的持久存储,还是需要一种关系数据库这员老将


    5. 非关系型数据库分类

    由于非关系型数据库本身天然的多样性,以及出现的时间较短,因此,不想关系型数据库,有几种数据库能够一统江山,非关系型数据库非常多,并且大部分都是开源的。

    这些数据库中,其实实现大部分都比较简单,除了一些共性外,很大一部分都是针对某些特定的应用需求出现的,因此,对于该类应用,具有极高的性能。依据结构化方法以及应用场合的不同,主要分为以下几类:

    • 面向高性能并发读写的key-value数据库:

    key-value数据库的主要特点即使具有极高的并发读写性能,Redis,Tokyo Cabinet,Flare就是这类的代表

    • 面向海量数据访问的面向文档数据库:

    这类数据库的特点是,可以在海量的数据中快速的查询数据,典型代表为MongoDB以及CouchDB

    • 面向可扩展性的分布式数据库:

    这类数据库想解决的问题就是传统数据库存在可扩展性上的缺陷,这类数据库可以适应数据量的增加以及数据结构的变化







    展开全文
  • 关系数据库

    2019-07-20 18:54:44
    关系:一张二维表,每个关系都有一个关系名,在数据库中称为表名。 元组:二维表的一行,在数据库中被称为记录。 属性:二维表的一列,在数据库中被称为字段。 域:属性的取值范围,也就是数据库中某一列的取值...
  • 当前数据库分为关系数据库和非关系数据库 关系数据库 关系数据库:指采用了关系模型来组织...元组:二维表的一行,在数据库中被称为记录 属性:二维表的一列,在数据库中被称为字段 域:属性的取值范...
  • 关系数据库 ...域:属性的取值范围,也就是数据库中某一列的取值限制 关键字:一组可以唯一标识元组的属性,数据库中常称为主键,由一个或多个列组成 关系模式:指对关系的描述。其格式为:关系名(属性1
  • 关系数据库与NoSQL数据库简述

    千次阅读 2017-09-21 16:10:44
    关系:可以理解为一张二维表,每个关系都具有一个关系名,就是通常说的表名元组:可以理解为二维表的一行,在数据库中经常被称为记录属性:可以理解为二维表的一列,在数据库中经常被称为字段域:属性的取值范围...
  • 关系数据库

    2018-05-20 20:57:45
    关系数据库是目前各类数据库中最重要、最流行的数据库,它应用数据方法来处理数据库数据,关系数据库系统支持关系模型。关系模型由关系数据结构、关系操作集合和关系完整性约束三部分组成。关系模型的数据结构非常...
  • 用户看来,关系模型数据的逻辑结构是一张扁平的二维表。 1.1域 域是一组具有相同数据类型值的集合。 1.2笛卡儿积 笛卡儿积是域上的一种集合运算。 定义:给定一组域D1,D2,...,Dn,允许其中某些域是...
  • 数据库系统原理 - - (2)关系数据库

    千次阅读 多人点赞 2020-09-27 09:19:45
    文章目录二:关系数据库1.关系数据库概述a.关系数据库的产生历史b.关系数据模型的组成要素2.关系数据模型a.表(Table)b.关系(Relation)c.列(Column)d.行(Row)e.码或键(Key)f.超码或超键(Super Key)g.候选码...
  • 关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。 关系模型 现实世界的各种实体以及实体之间的各种联系均用关系模型来表示。关系模型由关系数据结构、关系操作...
  • 关系模型的常用概念 优点 不足 非关系数据库关系数据库: 非关系数据库结构 优点 不足 分类 CAP 理论 关系型与非关系数据库的比较 最近的数据库排名 关系数据库 关系数据库: 指采用...
  • 关系数据库及其优缺点 关系数据库(Mysql和Oracle):指采用了关系模型来组织...属性:二维表的每列就是属性,在数据库中被称为字段;数据库之间列无联系,行有联系 域:属性的取值范围,数据库中每一列的取值
  • 当前数据库分为关系数据库和非关系数据库 关系数据库 关系数据库:指采用了关系模型来...元组:二维表的一行,在数据库中被称为记录 属性:二维表的一列,在数据库中被称为字段 域:属性的取值范围...
  • 关系模型有3类完整性约束:域完整性、实体完整性、参照完整性。 1.域(列)完整性 也就是用户定义的表字段的完整性 通常指数据的有效性,它包括字段的值域、字段的类型及字段的有效规则等约束,它是由确定关系...
  • 最近使用pg和mysql时,需要一些坑,记录一下。 关键字问题 例如from to 为mysql关键字,作为字段查询时,必须加引号 SELECT `from`,`to` FROM sc;(适用于mysql) SELECT &quot;from&quot; ,&...
  • 由于历史原因及业务因素,某些数据我们不能转移到非关系数据库如MongoDB上,这时我们就需要考虑如何旧有的关系数据库上进行快速检索。 温故知新 要调优关系数据库上的检索性能,我们首先得了解,关系型...
  • 数据库分类:关系数据库,层次数据库,网状数据库. 数据库基本特征: 1)具有较高的数据独立性;数据独立性是指数据的组织方法和储存方法与应用程序互不依赖,彼此独立的特性,包括物理独立性和...
  • 关系数据库的理解

    千次阅读 2015-11-26 19:43:50
    1.关系数据库简单的可以理解为二维数据库,表的格式就如Excel,有行有列。常用的关系数据库有Oracle,Sql...关系模型是1970年由IBM的研究员E.F.Codd博士首先提出,之后的几十年关系模型的概念得到了充...
  • 数据库学习打卡》第7天 关系数据库模型对应...域:属性的取值范围,也就是数据库中某一列的取值限制 关键字:一组可以唯一标识元组的属性,数据库中常称为主键,由一个或多个列组成 其中属性(列)可以有相同类...
  • 关系数据库到非关系数据库

    千次阅读 2013-05-16 11:06:08
    在关系数据库日益强大的时候,人们发现,这个信息爆炸的“大数据”时代,关系数据库遇到了性能方面的瓶颈,面对一个表上亿条的数据,SQL语句大数据的查询方面效率欠佳。我们应该知道,往往添加了越多的...
  • 关系数据库——sql基础1定义

    千次阅读 多人点赞 2019-10-21 17:07:09
    关系数据库标准语言SQL 基本概念 SQL语言是一个功能极强的关系数据库语言。同时也是一种介于关系代数与关系演算之间的结构化查询语言(Structured Query Language),其功能包括数据定义、数据查询、数据操纵和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 46,019
精华内容 18,407
关键字:

在关系数据库中关键字的取值