关系型数据库基础总结

本文详细介绍了关系型数据库的基础知识,包括集中式控制的优点、数据存储形式、关系模型等概念,以及RDBMS、SQL语言的使用。讨论了数据库的创建、删除,数据类型的分类,以及表的操作如创建、删除、修改。此外,还涵盖了数据完整性、DML语句更改数据的方法,如插入、更新、删除,以及简单的数据查询、聚合函数、分组、子查询和组合查询。最后,文章简述了数据库建模的过程和ER建模的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


  1.  关系型数据库管理系统简介

    数据库的集中式控制有如下优点:

      1.降低数据存储的冗余度

      2.更高的数据一致性

      3.存储的数据可以共享

      4.便于维护数据完整性

      5.能够实现数据的安全性

     

    数据在数据库中的存储形式

      1.层次模型

      2.网状模型

      3.关系模型

      4.对象模型

     

    关系型数据库的基本概念

      关系模型把世界是由实体和联系组成的。

      实体就是指在现实世界中客观存在并可相互区别的事物。

      实体所具有的某一特性称为属性。

      以关系模型来创建的数据库称为关系型数据库。

      表(table)是关系型数据库的核心单元,它是数据存储的地方。

      在关系型数据库中用一个唯一的标识符来标识每一个行,这个标识符就是主键(Primary Key)。

      在关系型数据库中,外键(Forergn Key)就是用来表达表与表之间的关联关系。

      表与表的关联关系有:一对一关系  一对多关系  多对多关系

     

      RDBMS是管理,操作和维护关系型数据库的一种软件程序。

      分为本地和服务器数据库管理系统两种类型。

      SQL(结构化查询语言)是关系型数据库的标准编程语言,我们可以通过编写SQL语句访问和操纵数据库中的数据。

      SQL标准定义了操作关系型数据库及其包含的数据的多种技术,它分为数据定义语言(DDL),数据查询语言(DQL),数据操作语言(DML),数据控制语言(DCL)。

     

  2.  管理数据库和表

    创建和使用数据库

     创建数据库:

      create database 数据库名;

      数据库名在服务器中必须是唯一的,并符合标识符规则

      第一个字符必须是Unicode标准3.0所定义的字母,下划线(-),at符号(@)或者数字符号(#)

      后续字符可以是Unicode标准3.0所定义的字母,下划线(-),at符号(@),美元符号()或者数字符号(#),十进制数字

      标识符不能是所用RDBMS的保留字

      不允许嵌入空格或其它特殊字符

     

    连接数据库:

    use 数据库名;

     

    删除数据库:

    DROP DATABASE 数据库名;

     

    数据类型

     1.整数数据类型

     2.浮点数据类型

     3.字符串类型

     4.日期和时间数据类型

     

    创建表:

    create table 表名(

       列名 列的数据类型 列的约束

      );

     

    删除表:

    drop table 表名;

     

    查询所有信息:

    select * from 表名;

     

    复制表,包括数据结构和数据:

    create table 复制的表名 select * from 被复制的表名;

     

    复制表,只复制数据结构:

    create table复制的表名select * from被复制的表名where 100=0(不等于ture的条件);

     

    添加列:

    alter table 表名 add  列名 列的数据类型;

     

    修改列:

    alter table 表名 change 旧列名 新列名 列的数据类型;

     

    删除列:

    alter table 表名 drop column 列名;

     

    创建索引:

    create index 索引名 on 表名(列名);

     

    删除索引:

    alter table 表名 drop index 索引名;

     

     

  3.  保证数据完整性

    数据完整性概述

      1.实体完整性

      2.域完整性

      3.引用完整性

      4.用户自定义完整性

     

    设置非空约束(NOT NULL)

    设置主键约束(Primary Key Constraint)

    设置唯一约束(Unique Constraint)

    指定默认值(DEFAULT)

    设置检查约束(Check Constraint)

    创建主表:

    create table 表名 (

      列名1 int primary key,

      列名2 char(20) not null,

      列名3 char(20) not null

    )charset=utf8;

     

    创建从表:

    create table 表名(

      列名1 int primary key,

      列名2 char(20)not null,

      列名3 int not null,   

      列名1 int references 主表名(列名(主键)),

          Constraint foreign key(列名1)references主表名(列名(主键))

      )engine=innoDB default charset=utf8;

     

    创建自增长:

     create table 表名(

        列名1 int primary key auto-increment,

        列名2 char(20) not null,

    列名3 int nto null

    )charset=utf8;

     

    设置自增长初始值:

    alter table 表名 auto-inrement=100;

     

    删除唯一约束:

    alter table 表名 drop index 列名(unique);

     

    添加主键:

    alter table 表名 change 旧列名 新列名 列的数据类型, add primary key(新列名);

     

    第四章  使用DML语句更改数据

  1. 插入单行记录:
    insert into 表名 (列名列表) values (值列表);
    在数据库中,字符串用单引号‘’包含。

    2.可以省略列名列表,但插入的数值必须和表中的一一对应。

    3.列名列表:指定插入记录的目标表的列名,是一个以逗号分隔的列名列表。

    4.插入多行记录:(只能在my sql 中使用)
    insert into 表名(列名列表) values(值列表),(值列表),(值列表),(值列表).........

    5.复制表数据:(前提是:需要有一张与被复制的表的数据结构一模一样)
    insert into 新表名 select * from 被复制的表名;

    6.修改数据类型:alter table 表名 change 旧列名 新列名 数据类型;

    7.更改已有数据:
    update 表名 set 列名=值 where 过滤条件;

    8.通过更新删除列的数据:
    删除某列数据:把该列的值设置为null;前提是:该列允许为空值,即没有非空约束。

    (1).将一列的数据全部删除:update 表名 set 列名=null;
    (2).删除列中某一属性的值:update 表名 set 列名=null where 过滤条件;

    10.删除数据:(如果一张表中存在外键约束,就不能使用有过滤条件(where)的约束)
    (1).delete from 表名 where 过滤条件;
    (2).删除多行:delete from 表名 where 过滤条件 or 过滤条件;
    (3).删除某一区间的数据:delete from 表名 where 列名 between 下限 and 上限;

    11.使用 truncate 语句(没有过滤条件)
    truncate table 表名;
    truncate table 不能用于有外键约束引用的表。

    12.delete 会记录删除日志,删除数据后还能恢复,但执行效率低。

    13.truncate table 不会记录删除日志,删除数据后不能恢复,但执行效率高。

    14.复制表数据:insert into 新表名 select * from 被复制的表名;

    15.修改约束:alter table 表名 change 旧列名 新列名 数据类型;

     

    第五章 简单的数据查询

    投影操作:

      Select  列名  from  表名;

      Select  列名1,列名2  from  表名;

      Select  *  from  表名;

    表名前缀:

     Select  表名.列名 from 表名;

    列别名:

    Select  列名1 AS a,列名2 AS b  from 表名 AS c;

    排除重复数据:

    SELECT DISTINCT 列名 FROM 表名;

    查询限定行数据:

    SELECT * FROM 表名 LIMIT 1,50;

    选择操作:

     Select 列名 from 表名 where 条件1(and/or)条件2;

     单条件选择操作:

      Select列名1,列名2 from 表名 where 列名3 = 值;

     

    执行范围操作:

    Select 列名 from 表名 where 列名 beween 下and 上

    定义集合:

    Select 列名 from 表名 where 列名(in/not in);

    模糊查询:

    Select 列名 from 表名 where列名 like _%;

    处理空值数据:

    Select 列名 from where 列名(is null/is not null);

    升序和降序:

    Select 列 from 表 order by 列(asc/desc);

     

     

    第六章  聚合函数与分组

    聚合函数:

  1. count;返回结果集中行的数目

    Select count()from 表名;

    2.sum;返回结果集中所有值得总和

      Select sum()from 表名;

    3.avg;返回结果集中所有值的平均值

      Select avg()from 表名;

    4.max;返回结果集中所有值的最大值

      Select max()from 表名;

    5.min;返回结果集中所有值的最小值

      Select min()from 表名;

     

    在带有group by 子句的查询语句中,在select 列表中指定的列要么是group by 子句中指定的列,要么包含聚合函数

    查询语句的select 和group by ,having 子句是聚合函数唯一出现的地方,在where 子句中不能使用聚合函数。

    当在gropu by 子句中使用having 子句时,查询结果中只返回满足having条件的组。在一个sql语句中可以有where子句和having子句。having 与where  子句类似,均用于设置限定条件。where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。

     

     

    第七章  组合查询

    什么为子查询:

       子查询又称之为内部查询,包含子查询的查询语句成为外部查询。

     子查询我们又分为两类:

    1.非相关子查询:是独立于外部查询的子查询,子查询总共执行一次,执行完后将值传递给外部查询。

    2.相关子查询:她的执行依赖于外部查询的数据,外部查询返回一行,子查询就返回一次。

     

    注意:如果子查询与外部查询使用同一个表,子查询也需要加上前缀作为限定,在这是我们一般使用表的别名来区分。 WHERE 子句中的子查询:

       select columnA from table columnB =(子查询)

     

    在子查询中使用运算符:

             1:使用EXISTS运算符(后总是跟一个子查询,只要子查询返回了行,它的值就为真)

              2:使用ALL运算符

              3:使用ANY运算符

              ANY与ALL不同的是:在子查询返回的值中,只要有一行满足比较运算,那么比较表达式就为真,如果所有值都不满足,则返回假。

     组合查询数据:使用union的运算符

     

    第八章  联接

    内联接:

     内部联接是使用比较运算符比较要联接列中的值的联接。

    join on用在from子句后面,而= ,> ,< ,<>,>=,<=则用在where子句中。

    外联接:

    左外联接:则左表中的所有行存在于查询结果中,而匹配列中列值不匹配的将用空值填充。(lift join)

    右外联接:则右表中的所有行存在于查询结果中,而匹配列中列值不匹配的将用空值填充。(right join)

    完全外联接:将返回两个表的所有行 (full join)

    第九章 数据库建模

    传统软件开发五个阶段:

  1. 需求分析

  2. 设计

  3. 编码

  4. 测试

  5. 维护

    数据库设计过程:

  1. 规划阶段(三步骤):系统调查,可行性分析(分析报告),开发计划

  2. 需求分析(工作):分析用户活动(业务流程图),确定系统范围(系统范围图),分析用户活动涉及的数据(数据流图),分析系统数据(数据字典)。

  3. 概念涉及(的主要步骤):进行数据抽象,涉及局部概念模式;将局部概念模式综合成全局概念模式;评审。

  4. 逻辑设计(目标):数据模型映射

  5. 物理设计(的步骤):存储记录结构设计,确定数据存放的位置,存储方法的设计,完整性和安全性考虑,程序设计。

  6. 数据库的实现(主要工作):用DDL定义数据库结构;组织数据入库;编制与调试应用程序;数据库试运行(功能测试,性能测试)。

  7. 数据库的运行与维护工作:数据库的转储和恢复;数据库安全性,完整性控制;数据库性能的监督,分析和改进;数据库的重组织和重构造。

    概念设计---ER建模(概念数据模型):

      为什么要用ER建模?

      --- 通用的数据库建模的方法

      --- 与具体数据库无关

      什么是模型?

      ---ER:实体(Entity)关系(Relation)

    范式一:列不可再分(值必须唯一),行不可重复(定义主键)。

    范式二:非主键列必须依赖于主键列(非主依主)。

    范式三:非主键列之间必须相互独立(非主独立)。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值