MySQL DataBase

article/2025/9/25 19:37:20

文章目录

      • DBMS
      • SQL
      • 备份数据库
      • 数据类型
      • 事务
      • 视图
      • 数据库设计三范式
      • 分组查询
      • C# 连接 MySQL
      • 字符集
      • 存储引擎
        • InnoDB
        • 行格式
        • 记录头信息
      • 数据页结构
      • B+ 树索引

DBMS

DataBase Management System,数据库管理系统。常见的有 MySQL、Oracle、Microsoft SqlServer

SQL

Structured Query Language,结构化查询语言。

DBMS 通过 SQL 语句对 DB 中的数据进行增删改查。

分组函数 在使用的时候必须先进行分组,然后才能用。如果你没有对数据进行分组,整张表默认为一组。

count(具体字段):表示统计该字段下所有不为NULL的元素的总数。
count(*):统计表当中的总行数。只要有一行数据,则 count++。

str_to_date 将字符串转换成日期
date_format 格式化日期
format 设置千分位

备份数据库

mysqldump -u 用户名 -p 数据库 表1 表n > d:\\文件名.sql
mysqldump -u 用户名 -p -B 数据库1 数据库n > d:\\文件名.sql恢复数据库
source d:\\文件名.sql;

数据类型

数据类型说明大小(字节)
BIT(M)1 - 64,位类型。M 指定位数,默认1
TINYINT [UNSIGNED]有符号(-128 - 127),无符号(0 - 255)。默认无符号1
SMALLINT [UNSIGNED]有符号(-2^15 - 2^15 - 1),无符号(0 - 2^16 - 1)2
MEDIUMINT [UNSIGNED]有符号(-2^23 - 2^23 - 1),无符号(0 - 2^24 - 1)3
INT [UNSIGNED]有符号(-2^31 - 2^31 - 1),无符号(0 - 2^32 - 1)4
BIGINT [UNSIGNED]有符号(-2^63 - 2^63 - 1),无符号(0 - 2^64 - 1)8
FLOAT [UNSIGNED]表示小数4
DOUBLE [UNSIGNED]表示比 FLOAT 精度更大的小数8
DECIMAL(M, D) [UNSIGNED]定点数 M (max 65)指定长度,默认10,D (max 30)表示小数点的位数
CHAR(SIZE)固定长度字符串,最大 255 字符,SIZE 表示字符的数量
**VARCHAR(**SIZE)可变长度字符串 (0 - 65535 字节utf8 最大21844字符 1 - 3 个字节用于记录大小。 gbk 最大 32766 字符。
BLOB LONGBLOB二进制数据 BLOB (0 - 2^16 - 1),LONGBLOB (0 - 2^32 - 1)
TEXT LONGTEXT文本 TEXT (0 - 2^16 - 1),LONGTEXT (0 - 2^32 - 1)
DATE日期类型(YYYY-MM-DD)
DATETIME(YYYY-MM-DD HH:MM:SS)
TIMESTAMPTimeStamp 时间戳,自动记录 insert、update操作时间

事务

多条 DML 语句联合起来的执行某一个业务逻辑。原子性、一致性、隔离性、持久性。

事务与事务之间的隔离性级别,read uncommitted(脏读问题) read committed(不可重复读取数据) repeatable read(读取到的数据是幻象,不够真实) serializable(最高的隔离级别)

视图

视图对象存储在硬盘上,方便,简化开发,利于维护。视图对应的语句只能是DQL语句。

create view emp_dept_view as select e.name,e.sal,d.name from emp e join dept d on e.deptno = d.deptno;

数据库设计三范式

第一范式:要求任何一张表必须有主键,每一个字段原子性不可再分。一对一,外键唯一。

第二范式:建立在第一范式的基础之上,要求所有非主键字段完全依赖主键,不要产生部分依赖。多对多,三张表,关系表两个外键。

第三范式:建立在第二范式的基础之上,要求所有非主键字段直接依赖主键,不要产生传递依赖。一对多,两张表,多的表加外键。

分组查询

select...
from...
group by...关键字的顺序不能颠倒:
select ... from ... where ... group by ... having ... order by ... limit ...
执行顺序为:
from - where - group by - having - select - order by - limit

注意 :

  • 在一条 select 语句中,如果有 group by,select 后面只能跟参与分组的字段,以及分组函数。
  • 从某张表中查询数据,先经过 where 条件筛选出有价值的数据,再对这些有价值的数据进行分组,分组之后可以使用 having 继续筛选。select 查询出来,最后排序输出。

C# 连接 MySQL

  • data source=服务器IP地址;
  • database=数据库名称;
  • user id=数据库用户名;
  • password=数据库密码;
  • pooling=是否放入连接池;
  • charset=编码方式;

字符集

名称Maxlen (字节)
ascii1
latin11
gb23122
gbk2
utf83
utf8mb44
  1. 字符集指的是某个字符范围的编码规则。

  2. 比较规则是针对某个字符集中的字符比较大小的一种规则。

  3. 在MySQL 中,一个字符集可以有若干种比较规则,其中有一个默认的比较规则,一个比较规则必须对应一个
    字符集。

  4. 查看MySQL 中查看支持的字符集和比较规则的语句如下:

    SHOW (CHARACTER SET|CHARSET) [LIKE 匹配的模式];
    SHOW COLLATION [LIKE 匹配的模式];
    
  5. MySQL有四个级别的字符集和比较规则,服务器、数据库、表、列。

存储引擎

MySQL 服务器上负责对表中数据读取和写入工作的部分,例如 InnoDB 、MyISAM 、Memory 等。真实数据在不同存储引擎中存放的格式一般是不同的。

InnoDB

将数据划分为若干个页,以页作为磁盘和内存之间交互的基本单位,InnoDB 中页的大小一般为 16 KB。

行格式

Compact 行格式中,把所有变长字段的真实数据占用的字节长度都存放在记录的开头部位,从而形成一个变长字段长度列表,各变长字段数据占用的字节数按照列的顺序逆序存放。

compact

DynamicCompressed行格式类似于Compact行格式,只不过在处理行溢出数据时有点儿分歧,它们不会在记录的真实数据处存储字符串的前768个字节,而是把所有的字节都存储到其他页面中,只在记录的真实数据处存储其他页面的地址。

记录头信息

名称大小(bit)描述
预留位11没有使用
预留位21没有使用
delete_mask1标记该记录是否被删除
min_rec_mask1B+树的每层非叶子节点中的最小记录都会添加该标记
n_owned4表示当前记录拥有的记录数
heap_no13表示当前记录在记录堆的位置信息
record_type3表示当前记录的类型, 0 表示普通记录, 1 表示B+树非叶节点记录(目录项记录), 2 表示最小记录, 3 表示最大记录
next_record16表示下一条记录的相对位置

注意next_record 下一条记录指得并不是按照我们插入顺序的下一条记录,而是按照主键由小到大的顺序的下一条记录。而且规定 Infimum 记录(也就是最小记录) 的下一条记录就是本页中主键值最小的用户记录,而本页中主键值最大的用户记录的下一条记录就是 Supremum 记录(也就是最大记录)。

不论我们怎么对页中的记录做增删改操作,InnoDB 始终会维护一条记录的单链表,链表中的各个节点是按照主键值由小到大的顺序连接起来的。

当数据页中存在多条被删除掉的记录时,这些记录的 next_record 属性将会把这些被删除掉的记录组成一个垃圾链表,以备之后重用这部分存储空间。

数据页结构

InnoDB

Page Directory 由每个组的最后一条记录的地址偏移量(槽)按照顺序存储。对于最小记录所在的分组只能有 1 条记录,最大记录所在的分组拥有的记录条数只能在 1~8 条之间,剩下的分组中记录的条数范围只能在是 4~8 条之间。

在一个数据页中查找指定主键值的记录:

  • 通过二分法确定该记录所在的槽,并找到该槽中主键值最小的记录
  • 通过记录的 next_record 属性遍历该槽所在的组中的各个记录

B+ 树索引

各个 InnoDB 数据页面组成一个双向链表,每个数据页中的记录会按照主键值从小到大组成一个单向链表,每个数据页会为存储在里面的记录生成一个页目录,在通过主键查找记录的过程中,先使用二分法在页目录中找到对应的,然后遍历该槽对应的分组找到指定的记录。

下一个数据页中用户记录的主键值必须大于上一个页中用户记录的主键值。需要给所有的页建立一个目录项每个页对应一个目录项,每个目录项包含页的记录中最小的主键值(key)以及页号(page_no)。这个目录就是索引

不论是存放用户记录的数据页,还是存放目录项记录的数据页,我们都把它们存放到 B+树 这个数据结构中了,所以我们也称这些数据页为节点。实际用户记录其实都存放在 B+ 树的最底层的节点上,这些节点也被称为叶子节点或叶节点,其余用来存放目录项的节点称为非叶子节点或者内节点,其中B+ 树最上边的那个节点称为根节点

InnoDB 中的索引即数据,数据即索引,而 MyISAM 中却是索引是索引、数据是数据。


http://chatgpt.dhexx.cn/article/IN1B0aiO.shtml

相关文章

mysql数据库中求圆的面积_MYSQL数据库

数据库: 数据库就是存储数据的仓库 为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上,通过数据库的管理系统,可以有效的管理存储在数据库中的数据; mysql数据库的优点: 1.多语言的支持 2.可以…

【数据库MySQL】

数据库MySQL 数据库设计原则和数据库事务 数据库MySQL数据表的设计原则数据库对象编写建议关于库关于表、列关于索引sql编写 数据库事务存储引擎是否支持事务ACID特性事务的状态 显式事务与隐式事务显式事务隐式事务隐式提交数据的情况 事务隔离级别脏读不可重复性幻读 4种隔离…

Database:MySQL

学习笔记:MySQL Copyright: Jingmin Wei, Pattern Recognition and Intelligent System, School of Artificial and Intelligence, Huazhong University of Science and Technology 前面的SQL代码为数据库通用语言,但是结果都是在MySQL环境下运行的结果…

数据库------MYSQL

目录 数据库 关系型数据库 非关系型数据库 MYSQL 登录 创建数据库 字符集 警告,错误,致命 查看数据库 选中数据库 删除库 数据类型 数值类型 字符串类型 日期类型 表的操作 选定数据库 创建表 多行输入 注释 单行注释: 多行注释 查看表结构 查看表 删除表…

Python之安装MySQLdb

Python连接mysql需要MySQLdb模块 一.环境 系统版本:windows10家庭版 Python版本: python3.7.1 IDE:sublime_text3 二.安装说明 如果是python 2.x版本的,在命令行输入执行:pip install MySQLdb即可安装成功如果是py…

DB SQL mysql

今天我们用10分钟,重点梳理一遍以下几方面: 数据库知识点汇总; 数据库事务特性和隔离级别; 详解关系型数据库、索引与锁机制; 数据库调优与最佳实践; 面试考察点及加分项。 知识点汇总 一、数据库的…

python -MySQLdb的安装与使用

MySQLdb是一款较为底层的,python连接mysql用的模块。和更加高级的,提供ORM的模块不同,MySQLdb主要还是聚焦于如何和数据库进行连接和进行基本的操作,操作的体现形式主要还是进行SQL语句的执行。 在Linux下 pip install MySQL-py…

数据库--mysql

数据库 《高性能Mysql(第三版)》 数据库三大范式、反模式 强调属性的原子性约束,要求属性具有原子性,不可再分解强调记录的唯一性约束,表必须有一个主键,并且没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主…

Python 如何安装 MySQLdb ?

人生苦短 我用python Python 标准数据库接口为 Python DB-API, Python DB-API为开发人员提供了数据库应用编程接口。 Python 数据库接口支持非常多的数据库, 你可以选择适合你项目的数据库: GadFlymSQLMySQLPostgreSQLMicrosoft SQL Serve…

MySQL——数据库

1.什么是数据库: 数据库(database):存储数据的“仓库”。它保存了一系列有组织的数据。 2.DSMS数据库管理系统: 数据库管理系统:数据库是通过DBMS创建和操作的容器。 数据库管理系统(DBMS&a…

数据库----MySQL

文章目录 常识常见数据库数据库结构SQL语句分类 事务事务的4个特性 ACID隔离级别事务处理**提交** **commit****回滚** **rollback** 常用操作库的常用操作建库删库查库使用库 表的常用操作创建表修改表删除表查看所有表查看表结构/设计表 表记录的常用操作插入记录查询记录修改…

数据库—mysql

提示:以下是本篇文章正文内容 一、InnoDB InnoDB 内部做了很多优化,包括从磁盘读取数据时采用的可预测性读,能够自动在内存中创建 hash 索引以加速读操作的自适应哈希索引,以及能够加速插入操作的插入缓冲区等。 InnoDB 支持真正…

MySQLdb安装与使用

一、MAC系统 1. 安装(使用pip命令) 【1】使用 easy_install pip命令安装pip 【2】安装成功,输入pip显示用法、命令行等信息;命令 which pip 可以查看安装位置 【3】要通过python连接mysql数据库,需要安装MySQLdb模块,该模块其实…

MYSQL 数据库

MySql数据库特点 1、开源数据库,不需要支付额外费用,项目上云首选; 2、关系型数据库,支持多条件场景查询; 3、支持多种存储引擎; MySql数据库语句执行步骤 1)创建连接,验证用户…

【Python】MySQLdb库的使用以及格式化输出字段中的值

一.项目简单介绍 我们获取字段的内容方式有很多种,但基本都要ctrlc(复制)ctrlv粘贴,然后还有手动去更改 而以python作为处理工具将会快很多,本项目需要安装的库:MySQLdb,pandas,numpy 比如我们想要在每个不同的值加上"" 而复制的数据为下图 那么我们每次都要在每行…

图片信息用浏览器显示:data:image/png;base64,+图片内容

最近看到若依图片验证码获取方式时,后台返回的是一串验证码字符串: 例如 /9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyM…

图片中隐藏信息——图片隐写术

https://www.jianshu.com/p/72f0d0953ca4 主要原理: 图片是由一个个像素组成的。每个像素由一组(r,g,b)值表示(png格式图片,多一个alpha透明度值)。而对于单个r,g或b,其范围在0~25…

android 获取图片信息 之 ExifInterface

Android--操作图片Exif信息 --------------------------------------------------------------------------------------- 作者:承香墨影 出处:http://plokmju.cnblogs.com/ 更多内容,请阅读本人新书:《Android深入浅出》 欢迎…

图片头文件信息解析

今天发现获取图片的宽高,并不需要把图片完全读完之后再来获取,而只需要读取文件头文件,几十个字节便可以读出文件的宽高。 图片的文件头部存储有该图片相关信息,可以从中读取相应字段,得到尺寸、大小、格式等信息。由于…

图片Exif信息解析(Java实现)

前言 可交换图像文件(Exchangeable Image File,Exif)信息图像在拍摄时保留的相关参数:比如图像信息(厂商,分辨率等),相机拍摄记录(ISO,白平衡,饱和度,锐度等…