第三阶段 数据库

2024-04-07 15:58
文章标签 数据库 第三阶段

本文主要是介绍第三阶段 数据库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、为什么要用数据库(永久化)

        Q1:数据库存储在哪些地方

        答:变量(内存、临时存在)、硬盘、U盘、网盘(文件)

二、数据库的作用

        1、存储大量的数据,访问和检索(管理数据)

        2、保证数据的完整性(正确性)

        3、安全和共享

        4、数据可以进行组合(数据分析)

三、数据库是什么

        就是存储数据的“仓库”,本质也是一个文件

四、数据存储形式发展历史

        1、层次模型

        2、网状模型

        3、关系模型(重点)

        4、对象模型(非关系模型):mongodb

五、关系型数据库

        1、以表为基本单位

        2、表由行列组成

        3、表:存储相同实体(记录)的一个集合

        4、行:一个实体(或一行记录)

        5、列:属性(字段)

        6、关系型:由实体和关系组成

  • 1对1(1:1)
  • 1对多(1:n)
  • 多对多(n:n)

六、数据库管理系统

        1、数据库(DataBase,简称DB)

        2、管理系统(Manage System,简称MS)

        3、关系型(Ralation,关系)

        4、关系型数据库管理系统(RDBMS)

        如:SQL Server、Oracle、db2、MySQL、access、Sybase...

七、SQL

        1、SQL是结构化查询语言(Structured Query Language)

        2、作用:定义数据库的结构、存储数据、操纵数据、获取数据、控制对数据的访问以及确保数据的完整性。

  • 数据定义语言(DDL)
  • 数据查询语言(DQL)
  • 数据操作语言(DML)
  • 数据控制语言(DCL)

八、数据定义语言(DDL)

1、数据库

  • 创建数据库
create database 数据库名称;
  • 删除数据库
drop database 数据库名称;
  • 使用数据库
use 数据库名称;
  • 命名规范:

        1)、第一个字符必须是下列字符之一:a-z 和 A-Z,下划线 (_)、at 符号(@)或者 # 。

        2)、后续字符可以是:at符号(@)、美元符号($)、数字符号或下划线。

        3)、标识符不能是所用RDBMS的保留字。

        4)、不允许嵌入空格或其它特殊字符。

2、表(表的结构)

  • 数字类型
int
float
double
decimalchar
varchardate
datetime...

数据完整性约束的分类(重点)

1)、实体完整性(约束行)

        主键约束

        标识列

        唯一约束

        主键与唯一约束的区别:唯一约束可以为null,但是主键不能为null。

2)、域完整性(约束列)

        非空约束

        默认约束

        check约束(长度、范围等等)

3)、引用完整性

        外键约束

        外键和外键约束的区别:

                外键:在定义表时约定的关系,不会强制它。

                外键约束:创建表时约定的外键关系,SQL会强制执行。

                                  从表的数据必须在主表存在,否则报错。

                                  主表的数据删除,必须保证从表没有引用,否则报错。

4)、自定义完整性

        自己定义规则(存储过程、视图、触发器)

  • 创建表
create table 表名(列名 数据类型 [约束]...);
  • 删除表
drop table 表名;
  • 复制表
create table 表名 select * from 表名2;
-- 复制表的结构和数据create table 表名 select * from where 1 = 0;
-- 复制表的结构注:外键不会被复制
  • 修改表
添加列:alter table 表名 add 列名 列的数据类型 [列的约束];修改列:alter table 表名 change 旧列名 新列名 新的数据类型 [新的列约束];删除列:alter table 表名 drop 列名;

九、数据操作语言(DML)

  • 添加数据
单行数据:全部列:insert into 表名 values (数据);部分列:insert into 表名(列名) values (数据);多行数据:insert into 表名(列名) values (数据1),(数据2),(数据3),...;
  • 修改数据
update 表名 set 列名 = 新的值;
update 表名 set 列名 = 新的值 [where条件];条件中使用的关系表达式:and、or
MySQL中不等于符号支持:!= 和 <>
  • 删除数据
delete from 表名;
delete from 表名 [where表名];
truncate table 表名;    -- 删除表中所有的数据
  • truncate和delete的区别:

        truncate和delete都可以实现数据的删除。delete删除时会日志(可以恢复),但效率比较低,且不能重置自增列;truncate没有日志(不能恢复),但效率高,且能重置自增列。

十、数据查询语言(DQL)

        查询的原理:
                1、加载表,从第一行开始,进行条件的筛选,符合条件的进行保存,依次进行,直到所有数据查询完毕
                2、执行顺序:from —> where —> select(投影) —> group by —> having —> order by —> limit
                3、查询一定会遍历整个表

1、简单查询

-- 查询全部列
select * from 表名;-- 查询指定列
select 字段名1,字段名2,... from 表名;-- 计算列
select age+5 from student; -- 数字列可以进行计算
select concat(studentid,"haha") from student; -- 非数字列的相加(也可以用于两个字段的连接)-- 去重distinct
select distinct 字段名 from 表名;-- 指定显示的行数
select * from 表名 limit [开始的行数(从0开始)],取指定的条数;-- 选择操作
select 字段名 from 表名 where 条件;-- 多条件查询(and、or)
select * from 表名 where 条件1 and 条件2;
select * from 表名 where 条件1 or 条件2;-- 条件范围
-- 1、between 开始值 and 结束值 <=> >=开始值 and <= 结束值
-- 注:开始值不能大于结束值,如果大于不会报错,但是没有数据
select * from 表名 where 字段名 between 开始值 and 结束值;-- 2、in / not in
select * from 表名 where 字段名 in (值1,值2,...);
select * from 表名 where 字段名 not in (值1,值2,...);-- 模糊查询 like
/* 通配符:% :任意长度的任意字符_ :任意的单个字符
*/
select * from 表名 where 字段名 like '';-- 查询为空 is null / is not null
select * from 表名 where 字段名 is null;
select * from 表名 where 字段名 is not null;-- 排序 order by
-- 升序asc(缺省值) 、降序desc
select * from 表名 order by 需要排序的字段名1 desc,需要排序的字段名2 asc;

2、聚合函数

        注:聚合函数返回单行、单列,且统计不为null的数据。单行和多行一起显示时,MySQL不会报错,只会显示多行列的一行,但是SQL sever中会报错。

        count():计数

        avg():平均值

        max():最大值

        min():最小值

        sum():求和

3、分组统计

  • group by
select 字段名,count(1) from 表名 group by 需要分组的字段名1,需要分组的字段名2,...;
  • having(对分组后的结果进行筛选)
select 字段名,count(1) from 表名 group by 需要分组的字段名1,需要分组的字段名2,... having 分组条件;

4、子查询

        定义:在一个查询中嵌套另一个查询。可以在任意一个关键字后面插入子查询,但一般只写一下三种:

  • select子查询

         要求查询结果:单行、单列

         特点:效率低,不建议使用

-- 相关子查询
select *,(select className from class where classNo = student.classNo)as className form student;注:select子查询中的select关键字后面只能写一个字段名。
  • from子查询

         要求查询结果:多行、多列

select * from
(select * from student where classNo = 2) as temp
where age < 20;-- from后面的子查询必须命别名(as),否则会报错
  • where子查询

        要求查询结果:关系运算符后,单行、单列;in / not in后,多行、单列。

select * from 学生 where 学号 in (select 学号 from 成绩表 where 分数<60);

5、表连接

  • 内连接(join / inner join)
select * from A inner join B on A.Aid = B.bnameid;等价于:
select * from A,B where A.Aid = B.bnameid;-- A、B两张表可以调换位置,对结果没有影响
  • 外连接

        左外连接(left join):以关键字的左边的这个表为准,数据全部显示出来,右边进行匹配,如果没有匹配的数据就希纳是为null。

        右外连接(right join)

十一、数据库设计三大范式

        第一范式(1NF):行不可重复,列不可再分(根据情况),确保每列保持原子性。

        第二范式(2NF):必须满足第一范式。非主键列必须完全依赖于主键列。

        第三范式(3NF):必须满足第二范式。确保数据表中的每一列数据都和主键直接相关,而不能间接相关。

        经验:数据不要冗余、方便查询、多对多关系通常3张表

这篇关于第三阶段 数据库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/883027

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

深入理解数据库的 4NF:多值依赖与消除数据异常

在数据库设计中, "范式" 是一个常常被提到的重要概念。许多初学者在学习数据库设计时,经常听到第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及 BCNF(Boyce-Codd范式)。这些范式都旨在通过消除数据冗余和异常来优化数据库结构。然而,当我们谈到 4NF(第四范式)时,事情变得更加复杂。本文将带你深入了解 多值依赖 和 4NF,帮助你在数据库设计中消除更高级别的异常。 什么是

DM8数据库安装后配置

1 前言 在上篇文章中,我们已经成功将库装好。在安装完成后,为了能够更好地满足应用需求和保障系统的安全稳定运行,通常需要进行一些基本的配置。下面是一些常见的配置项: 数据库服务注册:默认包含14个功能模块,将这些模块注册成服务后,可以更好的启动和管理这些功能;基本的实例参数配置:契合应用场景和发挥系统的最大性能;备份:有备无患;… 2 注册实例服务 注册了实例服务后,可以使用系统服务管理,

速了解MySQL 数据库不同存储引擎

快速了解MySQL 数据库不同存储引擎 MySQL 提供了多种存储引擎,每种存储引擎都有其特定的特性和适用场景。了解这些存储引擎的特性,有助于在设计数据库时做出合理的选择。以下是 MySQL 中几种常用存储引擎的详细介绍。 1. InnoDB 特点: 事务支持:InnoDB 是一个支持 ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。行级锁:使用行级锁来提高并发性,减少锁竞争

开源分布式数据库中间件

转自:https://www.csdn.net/article/2015-07-16/2825228 MyCat:开源分布式数据库中间件 为什么需要MyCat? 虽然云计算时代,传统数据库存在着先天性的弊端,但是NoSQL数据库又无法将其替代。如果传统数据易于扩展,可切分,就可以避免单机(单库)的性能缺陷。 MyCat的目标就是:低成本地将现有的单机数据库和应用平滑迁移到“云”端

ORACLE 11g 创建数据库时 Enterprise Manager配置失败的解决办法 无法打开OEM的解决办法

在win7 64位系统下安装oracle11g,在使用Database configuration Assistant创建数据库时,在创建到85%的时候报错,错误如下: 解决办法: 在listener.ora中增加对BlueAeri-PC或ip地址的侦听,具体步骤如下: 1.启动Net Manager,在“监听程序”--Listener下添加一个地址,主机名写计

MyBatis 切换不同的类型数据库方案

下属案例例当前结合SpringBoot 配置进行讲解。 背景: 实现一个工程里面在部署阶段支持切换不同类型数据库支持。 方案一 数据源配置 关键代码(是什么数据库,该怎么配就怎么配) spring:datasource:name: test# 使用druid数据源type: com.alibaba.druid.pool.DruidDataSource# @需要修改 数据库连接及驱动u

CentOS下mysql数据库data目录迁移

https://my.oschina.net/u/873762/blog/180388        公司新上线一个资讯网站,独立主机,raid5,lamp架构。由于资讯网是面向小行业,初步估计一两年内访问量压力不大,故,在做服务器系统搭建的时候,只是简单分出一个独立的data区作为数据库和网站程序的专区,其他按照linux的默认分区。apache,mysql,php均使用yum安装(也尝试

Java基础回顾系列-第九天-数据库编程

Java基础回顾系列-第九天-数据库编程 数据库简介工具包java.sql API 内容与数据库建立连接执行SQL语句数据库检索和更新查询结果SQL类型对应Java类型映射元数据异常 API方法DriverManagerConnectionStatementPreparedStatementCallableStatementResultSetjava.sql.Date批处理、存储过程、事务