MySQL数据库中的事务和存储引擎(二)

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDSClaw,2核4GB
简介: MySQL数据库中的事务和存储引擎(二)

1.6.4使用set设置控制事务

在MySQL中,当我们输入命令时,是系统在自动帮我们begin与commit,无需我们手动输入。这是因为MySQL数据库默认设置了自动提交。


#查看Mysql中的AUTOCOMMIT值 
show variables like 'autocommit';


set autocommit=0#1为开启



注意:


如果没有开启自动提交,当前会话连接的mysql的所有操作都会当成一个事务直到你输入rollback|commit;当前事务才算结束。当前事务结束前新的mysql连接时无法读取到任何当前会话的操作结果。

如果开起了自动提交,mysql会把每个sql语句当成一个事务,然后自动的commit。

当然无论开启与否,begin; commit|rollback; 都是独立的事务。

二、MySQL 存储引擎


2.1存储引擎概念

MySQL中的数据用各种不同的技术存储在文件中,每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力,这些不同的技术以及配套的功能在MySQL中称为存储引擎

存储引擎是MySQL将数据存储在文件系统中的存储方式或者存储格式


2.2MySQL常用的存储引擎

MyISAM
InnoDB

MySQL数据库中的组件,负责执行实际的数据I/O操作


MySQL系统中,存储引擎处于文件系统之上,在数据保存到数据文件之前会传输到存储引擎,之后按照各个存储引擎的存储格式进行存储


2.3MyISAM的特点介绍

MyISAM不支持事务,也不支持外键约束,只支持全文索引,数据文件和索引文件是分开保存的


访问速度快,对事务完整性没有要求

MyISAM适合查询、插入为主的应用


MyISAM在磁盘上存储成三个文件,文件名和表名都相同,但是扩展名分别为:


.frm文件存储表结构的定义

数据文件的扩展名为.MYD (MYData)

索引文件的扩展名是.MYI (MYIndex)


表级锁定形式,数据在更新时锁定整个表


数据库在读写过程中相互阻塞

会在数据写入的过程阻塞用户数据的读取

也会在数据读取的过程中阻塞用户的数据写入

数据单独写入或读取,速度过程较快且占用资源相对少


2.4MyISAM适用的生产场景举例

公司业务不需要事务的支持

单方面读取或写入数据比较多的业务

MyISAM存储引擎数据读写都比较频繁场景不适合

使用读写并发访问相对较低的业务

数据修改相对较少的业务

对数据业务-致性要求不是非常高的业务

服务器硬件资源相对比较差


2.5InnoDB的特点介绍

支持事务,支持4个事务隔离级别

MySQL从5.5.5版本开始,默认的存储引擎为InnoDB

读写阻塞与事务隔离级别相关

能非常高效的缓存索引和数据

表与主键以簇的方式存储

支持分区、表空间,类似oracle数据库

支持外键约束,5.5前不支持全文索引,5.5后支持全文索引

对硬件资源要求还是比较高的场合

行级锁定,但是全表扫描仍然会是表级锁定,如

update table set a=1 where user like '%zhang%';

InnoDB中不保存表的行数,如select count(* ) from

table;时,InnoDB需要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。需要注意的是,当count(*)语句包含where条件时MyISAM也需要扫描整个表

对于自增长的字段,InnoDB 中必须包含只有该字段的索引,但是在MyISAM表中可以和其他字段一起建立组合索引

清空整个表时,InnoDB是- -行一 行的删除,效率非常慢。MyISAM则会重建表

2.6InnoDB适用生产场景分析举例

业务需要事务的支持


行级锁定对高并发有很好的适应能力,但需确保查询是通过索引来完成 业务数据更新较为频繁的场景


▷如:论坛,微博等


业务数据一致性要求较高


▷如:银行业务等


硬件设备内存较大,利用InnoDB较好的缓存能力来提高内存利用率,减少磁盘I0的压力


2.7企业选择存储引擎依据

需要考虑每个存储引擎提供了哪些不同的核心功能及应用场景


支持的字段和数据类型


所有引擎都支持通用的数据类型

但不是所有的引擎都支持其它的字段类型,如二进制对象

锁定类型:不同的存储引擎支持不同级别的锁定


表锁定: MyISAM 支持

行锁定: InnoDB 支持

索引的支持

●建立索引在搜索和恢复数据库中的数据时能显著提高性能

●不同的存储弓|擎提供不同的制作索引的技术

●有些存储弓|擎根本不支持索引


事务处理的支持

●提高在向表中更新和插入信息期间的可靠性

●可根据企业业务是否要支持事务选择存储引擎


2.8MyISAM 表支持 3 种不同的存储格式

静态(固定长度)表

静态表是默认的存储格式。静态表中的字段都是非可变字段,这样每个记录都是固定长度的,这种存储方式的优点是存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多。

动态表

动态表包含可变字段,记录不是固定长度的,这样存储的优点是占用空间较少,但是频繁的更新、删除记录会产生碎片,需要定期执行 OPTIMIZE table 语句或 myisamchk -r 命令来改善性能,并且出现故障的时候恢复相对比较困难。

压缩表

压缩表由 myisamchk 工具创建,占据非常小的空间,因为每条记录都是被单独压缩的,所以只有非常小的访问开支。

2.9存储引擎的修改

2.9.1查看系统支持的存储引擎

#查看系统支持的存储引擎
show engines;


2.9.2查看表使用的存储引擎

方法一:


show table status from 库名 where name='表名'\G

方法二:


use 库名;
show create table 表名;

2.9.3修改存储引擎

2.9.3.1通过 alter table 修改

use 库名;
alter table 表名 engine=MyISAM;


2.9.3.2通过修改 /etc/my.cnf 配置文件,指定默认存储引擎并重启服务

vim /etc/my.cnf
......
[mysqld]
......
default-storage-engine=INNODB
systemctl restart mysql.service
注意:此方法只对修改了配置文件并重启mysql服务后新创建的表有效,已经存在的表不会有变更。

2.9.3.3通过 create table 创建表时指定存储引擎

use 库名;
create table 表名(字段1 数据类型,...) engine=MyISAM;

相关实践学习
自建数据库迁移到云数据库
本场景将引导您将网站的自建数据库平滑迁移至云数据库RDS。通过使用RDS,您可以获得稳定、可靠和安全的企业级数据库服务,可以更加专注于发展核心业务,无需过多担心数据库的管理和维护。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
9月前
|
存储 SQL 关系型数据库
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
|
7月前
|
SQL 关系型数据库 MySQL
MySQL锁机制:并发控制与事务隔离
本文深入解析了MySQL的锁机制与事务隔离级别,涵盖锁类型、兼容性、死锁处理及性能优化策略,助你掌握高并发场景下的数据库并发控制核心技巧。
|
8月前
|
存储 监控 Oracle
MySQL事务
MySQL事务具有ACID特性,包括原子性、一致性、隔离性和持久性。其默认隔离级别为可重复读,通过MVCC和间隙锁解决幻读问题,确保事务间数据的一致性和并发性。
MySQL事务
|
6月前
|
关系型数据库 MySQL 数据库
【赵渝强老师】MySQL的事务隔离级别
数据库并发访问时易引发数据不一致问题。如客户端读取到未提交的事务数据,可能导致“脏读”。MySQL通过四种事务隔离级别(读未提交、读已提交、可重复读、可序列化)控制并发行为,默认为“可重复读”,以平衡性能与数据一致性。
376 0
|
7月前
|
关系型数据库 MySQL 数据库
MySql事务以及事务的四大特性
事务是数据库操作的基本单元,具有ACID四大特性:原子性、一致性、隔离性、持久性。它确保数据的正确性与完整性。并发事务可能引发脏读、不可重复读、幻读等问题,数据库通过不同隔离级别(如读未提交、读已提交、可重复读、串行化)加以解决。MySQL默认使用可重复读级别。高隔离级别虽能更好处理并发问题,但会降低性能。
249 0
|
9月前
|
安全 关系型数据库 MySQL
mysql事务隔离级别
事务隔离级别用于解决脏读、不可重复读和幻读问题。不同级别在安全与性能间权衡,如SERIALIZABLE最安全但性能差,READ_UNCOMMITTED性能高但易导致数据不一致。了解各级别特性有助于合理选择以平衡并发性与数据一致性需求。
243 1
|
10月前
|
中间件 关系型数据库 Go
Go语言数据库编程:数据迁移与事务控制
本文介绍了《Go语言实战指南》中关于数据库编程的核心内容,涵盖使用 GORM 进行数据迁移与事务控制。主要内容包括:AutoMigrate 方法自动创建或更新表结构;事务控制的自动与手动实现方式;事务隔离级别的设置;以及在 Gin 框架中统一管理事务的实践建议。适合开发阶段的数据库结构管理和事务性操作需求。
|
11月前
|
存储 SQL 关系型数据库
MySQL存储引擎简介
在选择相应的存储引擎时,需要充分考虑实际业务场景、性能需求和数据一致性要求,从而为数据管理提供最佳支持。
497 17
|
存储 缓存 关系型数据库
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
MySQL的存储引擎是其核心组件之一,负责数据的存储、索引和检索。不同的存储引擎具有不同的功能和特性,可以根据业务需求 选择合适的引擎。本文详细介绍了MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案。
2246 57
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
|
SQL 安全 关系型数据库
【MySQL基础篇】事务(事务操作、事务四大特性、并发事务问题、事务隔离级别)
事务是MySQL中一组不可分割的操作集合,确保所有操作要么全部成功,要么全部失败。本文利用SQL演示并总结了事务操作、事务四大特性、并发事务问题、事务隔离级别。
5472 56
【MySQL基础篇】事务(事务操作、事务四大特性、并发事务问题、事务隔离级别)

推荐镜像

更多