mysql数据库详解(四):基础知识

MYSQL-创建数据库 CREATE DATABASE (十一) MYSQL创建数据库语法 CREATE DATABASE 阅读详情

作为一个稀有的Java妹子,所写的所有博客都只是当作自己的笔记,留下证据自己之前是有用心学习的~哈哈哈哈(如果有不对的地方,也请大家指出,不要悄悄咪咪的不告诉我)

一、数据库三大范式

第一范式:每个列都不可以再拆分。
第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。
第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。

二、MySQL存储引擎MyISAM与InnoDB区别

1、常用的存储引擎有以下:

Innodb引擎:Innodb引擎提供了对数据库ACID事务的支持。并且还提供了行级锁和外键的约束。它的设计的目标就是处理大数据容量的数据库系统。
MyIASM引擎(原本Mysql的默认引擎):不提供事务的支持,也不支持行级锁和外键。
MEMORY引擎:所有的数据都在内存中,数据的处理速度快,但是安全性不高。

/MyIASMInnodb
存储结构每张表被存储为三个文件,frm-表格定义、MYD(MYData)-数据文件、MYI(MYIndex)-索引文件存储为一个文件,
文件格式数据和索引是分别存储的,数据.MYD,索引.MY数据和索引是集中存储的,.ibd
记录存储顺序按记录插入顺序保存按主键大小有序插入
外键不支持支持
事务不支持支持
锁表级锁定行级锁定、表级锁定,锁定力度小并发能力高
select更优
insert,update,delete更优
select count(*)myisam更快,因为myisam内部维护了一个计数器,可以直接调取。
哈希索引不支持支持
全文索引支持不支持
2、MyISAM索引与InnoDB索引的区别

InnoDB索引是聚簇索引,MyISAM索引是非聚簇索引。
InnoDB的主键索引的叶子节点存储着行数据,因此主键索引非常高效。
MyISAM索引的叶子节点存储的是行数据地址,需要再寻址一次才能得到数据。
InnoDB非主键索引的叶子节点存储的是主键和其他带索引的列数据,因此查询时做到覆盖索引会非常高效。

三、事务

1、事务的四大特性(ACID)

A:原子性,事务是不可分隔的,最小单位
C:一致性,一次事务要么全部执行,要么全部不执行
I:隔离性,不同的事务之间是隔离的,一个事务看不到其他事务提交的结果
D:持久性,事务执行完后,数据是永久保存

2、事务的术语

开启事务
结束事务
提交事务
回滚事务:出现异常时,为了保证一致性

3、什么是脏读?幻读?不可重复读?

脏读:一个事务还未提交时,另一个事务读取到还未提交的数据,因为事务可能会回滚,所以在没提交之前的数据都是脏数据,读到这些脏数据就是脏读。
不可重复读:事务之间不隔离导致的,在同一个事务里多次查询一个字段,结果不一样,这是因为在多次查询之间另外的事务提交了更新了该字段。
幻读:事务之间不隔离导致,在同一事务里多次查询表的行数,结果不一样,因为在查询之间另外的事务提交插入或者删除了新的记录。

4、事务的几种隔离级别

读未提交(READ-UNCOMMITTED):最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。
读提交(READ-COMMITTED):允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生
可重复读(REPEATABLE-READ):对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。
串行化(SERIALIZABLE):最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。

mysql默认的是可重复读级别。

5、事务实现的原理

参考链接:https://blog.youkuaiyun.com/whoamiyang/article/details/51901888
数据库使用MVCC(多版本并发控制)提高并发性能,在不使用锁的情况下,处理读写冲突,也是乐观锁的一种实现。使用的是快照读的方式,保存数据在某个时间点的快照。

数据库的每行记录都有四个隐式字段:
1、创建时间,其实存放的是事务ID
2、更新时间,存放的是更新或删除事务的ID
3、回滚指针,指向上一个版本
4、隐藏主键(表未指定主键时使用)
每个事务ID可以看作是一个版本,事务ID是从1开始递增。

select:查询出创建时间版本<=当前事务ID的数据,或者删除时间版本>当前事务ID的数据
这样就能保证多次查询出来的数据不会因为其他事务的提交而不同

update:将原来数据的更新时间版本设为当前事务ID,然后插入一条数据,创建时间版本是当前事务ID

delete:将数据的更新时间版本设为当前事务ID

6、springboot如何开启事务

有两种,一种是声明式事务,一种是注解式
声明式我用的比较少,一般是用的注解式,只需要在类或者方法上使用@Transactional即可,Spring的aop会自动的在加了该注解的方法里添加事务的开启、提交和回滚。

四、锁

锁是为了协调在高并发情况下,多个线程对同一资源操作的机制,使得竞争的线程可以分先后顺序的来访问修改同一资源。

1.锁的分类

共享锁:其他事务可以读,不能写
排他锁:其他事务不能读不能写

表锁:锁整张表,开销小,加锁快,不会出现死锁
行锁:锁某一行,开销大,加锁慢,会出现死锁

意向共享锁:innodb里的表锁,在加行共享锁时自动加这个锁
意向排他锁:innodb里的表锁,在加行排他锁时自动加这个锁

间隙锁:where后面不是等值时,是范围时就会加这个锁

2.不同引擎的加锁方式

MyISAM:
MyISAM 在执行查询语句(SELECT)前,会自动给涉及的表加读锁,再执行更新操作
(UPDATE、DELETE、INSERT 等)前,会自动给涉及的表加写锁,这个过程并不需要用户干预,因此,用户一般不需要直接用 LOCK TABLE 命令给 MyISAM 表显式加锁。
在自动加锁的情况下,MyISAM 总是一次获得 SQL 语句所需要的全部锁,这也正是 MyISAM 表不会出现死锁(Deadlock Free)的原因。

InnoDB:
InnoDB即支持行锁也支持表锁,为了使这两种锁同时存在,表锁使用意向锁命名
意向共享锁(IS):事务打算给数据行加行共享锁,事务在给一个数据行加共享锁前必须先取得该表的 IS 锁。
意向排他锁(IX):事务打算给数据行加行排他锁,事务在给一个数据行加排他锁前必须先取得该表的 IX 锁。
加锁方式:
1、意向锁是 InnoDB 自动加的, 不需用户干预。
2、对于 UPDATE、 DELETE 和 INSERT 语句, InnoDB会自动给涉及数据集加排他锁(X);
3、对于普通 SELECT 语句,InnoDB 不会加任何锁;事务可以通过以下语句显式给记录集加共享锁或排他锁:
共享锁(S):SELECT * FROM table_name WHERE … LOCK IN SHARE MODE。 其他 session 仍然可以查询记录,并也可以对该记录加 share mode 的共享锁。但是如果当前事务需要对该记录进行更新操作,则很有可能造成死锁。
排他锁(X):SELECT * FROM table_name WHERE … FOR UPDATE。其他 session 可以查询该记录,但是不能对该记录加共享锁或排他锁,而是等待获得锁

select *** for update 的使用场景:为了让自己查到的数据确保是最新数据,并且查到后的数据只允许自己来修改的时候,需要用到 for update 子句。

3.锁是否用到

InnoDB 是通过给索引上的索引项加锁来实现的,所以如果没有使用到索引,则不会加锁,可以通过explain来看执行计划中sql是否有用到索引

4.死锁

1、当事务试图以不同的顺序锁定资源时,就可能产生死锁。多个事务同时锁定同一个资源时也可能会产生死锁

2、发生死锁后,InnoDB 一般都能自动检测到,并使一个事务释放锁并回退,另一个事务获得锁,继续完成事务。有时当发生死锁时,禁用死锁检测(使用innodb_deadlock_detect配置选项)可能会更有效,这时可以依赖innodb_lock_wait_timeout设置进行事务回滚。

5.避免死锁

1、如果有写操作时,可以先使用select for update加排他锁,即使这些行的更改语句是在之后才执行的。
2、通过SELECT … LOCK IN SHARE MODE获取行的读锁后,如果当前事务再需要对该记录进行更新操作,则很有可能造成死锁。

五、慢日志

1.定义

慢日志是mysql可以监控运行时间超过阈值的sql语句,并且记录到文件或者表中。默认是关闭的,因为监控慢查询是比较消耗性能的,阈值是long_query_time这个参数设置的值,默认是10s。

2.相关的参数

slow_query_log :是否开启慢查询日志,1表示开启,0表示关闭。
slow-query-log-file:新版(5.6及以上版本)MySQL数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log
long_query_time :慢查询阈值,当查询时间多于设定的阈值时,记录日志。
log_queries_not_using_indexes:未使用索引的查询也被记录到慢查询日志中(可选项)。
log_output:日志存储方式。log_output=‘FILE’表示将日志存入文件,默认值是’FILE’。log_output='TABLE’表示将日志存入数据库,这样日志信息就会被写入到mysql.slow_log表中。MySQL数据库支持同时两种日志存储方式,配置的时候以逗号隔开即可,如:log_output=‘FILE,TABLE’。日志记录到系统的专用日志表中,要比记录到文件耗费更多的系统资源,因此对于需要启用慢查询日志,又需要能够获得更高的系统性能,那么建议优先记录到文件。

MyEclipse DB Browser连接MySQL配置 MyEclipse DB Browser连接MySQL配置   1、打开MyEclipse   2、选择菜单:Window/Open Perspective/MyEclipse Database Explorer,点这儿OK,在左边打开DB Brower窗口。   3、在DB Brower窗口内任意空白处击右键,选择New命令,弹出Database Driver窗口   4、本 阅读详情

相关推荐

MySQL创建数据库(CREATE DATABASE语句)

数据库可以看作是一个专门存储数据对象的容器,这里的数据对象包括表、视图、触发器、存储过程等,其中表是最基本的数据对象。在 MySQL 数据库中创建数据对象之前,先要创建好数据库。 在 MySQL 中,可以使用CREATE DATABASE语句创建数据库,语法格式如下: CREATE DATABASE [IF NOT EXISTS] <数据库名> [[DEFAULT] CH...

MYSQL安装教程 1096

三个范式

第一范式: 每个列都不可以再拆分 第二范式: 非主键列完全依赖于主键,而不能是依赖于主键的一部分 第三范式: 非主键列只依赖于主键,不依赖于其他非主键

9216

[Python从零到壹] 八.数据库之MySQL和Sqlite基础知识及操作万字详解

欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界。前一篇文章讲述了Requests库爬取豆瓣电影TOP250,并存储至CSV文件。豆瓣TOP250是非常适合入门的案例,也能普及简单的预处理知识。这篇文章将普及数据库操作知识,这也为后续网络爬虫存储至数据库奠定基础。本文详细介绍MySQL安装、SQL语句和Python操作数据库知识,希望对您有所帮助。

杨秀璋的专栏 8665

MySQL夺命15问,你能坚持到第几问?

来源:https://jeames.blog.youkuaiyun.com/?type=blog前言 MySQL在面试中经常被问到,本文总结了面试中的经典问题。1. 数据库三大范式是什么? 第一范式:每个列都不可以再拆分。第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。在设计数据...

Java团长的博客 636

python实现语音信号的分帧、加窗、预处理

语音信号实现分帧、加窗、预处理音频文件读取预加重分帧加窗 音频文件读取 librosa是非常强大的python语音信号处理库。 读取音频: 使用语句librosa.load(path, sr=22050, mono=True, offset=0.0, duration=None)读取音频文件,默认的采样率是22050,若要保留音频的原始采样率,使用sr=None。 其中: path:表示音频文件的路径 sr:表示采样率 mono:bool,是布尔类型,表示是否将信号转换为单声道 offset:float,后

weixin_45272908的博客 1万+

基于POI-TL实现动态Word模板数据填充(含图表):从需求到落地的完整开发实践

本文聚焦企业级报告生成场景中 “在线编辑模板 + 动态数据填充” 的核心需求,详细阐述基于 POI-TL、OnlyOffice 与 MinIO 的全栈实现方案。通过代码示例拆解模板加载、文字填充、图表匹配渲染(含通过关系 ID 关联图表与段落的关键逻辑)、报告存储全步骤。最终通过技术组合实现业务人员可视化编辑模板、后端高效填充数据的目标,为同类动态 Word 生成需求提供可复用的实践参考。

imHanweihu的博客 1861

MySQL基础知识点总结

SQL 标准定义了四个隔离级别:指数据库可以读取未提交的数据;这种隔离级别是最低的,他可能会出现脏读,幻读,不可重复读。指数据库可读取并发事务已经提交的数据,可以阻止脏读,但是不能阻止不可重复读和幻读。指对同一字段的多次读取结果是一致的,除非数据是被事务本身修改。可以阻止脏读和不可重复读,但幻读依旧可能发生。最高的隔离级别,完全服从ACID的隔离级别,所有事务依次执行。可以阻止所有并发事务可以会导致的数据异常。隔离级别脏读不可重复读幻影读√√√×√√××√×××。

Playepineapple的博客 405

Android逆向进阶篇 Charles + Drony Vpn绕过代理检测方案 获取猫眼App数据

Android逆向进阶篇 Charles + Drony Vpn绕过代理检测方案 获取猫眼App数据

曾用名:极客柒 1851

胡咧咧之MySQL

MySQL基础知识 三大范式: 每个列都不可以再拆分 在第一范式基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分 在第二范式基础上,非主键列只能依赖于主键,不依赖于其他非主键 数据类型 整数类型 包括tinyint(1字节 极小的)、smallint(2字节 小的)、mediumint(3字节 中等的)、int(4字节)、bigint(8字节) 加上unsigned修饰,表示数据是无符号的,即非负整数。 int(5) 属性为unsigned、zerofill(补零):插入12,数据库实际存

fanzhe的博客 999

【毕业设计】基于雷达与深度学习的摔倒检测——雷达数据集处理

雷达原始数据是时域非平稳信号,快速傅里叶变换(Fast Fourier Transformation, FFT)不能很好地提取微多普勒效应的模式特征。因此短时傅里叶变换(Short Time Fourier Transformation, STFT)被应用于雷达信号的时频谱分析。本文主要介绍雷达数据集的预处理过程,包括时频谱图的中值滤波与 SVD 分解。

洋洋Young的博客 1808

【Godot】【工程】中文字体与多语言(缺字/体积/打包:一次性配置到位)

本文介绍了Godot游戏开发中的中文字体配置与多语言支持方案。主要内容包括:1)中文字体的全局与局部设置;2)使用子集化技术减小字体体积;3)多语言资源管理及翻译系统实现;4)语言切换机制与控件刷新方法;5)字体回退策略优化显示效果;6)打包优化建议。文章提供了从字体导入到多语言实现的完整解决方案,帮助开发者系统性解决中文显示和多语言支持问题,同时优化资源体积和性能表现。配套案例可供学习参考。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 596

MySQL数据库基础知识

一、数据库三大范式 第一范式:每个列都不可以再拆分。 第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。 第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。 二、MySQL有关权限的表都有哪些? MySQL服务器通过权限表来控制用户对数据库的访问,权限表存放在MySQL数据库里,由mysql_install_db脚本初始化,包括下列五大权限表: user权限表:记录允许连接到服务器的用户帐号信息,里面的权限是全局级的。 db权限表:记录各个帐号在各

hoho_965191737的博客 716

本地玩转AI还得靠这个,SillyTavern(酒馆)到底有多强?

SillyTavern是一款本地运行的LLM交互前端,支持文本生成、图像生成、语音合成等功能。它最初是TavernAI的分支,现已独立开发,社区活跃,功能更新频繁。SillyTavern通过前端UI和插件系统连接各种大模型后端,如OpenAI、KoboldAI等,用户可以在本地创建“虚拟酒馆”与各种角色对话。其功能亮点包括角色卡、角色记忆、世界设定、多人聊天室、自定义UI和行为脚本、插件扩展支持等。SillyTavern适合AI创作用户、AI工程师、LLM爱好者和AIGC创作者。它有两个维护分支:relea

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 8030

5、MySQL修改数据库:ALTER DATABASE用法简介

在 MySQL 数据库中只能对数据库使用的字符集和校对规则进行修改,数据库的这些特性都储存在 db.opt 文件中。下面我们来介绍一下修改数据库的基本操作。 在 MySQL 中,可以使用 ALTER DATABASE 来修改已经被创建或者存在的数据库的相关参数。修改数据库的语法格式为: ALTER DATABASE [数据库名] { [ DEFAULT ] CHARACTER SET <字符集名> | [ DEFAULT ] COLLATE <校对规则名>} 语法说明如下: A

you can you up up up的博客 2709

11、机器学习中的聚类与隐马尔可夫模型

本文介绍了机器学习中的两种重要方法:聚类算法和隐马尔可夫模型(HMM)。聚类作为无监督学习的代表,适用于发现无标签数据中的结构,常见算法包括K-均值和自组织映射(SOM),并在传感器数据分析等场景中展现应用价值。隐马尔可夫模型则是一种可解释的序列模型,用于从观测数据中推断隐藏状态,广泛应用于语音识别、自然语言处理和生物信息学等领域。文章详细讲解了HMM的核心概念如马尔可夫性质、转移与发射概率,并通过TensorFlow实现了前向算法,展示了其计算观测序列概率的动态规划思想。最后对比了两类方法的应用场景,展望

garlic的博客 179

AgentScope Java 2.0 项目实战:从零构建企业级自主Coding Agent

本文基于 AgentScope Java 框架,完整拆解两个生产级 AI Agent 项目的从零开发全过程。其一是企业级自主编码机器人(agentscope-codingagent),支持 Issue→PR 自动实现、PR Code Review、Docker 沙箱隔离执行与多通道接入;其二是个人 AI 助手管理平台(agentscope-paw),采用 Spring Boot + React 全栈架构,支持多 Agent、技能市场与多 IM 通道。

program哲学 833

db文件怎么修改_详解MySQL数据库的db.opt文件含义及作用

概述MySQL数据库存放数据目录里的db.opt文件是MySQL建库过程中自动生成的。细心的朋友可能会发现有时候在MySQL数据库的某些库目录下有个db.opt文件,那这个文件是干什么用的呢?如果你用记事本等编辑器打开看的话,内容很简单,是用来记录该库的默认字符集编码和字符集排序规则用的。db.optMySQL的每个数据库目录中有一个文件db.opt,该文件主要 用来存储当前数据库的默认字符集和字...

weixin_39856607的博客 2466

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

MySQL修改数据库:ALTER DATABASE用法简介

数据库创建好后也是可以修改的,下面我们来介绍一下修改数据库的基本操作 基本语法 在 MySQL 中,可以使用 ALTER DATABASE 或 ALTER SCHEMA 语句来修改已经被创建或者存在的数据库的相关参数。修改数据库的语法格式为: ALTER DATABASE [数据库名] { [ DEFAULT ] CHARACTER SET <字符集名> | [ D...

MYSQL安装教程 2077

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

mysql alter database_MySQL修改数据库:ALTER DATABASE用法简介

在MySQL数据库中只能对数据库使用的字符集和校对规则进行修改,数据库的这些特性都储存在 db.opt 文件中。下面我们来介绍一下修改数据库的基本操作。在 MySQL 中,可以使用ALTER DATABASE来修改已经被创建或者存在的数据库的相关参数。修改数据库的语法格式为:ALTER DATABASE [数据库名] {[ DEFAULT ] CHARACTER SET |[ DEFAULT ]...

weixin_35084134的博客 2393

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

mysql 新建database_MySQL创建数据库(CREATE DATABASE语句)

在MySQL 中,可以使用CREATE DATABASE 语句创建数据库,语法格式如下:CREATE DATABASE [IF NOT EXISTS] [[DEFAULT] CHARACTER SET ][[DEFAULT] COLLATE ];[ ]中的内容是可选的。语法说明如下::创建数据库的名称。MySQL 的数据存储区将以目录方式表示 MySQL 数据库,因此数据库名称必须符合操作系统的文...

weixin_30441727的博客 7047

数据库与表的诞生:MySQL中CREATE DATABASE和CREATE TABLE语句详解

在MySQL中,表是存储数据的核心单元,而语句则是构建这些数据容器的基础工具。通过该语句,我们可以定义表的结构,包括列名、数据类型、约束条件以及存储引擎等关键组成部分。掌握语句的语法和设计原则,是进行高效数据管理的第一步。列定义是表结构的核心,每一列都需要明确指定数据类型,以确保数据的准确存储和高效查询。数值类型:如INT用于整数,DECIMAL用于精确小数。字符串类型:如VARCHAR(n)用于可变长度字符串(n为最大字符数),TEXT用于长文本。日期时间类型:如DATETIME存储日期和时间,

zuiyuelong的博客 1461

MySQL之修改数据库(ALTER DATABASE用法简介)

语法 数据库建立以后我们也是可以进行修改的,我们可以使用ALTER DATABASE或 ALTER SCHEMA 语句来修改已经被创建或者存在的数据库的相关参数。修改数据库的语法格式为: ALTER DATABASE [数据库名] { [ DEFAULT ] CHARACTER SET <字符集名> | [ DEFAULT ] COLLATE <校对规则名>} ALTE...

qq_38523616的博客 3226

MySQL删除数据库(DROP DATABASE语句)

当数据库不再使用时应该将其删除,以确保数据库存储空间中存放的是有效数据。删除数据库是将已经存在的数据库从磁盘空间上清除,清除之后,数据库中的所有数据也将一同被删除。

unber的博客 9509
上一篇: mysql数据库详解(三):索引与sql优化
下一篇: nginx的配置,实现反向代理、负载均衡
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值