MySQL篇01-为什么MySQL默认引擎为Innodb
✅前言在学学习MySQL时同学们可能会有疑问MySQL引擎是什么东西这些引擎有什么用途和区别我要怎么选择这些引擎接下来我将让大家明白为什么innodb是默认引擎。✅引擎分类引擎特点InnoDBACID事物行极锁外键崩溃恢复MyISAM全文索引扫描效率高表记锁定压缩存储Memory基于内存存储数据易丢失✅引擎对比InnoDB和MyISAM对于这两个引擎我们都可能会用到只不过使用的场景不同innodb一般用于多查询的表Myisam一般用于多增改的表。innodb支持事物管理而Myisam则不支持事物管理。这是一个很重要的因素试想一下一个人在银行进行存钱他刚把钱存入机器但是银行系统出现了bug导致他的账户上的资金没有变化。这是一个很严重的问题所以我们需要事物管理来接解决这个问题。而且innodb的索引设计和锁结构都要优于Myisam再加上现在技术的不断发展innodb的增改删操作速度也不断加快导致Myisam的优势再度变小最终在Mysql5.5版本后innodb成为了默认引擎。InnoDB和Memory对于Memory而言是基于内存存储的引擎这使得Memory查询速度十分迅速就像坐火箭一样。但是他有个致命弱点就是就是数据不会持久化。MySQL 服务重启后所有数据都将丢失。我们数据库是保存数据的地方如果连数据都会丢失那还要数据库干嘛直接用txt文件存不更方便反正都可能会丢失。而且对于Memory这样快查询的特点我们有跟好的选择——Redis。也就是因为种种原因导致Memory在开发中基本很少使用✅ InnoDB引擎的优点1.支持事务InnoDB 支持 ACID原子性、一致性、隔离性、持久性事务这意味着它能够保证数据库操作的完整性即使在发生系统崩溃或其他异常情况下。事务支持使得数据的操作变得更加可靠。原子性要么全部成功要么全部失败。一致性事务完成后数据库总是处于一致的状态。隔离性事务之间相互独立不会互相影响。持久性事务一旦提交其结果是永久保存的。2.支持外键约束InnoDB 支持 外键约束这允许在数据库表之间建立关系确保数据的完整性和一致性。外键约束能够确保外键列的值在引用表中必须存在。防止删除或更新父表中的行时破坏子表的数据完整性。其他存储引擎如 MyISAM不支持外键因此对于需要建立关系型数据模型的应用InnoDB 是更好的选择。 3.行级锁定InnoDB 支持 行级锁定而不是表级锁定这意味着它可以在多个并发操作之间提供更细粒度的锁定从而提高数据库的并发性能。当多个用户同时更新不同的行时InnoDB 只会锁定被修改的行而不会锁定整个表从而提高了并发性。这种行级锁定在高并发的环境下尤其重要可以大大减少锁竞争提高效率。4.崩溃回复能力InnoDB 使用了 日志文件 和 重做日志它能够在数据库崩溃后进行数据恢复。这意味着即使在系统异常关闭或崩溃后InnoDB 也能确保数据的完整性和一致性不会丢失已提交的事务。这对于需要高可用性的系统非常重要。5.索引性能优化InnoDB 提供了 B 树索引适用于主键、唯一索引和普通索引这使得它在查询性能上非常强大尤其是对于需要高效检索的查询场景。它还能自动为索引创建和更新最优执行计划以提高查询性能。6.支持大数据量InnoDB 设计上支持非常大的表和数据量并且能在处理大量数据时保持较好的性能。它能够优化存储空间和查询效率适合需要存储大量数据的应用。✅实例演示创建表并使用InnoDB引擎createtableuser(idintprimarykeyauto_increment,usernamevarchar(30)notnull,emailvarchar(100)notnull,ageint)engineinnodb;createtableorders(idINTPRIMARYKEYAUTO_INCREMENT,user_idINTNOTNULL,order_dateDATETIMEDEFAULTCURRENT_TIMESTAMP,totalDECIMAL(10,2)NOTNULL)engineinnodb;在创建表的 ‘)’ 后添加engine关键词即可指定这个表所依赖的引擎使用事务像表中添加数据BEGINTRANSACTION;INSERTINTOusers(username,email,age)VALUES(张三,zhangsanexample.com,25);INSERTINTOorders(user_id,order_date,total)VALUES(LAST_INSERT_ID(),NOW(),199.99);-- 如果一切顺利提交事务COMMIT;如果在向users添加完数据后系统异常orders没有添加数据则事务回滚users中的数据也添加失败插入数据并处理错误BEGINTRANSACTION;BEGINTRYINSERTINTOproducts(product_name,price)VALUES(新产品,50.00);-- 这里做一些可能会失败的操作例如违反唯一约束INSERTINTOproducts(product_name,price)VALUES(新产品,50.00);-- 可能会引发唯一约束错误COMMIT;-- 如果没有错误提交事务ENDTRYBEGINCATCHROLLBACK;-- 如果发生错误回滚事务-- 你可以选择打印错误消息PRINT事务回滚: ERROR_MESSAGE();ENDCATCH;总结在MySQL5.5后成为默认引擎原因如下原因解释✅支持事务保证数据库操作的完整性✅行级锁定减少锁竞争提高效率✅崩溃恢复在系统崩溃后也能找会数据✅支持和社区支持Oracle 主导 MySQL 后推进企业级增强✅支持大数据量适合需要存储大量数据的应用
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2550431.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!