数据库(一) 基础知识

概述

数据库是按照数据结构来组织,存储和管理数据的仓库

数据模型

数据库系统的核心和基础是数据模型,数据模型是严格定义的一组概念的集合。因此数据模型一般由数据结构、数据操作和完整性约束三部分组成。数据模型主要分为三种:层次模型,网状模型和关系模型。关系模型是目前使用最广泛的数据模型,关系型数据库采用的就是关系模型作为数据的组织方式,例如ORACLE,MYSQL等关系型数据库

  • 关系模型特点
    • 关系模型中数据的逻辑结构是一张二维表,或者说关系的数据结构就是一张表
    • 关系数据模型的数据操作主要包含查询、插入、删除和更新数据
    • 关系模型的完整性约束条件包含三大类:实体完整性、参照完整性和用户自定义的完整性
    • 实体完整性规则:若属性(指一个或一组属性)A是基本关系R的主属性,则A不能取空值(由此规则可得一直接结论:主键不能为空)
    • 参照完整性规则:若属性(或属性组)F是某基本关系R的外键,且它与基本关系R1的主键相对应,则对于R中每个F上的值或为空值或者等于R1中的主键值

数据库分类

关系型和非关系型数据库区别

注意:

  • OLTP(On-Line Transaction Processing)是指联机事务处理
  • OLAP(On-Line Analytical Processing)是指联机分析处理

数据库主要分为关系型数据库非关系型数据库,各自特点如下

  • 关系型数据库(RDBMS)
    • 采用了关系模型来组织数据的数据库。关系模型的完整性规则是对关系的某种约束,分为实体完整性、参照完整性约束和用户定义完整性,即关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。关系数据库中关系称为表、元组称为行、属性也称为列
    • 常见的关系型数据库如:Oracle、MySQL、SQL Server
  • 非关系型数据库:
    • 现在更多是指NoSQL数据库,如:基于键值对(redis)、基于文档型(mongodb)、基于列族(hbase)、基于图型(neo4j)

事务

事务是指用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。事务具有4个特性:原子性、一致性、隔离性、持续性。简称为ACID特性

  • Atomicity(原子性):事务是一个不可分割的整体,事务内所有操作要么全做成功,要么全失败
  • Consistency(一致性):事务执行前后,数据从一个状态到另一个状态必须是一致的(A向B转账,不能出现A扣了钱,B却没收到)
  • Isolation(隔离性): 多个并发事务之间相互隔离,不能互相干扰
  • Durability(持久性):事务完成后,对数据库的更改是永久保存的,不能回滚

索引

索引是对数据库中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的数据

  • 索引优点
    • 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性
    • 可以大大加快数据的检索速度(创建索引的主要原因)
    • 在使用分组(group by)和排序(order by)子句进行数据检索时,同样可以显著减少查询中分组和排序的时间
    • 可以加速表和表之间的连接,特别是在实现数据的参照完整性方面特别有意义
  • 索引缺点
    • 增加了数据库的存储空间
    • 插入和删除数据时要花费较多时间(因为索引也要随之变动)

视图

  • 视图是从一个或几个基本表(或视图)导出的表。与基本表不同,它是一个虚表
  • 数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中
  • 所以基本表中的数据发生变化时,视图中查询出的数据也就随之改变了
  • 视图就像一个窗口,透过它可以看到数据库中自己感兴趣的数据及其变化
  • 视图一经定义,就可以和基本表一样被查询、删除

主键与外键

  • 候选码:关系(二维表)中能唯一标识一个元组的属性组
  • 主键:如果一张表有多个候选码,则选定其中一个为主键
  • 外键:如果关系模式R中的某属性集不是R的主键,而是另一个关系R1的主键,则该属性集是关系模式
  • 主属性与非主属性:候选码的主属性称为主属性。不包含在任何候选码中的属性称为非主属性

SQL分类

SQL全称Structured Query Language,指的是结构化查询语言。SQL语句主要包括

  • 数据定义(DDL):create、drop、alter
  • 数据查询(DQL):select
  • 数据操作(DML):insert、update、delete
  • 数据控制(DCL):grant、revoke

DDL数据定义语言

  • create database <dbName>; ##创建数据库
  • show databases; ## 显示当前数据库列表
  • alter database <dbName> character set utf8; ## 修改数据库的字符集
  • drop database <dbName>; ## 删除数据库

DQL数据查询语言

DQL用来从数据表中提取满足特定条件的记录

  • 基本语法
    • select columnName1 [columnName1, columnName2, ...] from <tableName> [where conditions]; # select 关键词后指定要显示查询到的记录的那些列
  • Where子句:  在删除、修改及查询的语句后都可以添加where子句(条件),用于筛选满足特定的添加的数据进行删除、修改和查询操作。
    • delete from tableName where conditions;
    • update tableName set ... where conditions;
    • select ... from tableName where conditions;
  • LIKE子句: 在where 子句的条件中,我们可以用 like 关键字来实现模糊查询,
    • select * from tableName where column like 'reg';
      • 其中reg表达式中
      • %表示任意多个字符【%o%包含字母o】
      • _表示任意一个字符【_o%第二个字母为o】
    • # 查询学生姓名包含字母o的学生信息
    • select * from stus where stu_name like '%o%';
    • # 查询学生姓名第一个字为‘张’的学生信息
    • select * from stus where stu_name like '张%';
    • # 查询学生姓名第二个字母为o的学生信息
    • select * from stus where stu_name like '_o%';
  • 排序 order by: 将查询到的满足条件的记录按照指定的列的值升序/降序排列
  • select * from tableName where conditions order by columnName asc|desc;
  • 聚合函数: SQL 中提供了一些可以对查询的记录的列进行计算的函数–聚合函数
    • count()统计函数,统计满足条件的指定字段值的个数(记录数)
    • max() 计算最大值,查询满足条件的记录中指定列的最大值
    • min() 计算最小值,查询满足条件的记录中指定列的最小值
    • sum() 计算和, 查询满足条件的记录中 指定的列的值的总和
    • avg() 求平均值,查询满足条件的记录中 计算指定列的平均值
      • 总数:select count(*) as totalcount from table1;
      • 求和:select sum(field1) as sumvalue from table1;
      • 平均:select avg(field1) as avgvalue from table1;
      • 最大:select max(field1) as maxvalue from table1;
      • 最小:select min(field1) as minvalue from table1;
  • Group by: 根据一个或多个属性的值对元组分组,值相同的为一组,通常分组后聚集函数将作用于每一个组,即每一组都有一个函数值; 如果分组后还要求按一定的条件对这些分组进行筛选,最终只输出满足指定条件的组,则使用HAVING短语指定筛选条件
    • # 按年龄分组,统计每个年龄的人数,并输出(年龄,该年龄的人数)
    • select Sage, count(*) from Student group by Sage;
    • # 按年龄分组,统计每个年龄的人数,选出人数大于1的分组,输出(年龄,该年龄的人数)
    • select Sage, count(*) from Student group by Sage having count(*) > 1;
  • 连接查询: 一次查询涉及多张表
  • 假设有2个表——Student表和SC表(选课表):
    • 内连接(自然连接):当使用内连接时,如果Student中某些学生没有选课,则在SC中没有相应元组。最终查询结果舍弃了这些学生的信息
      • 查询每个学生及其选修课程的情况(没选课的学生不会列出)
      • SELECT Student.*, SC.* FROM Student , SC WHERE Student.Sno=SC.Sno;
    • 外连接:如果想以Student表为主体列出每个学生的基本情况及其选课情况。即使某个学生没有选课,依然在查询结果中显示(SC表的属性上填空值)。就需要使用外连接
      • 查询每个学生及其选修课程的情况(没选课的学生也会列出)
      • SELECT Student.*, SC.*
      • FROM Student LEFT JOIN SC ON(Student.Sno=SC.Sno);
  • 分页查询: 一次检索所有的记录,会占用系统很大的资源,因此常常采用分页语句:需要多少数据就只从数据库中取多少条记录;
    • 不同的数据库分页语句有所不同,mysql关键字为limit,SqlServer为top,Oracle则为rowNum

DML数据操作语言

DML用来完成对数据表中数据的插入、删除、修改操作

  • insert into <tableName>(columnName, columnName...) values(value1,value2...) #插入数据
  • delete from <tableName> [where conditions] #删除数据
  • update <tableName> set columnName=value [where conditions] #修改数据

DCL数据控制语言

DCL用来创建用户,管理用户权限

  • create user 'user_name'@host_name [IDENTIFIED BY[PASSWORD ]'password' ]#createUsr
  • select * from user #查看用户
  • drop user '用户名'@主机名 #删除用户
  • grant 权限1,权限2 on 数据库名称.表名称 to 用户名@用户地址 #赋予权限
  • revoke 权限1,权限2 on 数据库名称.表名称 from 用户名@用户地址 #撤销权限

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/60269.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker linux(centos 7) 安装

这是个目录 1:安装1:手动安装(适用于centos7)之一2:手动安装(适用于centos7)之二3&#xff1a;一键安装docker4:二进制安装1&#xff1a;下载二进制包2&#xff1a;解压3&#xff1a;移动文件4&#xff1a;后台运行docker5&#xff1a;测试 dicker命令表999&#xff1a;遇到的问…

java解析html

目录 场景描述一.引入依赖二.调用接口响应回来的html三.测试代码 场景描述 我调用外部接口&#xff0c;但是返回来的数据是html的格式&#xff0c;所以我就需要进行处理来获得我想要的数据。我使用的是jsoup。 一.引入依赖 <dependency><groupId>org.jsoup</gr…

Go 使用 Gorm 将操作信息集成到链路跟踪 Jaeger,进行增删改查使用举例,并做可视化UI界面展示(附源码)

Go 使用 Gorm 将操作信息集成到链路跟踪 Jaeger,进行增删改查使用举例(附源码)。 为了增强程序的可观测性,方便问题定位,在发起数据库操作请求时我们也可以调用代码统一集成链路跟踪的能力,Jaeger 是当今比较流行的选择。使用 Gorm 来将操作信息集成到 Jaeger 中。 全面…

C++笔记之临时变量与临时对象与匿名对象

C笔记之临时变量与临时对象与匿名对象 code review! 文章目录 C笔记之临时变量与临时对象与匿名对象1.C中的临时变量指的是什么&#xff1f;2.C中的临时对象指的是什么&#xff1f;3.C中临时对象的作用是什么&#xff1f;什么时候要用到临时对象?4.给我列举具体的例子说明临…

回归预测 | MATLAB实现CSO-ELM布谷鸟算法优化极限学习机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现CSO-ELM布谷鸟算法优化极限学习机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现CSO-ELM布谷鸟算法优化极限学习机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览基本介…

html中如何用vue语法,并使用UI组件库 ,html中引入vue+ant-design-vue或者vue+element-plus

html中如何用vue语法&#xff0c;并使用UI组件库 前言 先说一下本次应用的场景&#xff0c;本次项目中&#xff0c;需要引入github中别人写好的插件&#xff0c;插件比较大&#xff0c;没有方法直接在自己项目中&#xff0c;把别人的项目打包合并生成html&#xff08;类似于前…

Muscles|Tissue —— 介绍

BETA —— 此功能仍然在开发测试中&#xff0c;相关文档很少或没有&#xff0c;使用时需注意&#xff1b; 可使用Vellum-based Muscles & Tissue系统&#xff0c;模拟角色的肌肉、组织、及皮肤&#xff1b;可轻易导入模型和动画&#xff0c;并快速配置解算模拟&#xff1b;…

提高企业会计效率,选择Manager for Mac(企业会计软件)

作为一家企业&#xff0c;良好的财务管理是保持业务运转的关键。而选择一款适合自己企业的会计软件&#xff0c;能够帮助提高会计效率、减少错误和节约时间。在众多的选择中&#xff0c;Manager for Mac(企业会计软件)是一款值得考虑的优秀软件。 首先&#xff0c;Manager for…

Java流式编程详细介绍

文章目录 1. 流式编程介绍2. 过滤2.1 filter2.2 distinct2.3 limit2.4 sorted2.5 skip 3. 映射3.1 map3.2 flatmap 4 查找4.1 allMatch4.2 anyMatch4.3 noneMatch4.4 findFirst4.5 findAny 5. 归约6. 收集6.1 counting6.2 maxBy,minBy6.3 summingInt、summingLong、summingDoub…

【jvm】运行时数据区

目录 一、运行时数据区一、作用二、说明三、线程共用与私有区域 一、运行时数据区 一、作用 1.内存是非常重要的系统资源&#xff0c;是硬盘和CPU 的中间仓库及桥梁&#xff0c;承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策…

分布式集群——搭建Hadoop环境以及相关的Hadoop介绍

系列文章目录 分布式集群——jdk配置与zookeeper环境搭建 分布式集群——搭建Hadoop环境以及相关的Hadoop介绍 文章目录 前言 一 hadoop的相关概念 1.1 Hadoop概念 补充&#xff1a;块的存储 1.2 HDFS是什么 1.3 三种节点的功能 I、NameNode节点 II、fsimage与edits…

Kubernetes(K8s 1.28.x)部署---超详细

目录 一、基础环境配置&#xff08;所有主机均要配置&#xff09; 1、配置IP地址和主机名、hosts解析 2、关闭防火墙、禁用SELinux 3、安装常用软件 4、配置时间同步 5、禁用Swap分区 6、修改linux的内核参数 7、配置ipvs功能 二、容器环境操作 1、定制软件源 2、安…

色温曲线坐标轴的选取:G/R、G/B还是R/G、B/G ?

海思色温曲线坐标 Mstar色温曲线坐标 高通色温曲线坐标 联咏色温曲线坐标 查看各家白平衡调试界面&#xff0c;比如海思、Mstart、高通等调试资料&#xff0c;白平衡模块都是以R/G B/G作为坐标系的两个坐标轴&#xff0c;也有方案是以G/R G/B作为坐标系的两个坐标轴。 以G/R G…

Fooocus启动时modules报错的解决方法

原理&#xff1a;是由于其他程序的安装导致modules的版本不对&#xff0c;先卸载现有版本&#xff0c;再运行run.bat让其自动安装响应的modules版本。 1、cmd运行windows dos终端。 2、将Fooocus_win64_1-1-1035文件夹备份&#xff0c;rename为Fooocus_win64_1-1-1035backup文…

【Kafka】Kafka Stream简单使用

一、实时流式计算 1. 概念 一般流式计算会与批量计算相比较。在流式计算模型中&#xff0c;输入是持续的&#xff0c;可以认为在时间上是无界的&#xff0c;也就意味着&#xff0c;永远拿不到全量数据去做计算。同时&#xff0c;计算结果是持续输出的&#xff0c;也即计算结果…

向函数传递参数(传地址)

过往课程 向函数传递参数&#xff08;传值、传引用、传const引用&#xff09; 传地址 向函数传地址&#xff0c;是指将变量的地址传递给函数。 函数通过声明参数为地址变量来接收一个变量的地址。 示例如下&#xff1a; #include <iostream> using namespace std;v…

Mybatis 日志(JDK Log)

上一篇我们介绍了Mybatis中的参数&#xff0c;本篇我们使用JDK Log打印一下Mybatis运行时的日志&#xff0c;看一下Mybatis执行的过程。 这里我选取上一篇的示例进行JDK Log的集成&#xff0c;这里如果您想对上一篇进行详细了解&#xff0c;可以参考&#xff1a; Mybatis参数…

C语言实现顺序表

顺序表 1.线性表 线性表是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条直线。但是在物理结构上并不一定是…

WPF怎么实现文件拖放功能winform怎么实现拖拽功能

WPF怎么实现文件拖放功能winform怎么实现文件拖拽功能&#xff0c;在管理员模式下wpf winform怎么实现文件的拖拽功能 WPF实现文件拖放功能&#xff0c;正常情况并没有什么问题&#xff0c;但是如果你的程序使用管理员身份启动&#xff0c;你就会发现文件拖放功能就会失效。同…

jmeter+nmon+crontab简单的执行接口定时压测

一、概述 临时接到任务要对系统的接口进行压测&#xff0c;上面的要求就是&#xff1a;压测&#xff0c;并发2000 在不熟悉系统的情况下&#xff0c;按目前的需求&#xff0c;需要做的步骤&#xff1a; 需要有接口脚本需要能监控系统性能需要能定时执行脚本 二、观察 >针…