当前位置: 首页 > news >正文

数据库(一) 基础知识

概述

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

数据模型

数据库系统的核心和基础是数据模型,数据模型是严格定义的一组概念的集合。因此数据模型一般由数据结构、数据操作和完整性约束三部分组成。数据模型主要分为三种:层次模型,网状模型和关系模型。关系模型是目前使用最广泛的数据模型,关系型数据库采用的就是关系模型作为数据的组织方式,例如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: 将查询到的满足条件的记录按照指定的列的值升序/降序排列
    • order by column,column1,column2 asc/desc: 首先按照column排序,如果有相同才会按照column1排序,以此类推...

    • 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 用户名@用户地址 #撤销权限

相关文章:

数据库(一) 基础知识

概述 数据库是按照数据结构来组织,存储和管理数据的仓库 数据模型 数据库系统的核心和基础是数据模型&#xff0c;数据模型是严格定义的一组概念的集合。因此数据模型一般由数据结构、数据操作和完整性约束三部分组成。数据模型主要分为三种:层次模型&#xff0c;网状模型和关…...

vue从零开始学习

npm install慢解决方法:删掉nodel_modules。 5.0.3:表示安装指定的5.0.3版本 ~5.0.3:表示安装5.0X中最新的版本 ^5.0.3: 表示安装5.x.x中最新的版本。 yarn的优点: 1.速度快,可以并行安装 2.安装版本统一 项目搭建: 安装nodejs查看node版本:node -v安装vue clie : np…...

dji uav建图导航系列(三)模拟建图、导航

前面博文【dji uav建图导航系列()建图】、【dji uav建图导航系列()导航】 使用真实无人机和挂载的激光雷达完成建图、导航的任务。 当需要验证某一个slam算法时,我们通常使用模拟环境进行测试,这里使用stageros进行模拟测试,实际就是通过模拟器,虚拟一个带有传感器(如…...

PixelSNAIL论文代码学习(1)——总体框架和平移实现因果卷积

文章目录 引言正文目录解析README.md阅读Setup配置Training the model训练模型Pretrained Model Check Point预训练的模型训练方法 train.py文件的阅读model.py文件阅读h12_noup_smallkey_spec模型定义_base_noup_smallkey_spec模型实现一、定义因果卷积过程通过平移实现因果卷…...

Python大数据处理利器之Pyspark详解

摘要&#xff1a; 在现代信息时代&#xff0c;数据是最宝贵的财富之一&#xff0c;如何处理和分析这些数据成为了关键。Python在数据处理方面表现得尤为突出。而pyspark作为一个强大的分布式计算框架&#xff0c;为大数据处理提供了一种高效的解决方案。本文将详细介绍pyspark…...

S905L3A(M401A)拆解, 运行EmuELEC和Armbian

关于S905L3A / S905L3AB S905Lx系列没有公开资料, 猜测是Amlogic用于2B的芯片型号, 最早的 S905LB 是 S905X 的马甲, 而这个 S905L3A/S905L3AB 则是 S905X2 的马甲, 因为在性能评测里这两个U的得分几乎一样. S905L3A/S905L3AB 和 S905X2, S905X3 一样 GPU 是 G31, 相比前一代的…...

stack和queue容器

1 stack 基本概念 概念&#xff1a;stack是一种先进后出(First In Last Out,FILO)的数据结构&#xff0c;它只有一个出口 栈中只有顶端的元素才可以被外界使用&#xff0c;因此栈不允许有遍历行为 栈中进入数据称为 — 入栈 push 栈中弹出数据称为 — 出栈 pop 2 stack 常用…...

面向对象基础

文章目录 面向对象基础一.面向对象介绍二.设计对象并使用三.封装四.This关键字五.构造方法六.标准的Javabean类七.对象内存图八.基本数据类型和引用数据类型九.成员和局部 面向对象基础 一.面向对象介绍 面向:拿,找 对象:能干活的东西 面向对象编程:找东西来做对应的事情 …...

spring集成mybatis

1、新建一个javaEE web项目 2、加入相关依赖的坐标 <dependencies><!--数据系列&#xff1a;mybatis,mysgl,druid数据源,junit--><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</grou…...

抽象轻松c语言

目 c语言 c程序 c语言的核心在于语言&#xff0c;语言的作用是进行沟通&#xff0c;人与人之间的信息交换 人与人之间的信息交换是会有信息空白&#xff08;A表达信息&#xff0c;B接受信息&#xff0c;B对信息的处理会与A所以表达的信息具有差距&#xff0c;这段差距称为信…...

Redis布隆过滤器原理

其实布隆过滤器本质上要解决的问题&#xff0c;就是防止很多没有意义的、恶意的请求穿透Redis&#xff08;因为Redis中没有数据&#xff09;直接打入到DB。它是Redis中的一个modules&#xff0c;其实可以理解为一个插件&#xff0c;用来拓展实现额外的功能。 可以简单理解布隆…...

写代码时候的命名规则、命名规范、命名常用词汇

版权声明 这个大部分笔记是观看up主红桃A士的视频记录下来的&#xff0c;因为本人在学习的过程中也经常出现类似的问题&#xff0c;并且觉得Up主的视频讲解很好&#xff0c;做此笔记反复学习&#xff0c;若有侵权请联系删除&#xff0c;此推荐视频地址&#xff1a;【改善丑陋的…...

Linux之iptables防火墙

一.网络安全技术 ①入侵检测系统&#xff08;Intrusion Detection Systems&#xff09;&#xff1a;特点是不阻断任何网络访问&#xff0c;量化、定位来自内外网络的威胁情况&#xff0c;主要以提供报警和事后监督为主&#xff0c;提供有针对性的指导措施和安全决策依据,类 似于…...

启动服务报错:Command line is too long Shorten command line for xxx or also for Spri

ommand line is too long. Shorten command line for ProjectApprovalApplication or also for Spring Boot default configuration. 启动springboot 项目的时候报错 解决方案&#xff1a; 点击提示中的&#xff1a;default&#xff1a;然后在弹出窗口中选择&#xff1a;JAR xx…...

docker安装elasticsearch、kibana

安装过程中&#xff0c;遇到最大的问题就是在安装kibana的时候发现 一直连接不上 elasticsearch。最后解决的问题就是 我通过 ifconfig en0 | grep inet| awk {print $2} 在mac中找到本机的ip&#xff0c;然后去到kibana容器中 修改 vi config/kibana.yml中的elasticsearch.hos…...

前端 CSS - 如何隐藏右侧的滚动条 -关于出现过多的滚动条导致界面不美观

1、配置 HTML 标签&#xff0c;隐藏右侧的滚动条 CSS 配置&#xff1a;下面两个一起写进进去&#xff0c;适配 IE、火狐、谷歌浏览器 html {/*隐藏滚动条&#xff0c;当IE下溢出&#xff0c;仍然可以滚动*/-ms-overflow-style:none;/*火狐下隐藏滚动条*/overflow:-moz-scroll…...

2.神经网络的实现

创建神经网络类 import numpy # scipy.special包含S函数expit(x) import scipy.special # 打包模块 import pickle# 激活函数 def activation_func(x):return scipy.special.expit(x)# 用于创建、 训练和查询3层神经网络 class neuralNetwork:# 初始化神经网络def __init__(se…...

合宙Air724UG LuatOS-Air LVGL API控件-键盘 (Keyboard)

键盘 (Keyboard) LVGL 可以添加触摸键盘&#xff0c;但是很明显&#xff0c;使用触摸键盘的话必须要使用触摸的输入方式&#xff0c;否则无法驱动键盘。 示例代码 function keyCb(obj, e)-- 默认处理事件lvgl.keyboard_def_event_cb(keyBoard, e)if(e lvgl.EVENT_CANCEL)the…...

pytorch深度学习实践

B站-刘二大人 参考-PyTorch 深度学习实践_错错莫的博客-CSDN博客 线性模型 import numpy as np import matplotlib.pyplot as pltx_data [1.0, 2.0, 3.0] y_data [2.0, 4.0, 6.0]def forward(x):return x * wdef loss(x, y):y_pred forward(x)return (y_pred - y) ** 2# …...

直方图反向投影(Histogram Backprojection)

直方图反向投影&#xff08;Histogram Backprojection&#xff09;是一种在计算机视觉中用于对象检测和图像分割的技术。它的原理基于图像的颜色分布&#xff0c;允许我们在一幅图像中找到与给定对象颜色分布相匹配的区域。这个技术常常用于图像中的目标跟踪、物体识别和图像分…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...

用鸿蒙HarmonyOS5实现中国象棋小游戏的过程

下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...

算法—栈系列

一&#xff1a;删除字符串中的所有相邻重复项 class Solution { public:string removeDuplicates(string s) {stack<char> st;for(int i 0; i < s.size(); i){char target s[i];if(!st.empty() && target st.top())st.pop();elsest.push(s[i]);}string ret…...