Mysql基础速过

news2024/11/15 21:51:01

一、数据库相关概念

1.1 相关概念

名称全称简称
数据库存储数据的仓库、数据是有组织的进行存储DataBase(DB)
数据库管理系统操作和管理数据库的大型软件DataBase Management System(DBMS)
SQL操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准Structured Query Language(SQL)

image.png

image.png

客户端连接

系统自带的命令行工具执行命令:mysql [-h 127.0.0.1] [-P 3306] -u root - p

1.2 关系型数据库(RDB)

建立在关系模型的基础上,由多张相互连接的二维表组成的数据库。

特点:

  1. 使用表存储数据,格式统一,便于维护;
  2. 使用SQL语言操作,标准统一,使用方便。

二、SQL语句

2.1 SQL通用语法

  1. SQL语句可以单行或多行书写,以分号结尾;
  2. SQL语句可以使用空格/缩进来增强语句的可读性;
  3. MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
  4. 注释:
    • 单行注释:-- 或 #
    • 多行注释:/* */

2.2 SQL分类

分类全称说明语句
DDLData Definition Language数据定义语言,用来定义数据库对象(数据库、表、字段)Show/Create/Drop/Alter
DMLData Manipulation Language数据操作语言,用来对数据库表中的数据进行增删改insert/delete/update
DQLData Query Language数据查询语言,用来查询数据库中表的记录select
DCLData Control Language数据控制语言,用来创建数据库用户,控制数据库的访问权限Create/Drop/Alter

三、约束

约束是作用于表中字段上的规则,用于限制存储在表中的数据。

目的是为了保证,数据库中数据的正确性、有效性和完整性。

约束描述关键字
非空约束限制该字段的数据不能为nullNOT NULL
唯一约束保证该字段的所有数据都是唯一的、不重复的UNIQUE
主键约束主键是一行数据的唯一标识,要求非空且唯一PRIMARY KEY
默认约束保存数据时,如果未指定该字段的值,则采用默认值DEFAULT
检查约束保证字段值满足某一个条件CHECK
外键约束用来让两张表的数据之间建立连接,保证数据的一致性和完整性FOREIGN KEY

外键约束

  1. 添加外键
    create table 表名(
        字段名 数据类型,
        ……
        constraint (外键名称) foreign key(外键字段名) references 主表(主表列名)
    );

    alter table 表名 add constraint 外键名称 foreign key(外键字段名) references 主表(主表列名);
  1. 删除外键

    alter table 表名 drop foreign key 外键名称;

当删除或更新外键时,数据库可以执行的行为。

image.png

默认是 no action/restrict

设置行为:

alter table 表名 add constraint 外键名称 foreign key(外键字段名) references 主表(主表列名) on update cascade on delete cascade;

四、事务

事务是一组操作的集合,它是不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败

4.1 事务的操作

4.1.1 方式一

  1. 查看/设置事务提交方式

    select @@autocommit;

    set @@autocommit=0;

  2. 提交事务

    commit;

  3. 回滚事务

    rollback;

默认mysql的事务是自动提交的,也就是说,当执行一条DML语句,mysql会立即隐式的提交事务。

我们可以通过设置@@autocommit=0,改成手动提交事务。

当我们执行完所有sql语句后,执行commit命令,如果中间出现异常,可以使用rollback回滚事务。

4.1.2 方式二

  1. 开启事务

    start transaction 或 begin;

  2. 提交事务

    commit;

  3. 回滚事务

    rollback;

4.2 事务的四大特性(ACID)

  • 原子性:事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
  • 一致性:事务完成时,必须使所有的数据都保持一致状态。
  • 隔离性:数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
  • 持久性:事务一旦提交或回滚,它对数据库中数据的改变就是永久的。

4.3 事务的并发问题

问题描述
脏读一个事务读到另一个事务还没有提交的数据。
不可重复读一个事务先后读取同一条记录,但两次读取到的数据不同,称之为不可重复读。
幻读原来不存在的数据行,现在存在了。一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了幻影。

4.4 事务的隔离级别

隔离级别脏读不可重复读幻读
Read uncommitted
Read committed×
Repeatable Read××
Serializable×××
  1. 读未提交:就是可以读取到其他事务还没有提交的数据,会出现三种并发问题。

  2. 读已提交:读取其他事务已经提交的数据,虽然可以解决脏读问题,但是,不能解决不可重复读问题,因为如果其他事务的提交正好处于本事务的两次查询之间,就导致两次查询的结果不一致。不可重复读并不是指你不能读两次,而是指你读两次结果不一致,是一种无效的读。

  3. 可重复读:是指在同一个事务中,不管读多少次,结果都是和第一次一样。这样也会导致新的问题就是幻读,由于同一个事务中查询多少次都是和第一次一样,那么如果有新的事务在这个过程中插入了新数据,我们还是查不到的。

  4. 串行化:终极大杀器,如果当前事务还没有执行完,其他事务必须排队等候。

mysql默认是Repeatable Read

查看事务的隔离级别

select @@transaction_isolation

设置事务的隔离级别

set [session|global] transaction isolation level {Read uncommitted|Read committed|Repeatable Read|Serializable}

  • session:会话级别,仅对当前客户端窗口有效;
  • global:全局级别,针对所有客户端窗口有效。

注意:事务的隔离级别越高,数据越安全,但是性能越低。

4.5 当前读和快照读

当前读:读取最新的数据,而不是历史版本的数据。加锁的select、insert、update、delect。

快照读:读取的是快照数据。普通的select操作。

4.6 事务隔离性的实现

  1. 读写锁

    最简单的事务隔离实现方式。每次读操作需要获取一个共享锁,每次写操作需要获取一个写锁。

    共享锁之间不产生互斥,共享锁和写锁之间以及写锁与写锁之间会产生互斥。

  2. MVCC(多版本并发控制)

    在读写锁中,读和写的排斥作用大大降低了事务的并发效率,于是人们又提出了能不能让读写之间也不冲突的方法,就是读取数据时通过一种类似快照的方式将数据保存下来,这样读锁就和写锁不冲突了。不同的事务 session会看到自己特定版本的数据,即使其他的事务更新了数据,但是对本事务仍然不可见,本事务看到的数据始终是第一次查询到的数据。在数据库中,这个快照的处理方式叫多版本并发控制(Multi-Version Concurrency Control)。这种方式真正实现了非阻塞读,只有在写操作时才需要加行级锁,因此并发效率更高。

五、存储引擎

存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。

CREATE TABLE `account` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `name` varchar(10) DEFAULT NULL COMMENT '姓名',
  `money` int DEFAULT NULL COMMENT '余额',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='账户表'

mysql的默认存储引擎是InnoDB。

查看当前数据库支持的所有存储引擎:show engines;

5.1 存储引擎的特点

5.1.1 InnoDB

InnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在mysql5.5之后,成为了mysql的默认存储引擎。

特点:

  1. DML操作遵循ACID模型,支持事务
  2. 行级锁,提高并发访问性能;
  3. 支持外键Foreign key 约束,保证数据的完整性和正确性。

文件:

xxx.ibd:xxx代表表名,innoDB引擎的每张表都会对应这样一个表空间文件,存储该表的表结构、数据和索引。

image.png

5.1.2 MyISAM

MyISAM是mysql早期的默认存储引擎。

特点:

  1. 不支持事务、不支持外键;
  2. 支持表锁,不支持行锁;
  3. 访问速度快。

5.1.3 Memory

存储在内存中的,由于会受到硬件问题、或断电问题的影响,只能将这些表作为临时表或者缓存使用。

特点:

  1. 内存存放;
  2. hash索引(默认)。

文件:xxx.sdi 存储表结构信息。

image.png

5.2 存储引擎的选择

image.png

六、索引

6.1 索引

索引(index)是帮助Mysql高效获取数据的数据结构(有序)。

image.png

优缺点

优势劣势
提高数据检索的效率,降低数据库的IO成本索引列也要占用空间
通过索引列对数据进行排序,降低数据排序的成本,降低cpu的消耗索引大大提高了查询效率,同时却降低更新表的速度,如对表进行增删改时,效率低。

索引结构

mysql的索引是在存储引擎层实现的,不同的存储引擎有不同的结构,主要包含以下几种:

索引结构描述
B+Tree最常见的索引类型,大部分引擎都支持
Hash底层数据结构是用哈希表实现的,只有精确匹配索引列的查询才有效,不支持范围查询
R-tree(空间索引)MyISAM引擎的一种特殊索引类型,主要用于地理空间数据类型,通常使用较少
Full-text(全文索引)是一种通过建立倒排索引,快速匹配文档的方式,类似于Lucene、solr、ES

6.2 B-Tree

image.png

B-Tree(多路平衡查找树)

下面这棵树的度为5,树的度指的是一个节点的子节点的个数。

B-Tree的构建过程:一个节点存放度数-1个key(数据),超过这个数的时候,节点会向上分裂,将中间元素移动到父节点中。

image.png image.png

插入2456时变成下面这样子:

image.png

B Tree的每一个节点中存放数据和索引。

6.3 B+Tree

image.png

红色框里面的是存放的数据,绿色框里面的数据起到索引的作用。

叶子节点之间形成一个单向链表。

B+Tree向上分裂的时候,分裂节点同时也会保留在叶子节点中,并在叶子节点之间形成链表。

image.png

Mysql的索引数据结构对经典的B+Tree进行了优化。在原来的基础上,形成了双向链表,并且首尾相连。

image.png

6.4 哈希索引

image.png

hash索引的特点:

  1. 只能用于对等比较(=,in),不支持范围查询(between,>,<);
  2. 无法利用索引完成排序操作;
  3. 查询效率高,通常只需要一次检索就可以,效率通常高于B+tree。

6.5 思考

为什么InnoDB选择B+tree?

  1. 相对于二叉树,层级更少,搜索效率更高;
  2. 对于B-tree,无论是叶子节点还是非叶子节点,都是保存在page中的,innodb的page大小为16k,如果采用BTree,会导致一页可存储的键值减少,指针跟着减少,要保存同样的数据时,只能增加树的高度,导致性能降低;
  3. 相对于hash索引,B+Tree支持范围匹配和排序操作。

6.6 索引的分类

分类含义特点关键字
主键索引针对于表中主键创建的索引默认自动创建,只能有一个primary
唯一索引避免同一个表中某数据列中的值重复可以有多个unique
常规索引快速定位特定数据可以有多个
全文索引查找文本中的关键词,而不是比较索引中的值可以有多个fulltext

在InnoDB存储引擎中,根据索引的存储形式,又可以分为以下两种:

分类含义特点
聚集索引将数据存储与索引放到一起,索引结构的叶子节点保存了行数据必须有,且只有一个
二级索引将数据与索引分开存储,索引结构的叶子节点关联的是对应的主键可以有多个

聚集索引选取规则:

  1. 如果存在主键,主键索引就是聚集索引;
  2. 如果不存在主键,将使用第一个唯一索引;
  3. 如果这两都没有,则InnoDB会自动生成一个rowid作为隐藏的聚集索引。

image.png

回表查询:查询时如果使用的不是聚集索引,就需要先查询二级索引,根据二级索引的结果,再去聚集索引中查找。

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

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

相关文章

领略诗词之妙,发觉生活之美。

文章目录 引言落霞与孤鹜齐飞,秋水共长天一色。野渡无人舟自横。吹灭读书灯,一身都是月。我醉欲眠卿且去,明朝有意抱琴来。赌书消得泼茶香,当时只道是寻常。月上柳梢头,人约黄昏后。最是人间留不住,朱颜辞镜花辞树。山中何事?松花酿酒,春水煎茶。似此星辰非昨夜,为谁风…

C语言数据结构课设:基于EasyX前端界面的飞机订票系统

数据结构课程设计说明书 学 院、系&#xff1a; 软件学院 专 业&#xff1a; 软件工程 班 级&#xff1a; 学 生 姓 名&#xff1a; 范 学 号&#xff1a; 设 计 题 目&#xff1a; 飞机订票系统 起 迄 日 期: 2024年6月18日~ 20…

Day19 | 77. 组合 216.组合总和III 17.电话号码的字母组合

语言 Java 77. 组合 组合 题目 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 思路 回溯算法&#xff0c;其实也是递归的思想加上回溯 递归的终止条件&#xff1a;集合大小等于k了 递归参数&#xff1a;…

网闸(Network Gatekeeper或Security Gateway)

本心、输入输出、结果 文章目录 网闸(Network Gatekeeper或Security Gateway)前言网闸主要功能网闸工作原理网闸使用场景网闸网闸(Network Gatekeeper或Security Gateway) 编辑 | 简简单单 Online zuozuo 地址 | https://blog.csdn.net/qq_15071263 如果觉得本文对你有帮助…

如何开户投放必应Bing国内搜索广告?

有效的互联网营销渠道是企业提升品牌知名度和促进业务增长的关键&#xff0c;必应Bing作为微软旗下的全球领先搜索引擎之一&#xff0c;其国内搜索广告平台为企业提供了一个高效、精准的营销渠道。云衔科技作为微软必应Bing的官方代理商&#xff0c;为企业提供了专业的一站式开…

外六角半螺纹螺丝主要应用领域

外六角半螺纹螺丝&#xff0c;作为一种常见的紧固件&#xff0c;因其独特的设计和多样的功能而在多个工业领域中占据着重要的地位。这种螺丝的一端具有完整的螺纹&#xff0c;而另一端则可能没有螺纹或螺纹较短&#xff0c;这样的设计使其在某些应用场景中具有独特的优势。 应用…

git配置BeyondCompare解决冲突(全网最细讲解,亲测有用,windows版本)

前言&#xff1a; 网上查阅了很多资料&#xff0c;大都讲的不是很全面&#xff0c;很多还配置不成功&#xff0c;特写此篇博客来详细全面的讲解配置步骤&#xff08;亲测可用&#xff09;。本篇文章具有局限性&#xff0c;欢迎大家相互交流&#xff0c;批评指正。 特此说明&am…

【快速实践 OpenCV morphology】形态学操作:腐蚀、膨胀、开运算、闭运算

✨我们将以下图为例&#xff0c;快速实践不同的形态学操作&#xff0c;如腐蚀 erode、膨胀 dilate、开 open、闭 close … import cv2 import numpy as npimg cv2.imread(D:\Desktop\csdn.png,0) cv2.imshow(binary_Erode2, img) cv2.waitKey(0)&#x1f49c; 腐蚀 &#xff…

Pytest进阶之fixture的使用(超详细)

目录 Fixture定义 Fixture使用方式 作为参数使用 Fixture间相互调用(作为参数调用) 作为conftest.py文件传入 Fixture作用范围Scope function class module session Fixture中params和ids Fixture中autouse Fixture中Name 总结 pytest fixture 是一种用来管理测试…

VMare centos 7 设置固定ip

第一步获取网关 查看虚拟机的网关-》编辑-》虚拟网络编辑器 NAT模式-》NAT设置 获取网关IP 192.168.70.2 第二步获取主机dns1 在本地主机获取dns1&#xff0c;本地主机调出cmd输入ipconfig dns1为192.168.31.1 用管理员权限的账号进入需要设置固定ip的虚拟机&#xff0c;在t…

天猫超市卡有什么用处?

现在买东西不是都有优惠券叠加啥的&#xff0c;完了可以优惠不少钱 前两天我刚在天猫买了点东西&#xff0c;天猫送了我一张猫超卡&#xff0c;刚好手上的积分也兑换了一张100的&#xff0c;这样就有2张卡了 但是把想买的东西加购以后&#xff0c;感觉还不如京东便宜&#xf…

圣贝拉IPO:高榕资本等减持,多次被罚,间接子公司资金链断裂

近日&#xff0c;中国证监会披露《境外发行上市备案补充材料要求&#xff08;2024年7月12日—2024年7月18日&#xff09;》。信息显示&#xff0c;证监会国际司共对3家企业出具补充材料要求&#xff0c;涉及绿茶餐厅&#xff08;绿茶集团&#xff09;、广州星梦&#xff08;星梦…

html+css 动态效果

1.波浪效果 <div class"sitesingle"></div> <style>.sitesingle{display:flex;justify-content:space-between;align-items:stretch;overflow:hidden;position:relative;height: 400px;}keyframes bgRotate{0%{transform:rotate(0deg)}to{transfor…

bool数组的理解和应用[C++]

文章目录 bool数组的用法bool数组的定义声明bool数组的初始化访问和修改数组元素遍历数组 运用bool数组简单代码 在今天做题中发现了bool类不仅能用于函数类型还能用于数组类型&#xff0c;好奇查了查发现bool还有很多用处&#xff1a;基本变量&#xff0c;在枚举类型中会用到&…

好用的图片压缩工具有哪些?我只推荐这13款!赶紧码住!

图片压缩如何实现&#xff1f;电脑上经常会存储很多图片文件&#xff0c;随着图片文件不断的增加&#xff0c;存储空间就面临一大难题。不管是存储还是传输&#xff0c;将图片压缩到一定体积&#xff0c;都是一个不错的选择。 而且图片压缩技术能够在保持图片质量的同时&#x…

【Vue实战教程】之 Vue3 新特性详解

1 为什么要用Vue3 在学习Vue3的新特性之前&#xff0c;我们先来看一下Vue3设计的目的是什么&#xff0c;为什么要对Vue2做出很大的改变&#xff0c;以及Vue3到底解决了什么问题。像Vue这样全球闻名的前端框架&#xff0c;在任何一次改动时&#xff0c;设计者都是经过深思熟虑的…

【openavis】明厨亮灶算法仓

明厨亮灶算法仓主要用于学校食堂&#xff0c;餐厅等饮食卫生安全监管场景&#xff0c;目前包含的算法如下&#xff1a; 算法类型 算法卡片 明厨亮灶算法仓 老鼠检测 垃圾桶未盖 厨师服检测 厨师帽检测 口罩检测 手套检测 动火离人 1. 算法规格介绍&#xff1a; 算…

微软CrowdStrike驱动蓝屏以及内核签名

原因 当Windows操作系统遇到严重错误导致系统崩溃时&#xff0c;屏幕显示为蓝色&#xff0c;通常伴有错误代码和信息&#xff0c;这被称为“蓝屏死机”&#xff08;Blue Screen of Death&#xff0c;简称BSOD&#xff09; https://www.thepaper.cn/newsDetail_forward_281262…

2024最新Uniapp的H5网页版添加谷歌授权验证

现在教程不少,但是自从谷歌升级验证之后,以前的老教程就失效了,现在写一个新教程以备不时之需。 由于众所周知的特殊原因,开发的时候一定注意网络环境,如果没有梯子是无法进行开发的哦~ clientID的申请方式我就不再进行赘述了,其他的教程上面都有,我这边只提供最重要的…

vue 实战 区域内小组件元素拖拽 示例

<template><div><el-button type"primary" click"showDialog true">快捷布局</el-button><el-dialog title"快捷布局配置" :visible.sync"showDialog"><el-row :gutter"20"><el-co…