拓冰建站拓冰建站
首页 / 资讯中心 / 正文

mysql基础(十)存储引擎与事务

文章目录1. 存储引擎2. 事务1. 存储引擎存储引擎是MySQL中独有的称谓用来区分不同的存储与组织数据方式也就是不同的存储引擎存储数据方式不同。查看表使用的引擎SHOWCREATETABLEa1常用的就是InnoDB和MyISAM。在 MySQL 5.7 及之前的版本中MyISAM 使用三个文件表示一张表mytable.frm存储表结构的定义、mytable.MYD存储表行的内容、mytable.MYI存储表上的索引。在 MySQL 8.0 中.frm 文件已被移除改用数据字典Data Dictionary 统一管理表结构定义因此你只能在物理目录下看到 .MYD 和 .MYI 两个文件。其优势就是可转换为压缩、只读表来节省空间劣势是不支持事务所以不安全。InnoDB是默认的引擎也是一个重量级引擎以一个.frm文件表示使用表空间(tablespace)存储表的内容并提供一组用来记录事务性活动的日志文件用commit、savepoint、rollback来支持事物处理支持行级锁定支持服务器崩溃后自动恢复。其最大优势就是安全对事务的支持相对劣势就是无法很好的节约存储空间。还有MEMORY引擎因为其数据存储在内存中查询效率最高但是不安全这里不做赘述。2. 事务事务特性1.原子性——事务是一个不可分割的最小工作单元。事务中的所有操作要么全部执行成功要么全部失败回滚不会结束在中间某个环节。2.一致性——事务的执行必须使数据库从一个一致性状态变换到另一个一致性状态。这意味着事务执行前后数据必须满足所有的约束条件如主键、外键、唯一性等和业务规则数据整体保持完整和逻辑正确。3.隔离性——多个事务并发执行时一个事务的执行不应被其他事务干扰。InnoDB通过提供事务隔离级别如读未提交、读已提交、可重复读、串行化来控制一个事务在提交前其修改对其他事务的可见程度。4.持久性——事务一旦提交其对数据库中数据的修改就是永久性的。即使数据库系统随后发生故障已提交的数据也不会丢失。MySQL默认自动提交事务。关闭自动提交命令SETautocommit0;关闭自动提交后直接操作是无效的要用加上COMMIT才能提交成功。开启自动提交用BEGIN开启事务事务的隔离性至关重要如同在事务之间建了一道墙可厚可薄墙越厚隔离级别越高。下表是从低到高的隔离级别表读未提交——事务A读到了事务B未提交的数据这会导致脏读问题。做为最低隔离级别读未提交一般只是理论上存在因为大多数据最低级别都是从读已提交开始。读已提交——事务A只能读取到B已提交的数据虽然解决了脏读问题但是存在不可重复读问题也就是因为B事务提交了更改数据导致A事务前后读取结果不一致。其实这种情况获得的数据是真实的相当于实时更新了只是在某些场景不允许出现这种问题。可重复读——在B事务修改且提交的情况下事务A每次查询结果都一样解决了不可重复读问题。然而这种隔离级别还是会面临幻读问题即在B事务新增数据并提交后事务A读取到的数据条数发了变化就像出现幻觉一样。串行化/序列化——事务A执行的时候事务B要排队不能并发执行解决了上述所有问题。隔离级别演示读未提交演示读已提交演示可重复读演示串行化演示关于串行化的总结1.所有事务都只进行查询是不会出现阻塞的。2.事务A有了任何操作(包括查询)并未提交事务B的DML会被阻塞。3.事务A有了DML操作并未提交事务B的任何操作(含查询)会被阻塞。4.事务A有了DML操作并未提交事务B已经提交过了那么事务B的查询不会阻塞这是对第3条的补充。总结脏读读取了其它事务未提交数据不可重复读读取了其它事务已提交的修改数据幻读读取了其它事务已提交的新增数据。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门