【MySQL】数据库开篇

SueWakeup

                                                        个人主页:SueWakeup

                                                        系列专栏:学习技术栈

                                                        个性签名:保留赤子之心也许是种幸运吧

本文封面由 凯楠📸友情提供

目录

本系列传送门

1. 什么是数据库?

2. 为什么使用数据库

3. 数据库的分类

4. NoSQL 与关系型数据库的比较

5. 主流的 NoSQL产品

5.1 键值对(K-V)存储

5.2 列族存储

5.3 文档型存储

5.4 图形数据库

6. 数据库结构

 7. SQL 语句分类

8. SQL语句的执行流程

9.  MyISAM 和 InnoDB 的区别

10. 数据库设计三大范式 

11.  MySQL的表约束

非空约束

唯一性约束

主键约束

外键约束

检查约束

注:手机端浏览本文章可能会出现 “目录”无法有效展示的情况,请谅解,点击侧栏目录进行跳转  


本系列传送门

1. 数据库排名

2.【MySQL】数据库开篇

3.【MySQL】索引篇

4.【MySQL】事务篇

5.【MySQL】锁篇


1. 什么是数据库?

数据库指长期存放在计算机内,有组织、可共享的大量数据的集合,是一个数据“仓库”。


2. 为什么使用数据库

  • 结构化:数据在数据库中的存储依靠二维表结构逻辑存储数据,可以参考数据原有的依赖关系和结构关系去存储数据
  • 共享性:多个用户可以共同分享计算机数据库中的数据资源,从而实现数据的高效共享性
  • 独立性:存储在数据库的数据和应用程序之间相互独立、互不影响。
  • 安全性:数据库在安全性的控制有很多措施,比如访问数据库时对用户的口令,用户的权限进行限制,以及对数据的存储进行限制

3. 数据库的分类

数据库分类数据模型举例
关系型(RDBMS)

表格

Oracle、MySQL、SQL Server等

非关系型(NoSQL)

键值对(K-V)、文档(Document)、列族(Column Family)、图形

MongoDB、Redis、Elasticsearch(引擎)、Cassandra等

对象型

以对象作为基本单位

支持面向对象的数据建模和操作

db4o、Versant等

XML

XML文档

eXist、BaseX等

图形

图形结构数据

适用于网络关系、社交网络等场景

Neo4j、FlockDB等

内存

存储在内存中

SAP HANA、MemSQL等

时间序列

存储时间序列

InfluxDB、Prometheus等


4. NoSQL 与关系型数据库的比较

NoSQL关系型数据库
优点
  1. 简单易部署,低成本
  2. 查询速度快(数据存储于缓存中)
  3. 存储数据多样
  4. 扩展性好
  1. 技术又成熟又早,提供丰富的技术支持和生态系统
  2. 标准化查询语句,对数据的操作和管理更方便灵活
  3. 支持事务管理,确保数据的一致性、完整性和持久性
  4. 存储基础数据,对数据的管理直观简单
缺点
  1. 相较于关系型数据库发展时间短,维护工具和资料有限
  2. 不遵循 SQL 标准,提升了学习和使用成本
  3. 不提供关系型数据库对事务的处理
  1. 相较于 NoSQL 成本高
  2. 存储在磁盘中,速度不及 NoSQL
  3. 仅能存储基础数据
  4. 类似 join 的多表查询机制限制了扩展性

5. 主流的 NoSQL产品

5.1 键值对(K-V)存储

  • 相关产品:Redis、Voldemort、Berkeley DB
  • 典型应用:内容缓存,主要用于处理大量数据的高访问负载。
  • 数据模型:一系列键值对
  • 优势:快速查询
  • 劣势:存储的数据缺少结构化

5.2 列族存储

  • 相关产品:Cassandra,HBase,Riak
  • 典型应用:分布式的文件系统
  • 数据模型:以列族式存储,将同一列数据存在一起
  • 优势:查找速度快,可扩展性强,更容易进行分布式扩展
  • 劣势:功能相对局限

5.3 文档型存储

  • 相关产品:MongoDB、Elasticsearch、CouchDB
  • 典型应用:Web应用(与 K-V 类似,V是结构化的)
  • 数据模型:一系列键值对
  • 优势:数据结构要求不严格
  • 劣势:缺乏统一的查询语法

5.4 图形数据库

  • 相关产品:Neo4j、InfoGrid、Infinite Graph
  • 典型应用:社交网络数据模型:图结构
  • 优势:利用图结构相关算法
  • 劣势:需要对整个图做计算才能得出结构,不容易做分布式的集群方案

6. 数据库结构

  • 数据库(Database):以文件的形式存放在磁盘上,即对应于一个或多个物理文件
  • 数据表(Table):由一组数据记录组成,数据库中的数据以表为单位进行组织
  • 字段(Field):也称域。表中的每一类称为一个字段。每个字段都有相应的描述信息。
  • 记录(Record):表中的每一行称为一个记录,由若干字段组成。
  • 索引(Index):一种特殊类型的表,其中含有关键字段的值和指向表实际记录位置的指针,可以提高访问数据库的效率。
  • SQL语句:结构化查询语句命令,用于存取数据以及查询、更新和管理关系数据库系统,同时也是数据库脚本文件的扩展名。

 7. SQL 语句分类

名词

解释

命令

DDL

(数据定义语言)

定义和管理数据对象,

如数据库,数据表等

CREATE、DROP、ALTER

DML

(数据操作语言)

用于操作数据库对象中所包含的数据

INSERT、UPDATE、DELETE

DQL

(数据查询语言)

用于查询数据库数据

SELECT

DCL

(数据控制语言)

用来管理数据库的语言,包括管理权限及数据更改

GRANT、COMMIT、ROLLBACK


8. SQL语句的执行流程

  1. 词法分析:将SQL语句按照语法规则分割成一个个单词(tokens)。例如,SELECT、FROM、WHERE、AND、OR等都是一个单词。
  2. 语法分析:对单词进行语法解析,判断SQL语句是否符合语法规则。如果不符合,则会抛出语法错误。
  3. 语义分析:对SQL语句进行语义分析,如表名、列名、数据类型等,确保它们都是正确的。如果有错误,会抛出语义错误。
  4. 查询优化:对SQL语句进行优化,如选择最优的执行计划、使用索引等来提高查询效率。
  5. 执行SQL:根据优化后的执行计划,执行SQL语句。执行过程中,会进行锁定、缓存、排序、分组等操作。
  6. 返回结构:执行完成后,将结果返回给客户端。如果是查询语句,则会返回查询结果;如果是更新语句,则会返回受影响的行数。

9.  MyISAM 和 InnoDB 的区别

  • MySQL 5.5 版本之前,MyISAM 引擎是 MySQL 的默认存储引擎,但是,MyISAM 不支持事务和行级锁,而且最大的缺陷就是崩溃后无法安全恢复
  • MySQL 5.5 版本之后,MySQL 引入了 InnoDB(事务型数据库引擎),MySQL 5.5 版本后默认的存储引擎为 InnoDB;

MyISAM

InnoDB

外键

不允许创建外键

支持外键

事务

不支持事务

事务型数据库引擎,可以使用 Commit 和 Rollback 语句

并发

只支持表级锁(table-level locking)

支持行级锁(row-level locking)和表级锁,默认为行级锁;

备份(缓存)

只缓存索引,不缓存真实数据

支持在线热备份(缓存索引和真实数据)

崩溃恢复

MyISAM 崩溃后发生损坏的概率比 InnoDB 高很多,而且恢复的速度也更慢。


10. 数据库设计三大范式 

数据库设计范式是数据库在设计过程中,需要遵守的设计准则,避免数据冗余;

特殊情况不一定要三个范式都满足,数据库设计看重需求与性能,需求>性能>表结构

  • 第一范式(1NF):每个字段都是最小字段,具有原子性,不可再分; 确保每列保持原子性
  • 第二范式(2NF):每张表必须存在主键,并且其它字段也必须与主键直接依赖,不能仅仅与主键的某一部分依赖(联合主键) 确保表中的每列都和主键相关
  • 第三范式(3NF):每个字段不能与主键间接依赖,每张表只保存一种数据,表和表之间使用外键关系关联; 确保每列都和主键列直接相关,而不是间接相关

11.  MySQL的表约束

约束实际上就是表中数据的限制条件,目的是为了保证表中的记录完整和有效

约束种类:

非空约束

用not null约束的字段不能为null值,必须给定具体的数据

添加:

alter table 表名 modify test_student char(10) not null;

删除:

alter table 表名 modify 列名 类型

唯一性约束

unique约束的字段,具有唯一性,不可重复,但可以为null

添加:

alter table 表名 add unique(表字段名,字段,字段,字段);

删除:

alter table 表名 drop index 唯一约束名;

主键约束

表中的一个或多个字段,它的值用于唯一的表示表中的某一条记录

添加:

alter table 表名 add primary key(表的字段名,字段,字段);

删除:

alter table 表名 drop primary key;

外键约束

某个字段添加外键约束之后,该字段称为外键字段,外键字段中每个数据都是外键值

添加:

alter 表名 add constraint N1 foreign key(表字段名)references 父表(父表字段名);

删除:

alter table 表名 drop foreign key 外键名;

检查约束

(目前MySQL不支持,Oracle支持)


 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Springboot+vue的粮仓管理系统的设计与实现(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频: Springbootvue的粮仓管理系统的设计与实现(有报告)。Javaee项目,springboot vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller&am…

服务器感染了.rmallox勒索病毒,如何确保数据文件完整恢复?

引言: 随着网络技术的发展,勒索病毒已经成为当今数字时代的一大威胁。近期出现的.rmallox勒索病毒更是引发了广泛关注。本文将深入探讨.rmallox勒索病毒的特点,并提供一系列应对这一威胁的高效策略。如果受感染的数据确实有恢复的价值与必要…

PHP Storm 2024.1使用

本文讲的是phpstorm 2024.1最新版本激活使用教程,本教程适用于windows操作系统。 1.先去idea官网下载phpstorm包,我这里以2023.2最新版本为例 官网地址:https://www.jetbrains.com/zh-cn/phpstorm/ 2.下载下来后安装,点下一步 …

Linux上下载部署zentao v15.5及具体的使用

1.先查询一下Linux的操作系统的位数,确保下载的文件位数与os的一致 [rootlocalhost xiaoming]# uname -m x86_64 [rootlocalhost xiaoming]# getconf LONG_BIT 64 2.下载zentao的Linux压缩包 wget https://www.zentao.net/dl/zentao/15.5/ZenTaoPMS.15.5.zbox…

施耐德EOCR电机保护器产品怎么样,和韩国三和什么关系?

施耐德EOCR电机保护器是一款性能卓越的电动机保护设备,具有多种显著特点和优势。以下是其主要优点: 快速检测和保护:该保护器能迅速检测电机的过载、短路和接地故障,并在短时间内切断电路,避免设备损坏和事故发生。这…

Oracle 21c 数据库迁移到DM8(达梦)数据库

一、环境准备 1、创建脚本 执行dmCreateUser.sql脚本创建GLJ用户(注意:需要与需要迁移的oracle用户名一样),如,脚本内容如下: -- 开始将输出重定向到指定的日志文件 spool start /home/dmdba/dmdbms/sql/…

前端三剑客 —— JavaScript (第八节)

目录 内容回顾: 事件对象 事件对象 事件对象的方法和属性 案例-移动DIV 案例-图片轮换 Ajax 内容回顾: 事件对象 1.1 什么是事件驱动 1.2 事件绑定 事件源:发生事件的源对象 事件对象:它包含了事件所有的信息,它…

(2024,FLOPs 动态分配,MoD,MoDE,top-k 路由,块丢弃)在基于 Transformer 的语言模型中动态分配计算

Mixture-of-Depths: Dynamically allocating compute in transformer-based language models 公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 注:Transformer 由于其注意力机制&…

mysql查看数据库表容量大小

【推荐】单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表。 说明:如果预计三年后的数据量根本达不到这个级别,请不要在创建表时就分库分表。 1. 查询所有数据库记录数和容量 SELECTtable_schema AS 数据库,SUM(table_rows) …

Handler——小白能懂的原理,老鸟需要的面经

1.机制学习 1.1Handler定义 发送并处理 与线程的消息队列关联的Message和Runnable 1.2基本用法 1、Message.obtain() 从消息池取得Message 2、Handler().sendMessage(msg) 发送消息 3、Handler().post 将Runnable包装成Message发送 以下提供一个结构代码 import android.os.H…

用于扩展Qt本身的插件(上)

Qt自身插件 引言示例插件与应用插件的程序作为整体插件和应用插件的程序单独存在实现插件编写测试插件的程序应用插件运行结果引言 用于扩展qt自身的插件按照我的理解分为两种: 1. 直接扩展Qt自身,无需在QtCreator的设计器中加载; 2. 扩展Qt自身,同时需要在QtCreator的设计…

sonar搭建(linux系统)

前景 静态代码扫描是CI/CD中重要的一环,可以在代码提交到代码仓库之后,在CI/CD流程中加入代码扫描步骤,从而及时地对代码进行质量的检查。这可以有效地降低后期维护成本,优化产品质量,提高产品交付速度。同时&#xf…

分类预测 | Matlab实现KPCA-ISSA-LSSVM基于核主成分分析和改进麻雀优化算法优化最小二乘支持向量机分类预测

分类预测 | Matlab实现KPCA-ISSA-LSSVM基于核主成分分析和改进麻雀优化算法优化最小二乘支持向量机分类预测 目录 分类预测 | Matlab实现KPCA-ISSA-LSSVM基于核主成分分析和改进麻雀优化算法优化最小二乘支持向量机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述…

C语言中的数据结构--链表的应用2(3)

前言 上一节我们学习了链表的应用,那么这一节我们继续加深一下对链表的理解,我们继续通过Leetcode的经典题目来了解一下链表在实际应用中的功能,废话不多说,我们正式进入今天的学习 单链表相关经典算法OJ题4:合并两个…

【分享】各大框架都在使用的Unsafe类

前言 几乎每个使用 Java开发的工具、软件基础设施、高性能开发库都在底层使用了sun.misc.Unsafe,比如Netty、Cassandra、Hadoop、Kafka等。 Unsafe类在提升Java运行效率,增强Java语言底层操作能力方面起了很大的作用。但Unsafe类在sun.misc包下&#x…

大型语言模型有什么用?

大型语言模型有什么用? 大型语言模型识别、总结、翻译、预测、生成文本和其他内容。 AI 应用程序正在总结文章、撰写故事和进行长时间对话——而大型语言模型正在承担繁重的工作。 大型语言模型或 LLM 是一种深度学习算法,可以根据从海量数据集中获得…

linux进阶篇:下载工具wget的安装以及应用

1 wget工具介绍 wget是一个下载文件的工具,它用在命令行下。对于Linux用户是必不可少的工具,我们经常要下载一些软件或从远程服务器恢复备份到本地服务器。 wget支持HTTP,HTTPS和FTP协议,可以使用HTTP代理。所谓的自动下载是指&a…

【C语言基础】:文件操作详解(后篇)

文章目录 一、文件的顺序读写1.1 顺序函数读写函数介绍1.2 fgetc函数和fputc函数1.3 fputs函数和fgets函数1.4 fprintf函数和fscanf函数1.5 fwrite函数和fread函数 二、文件的随机读写2.1 fseek函数2.2 ftell函数2.3 rewind函数 三、文件读取结束的判定3.1 feof函数 四、文件缓…

Linux mmap

目录 内存映射概念: 函数原型: 内存映射步骤: 主要功能 : 系统调用mmap用于共享内存的两种方式: 使用普通文件提供的内存映射: 使用特殊文件提供匿名内存映射: 注意事项 : …

【漏洞复现】潍微科技-水务信息管理平台 ChangePwd SQL注入漏洞

0x01 产品简介 潍微科技-水务信息管理平台主要帮助水务企业实现水质状态监测、管网运行监控、水厂安全保障、用水实时监控以及排放有效监管,确保居民安全稳定用水、环境有效保护,全面提升水务管理效率。 0x02 漏洞概述 潍微科技-水务信息管理平台 ChangePwd 接口存在SQL注…