Innodb存储引擎

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介:

InnoDB是什么 

    InnoDB,是MySQL的数据库引擎之一,与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务 (Transaction)功能,类似于PostgreSQL。 

    目前InnoDB采用双轨制授权,一是GPL授权,另一是专有软件授权。 

    MySQL5.5以后默认使用InnoDB存储引擎,其中InnoDB和BDB提供事务安全表,其它存储引擎都是非事务安全表。 

    如果没有指定InnoDB配置选项,MySQL将在MySQL数据目录下创建一个名为ibdata1的10MB大小的自动扩展数据文件,以及两个名为 ib_logfile0和ib_logfile 1的5MB大小的日志文件。 

    ibdata1的大小在my.cnf文件中配置:innodb_data_file_path = ibdata1:10G:autoextend 

    可以设置最大数据文件限制,以免超过系统支持的最大文件: innodb_data_file_path = ibdata1:100M:autoextend:max:500M 

    日志文件大小在my.cnf文件中配置:innodb_log_file_size = 256M innodb_log_files_in_group = 2 

    Innodb存储引擎可以使用共享表空间或独立表空间,使用独立表空间时,需要将innodb_file_per_table加到配置文件中,也可以在 variables中开启。 

    共享表空间是将所有的表的数据和索引保存在ibdata1中,这样的缺点是拷贝时必须拷贝整个大文件,而且删除表后容易产生碎片。 

    独立表空间是为每个表建立一个.ibd文件用来存储数据和.frm用来存数据词典信息,这样,mysql就将innodb表的数据存入各自对应的.ibd 文件中了,但结构等信息还是会写入ibdata。 innodb_file_per_table变量只能在配置文件里修改,不能使用set global … 将innodb_file_per_table关闭之后,建立innoDB表时只生成.frm文件,数据和索引都保存在共享表空间ibdata1中。 

    修改默认引擎的方法 修改InnoDB默认引擎:修改配置文件中的default-storage-engine。在配置文件my.ini中的 [mysqld] 下面加入default-storage-engine=INNODB 

    查看当前数据库默认引擎:show variables like ‘default_storage_engine’ 

    列出当前数据库所支持到引擎:show engines和show variables like ‘have%’其中Value显示为disabled的记录表示数据库支持此引擎,而在数据库启动时被禁用。 

    在MySQL5.1以后,INFORMATION_SCHEMA数据库中存在一个ENGINES的表,它提供的信息与show engines;语句完全一样,可以使用下面语句来查询哪些存储引擎支持事物处理:select engine from information_chema.engines where transactions = ‘yes'; 通过engine关键字在创建或修改数据库时指定所使用到引擎。 


InnoDB特点 


    InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是要对比MyISAM的存储引擎,InnoDB写的处理效率差一些并且会占用更多 的磁盘空间以保留数据和索引。InnoDB表类型可以看作是对MyISAM的进一步更新产品,它提供了事务、行级锁机制和外键约束的功能。 

    Innodb存储引擎管理主要基于两个文件:表空间数据文件和日志文件。 

    InnoDB存储它的表&索引在一个表空间中,表空间可以包含数个文件(或原始磁盘分区)。 

    1)自动增长列:   

        InnoDB表的自动增长列可以手工插入,但是插入的如果是空或0,则实际插入到则是自动增长后到值。可以通过”ALTER TABLE…AUTO_INCREMENT=n;”语句强制设置自动增长值的起始值,默认为1,但是该强制到默认值是保存在内存中,数据库重启后该值将会 丢失。可以使用LAST_INSERT_ID()查询当前线程最后插入记录使用的值。如果一次插入多条记录,那么返回的是第一条记录使用的自动增长值。 

        对于InnoDB表,自动增长列必须是索引。如果是组合索引,也必须是组合索引的第一列,但是对于MyISAM表,自动增长列可以是组合索引的其他列,这 样插入记录后,自动增长列是按照组合索引到前面几列排序后递增的。 

    2)外键约束:

      MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引。 

        在创建索引的时候,可以指定在删除、更新父表时,对子表进行的相应操作,包括restrict、cascade、set null和no action。其中restrict和no action相同,是指限制在子表有关联的情况下,父表不能更新;casecade表示父表在更新或删除时,更新或者删除子表对应的记录;set null 则表示父表在更新或者删除的时候,子表对应的字段被set null。   

        当某个表被其它表创建了外键参照,那么该表对应的索引或主键被禁止删除。   

        可以使用set foreign_key_checks=0;临时关闭外键约束,set foreign_key_checks=1;打开约束。

本文转自: http://www.linux78.com/innodb-storage-engine.html
Linux起点





      本文转自Tenderrain 51CTO博客,原文链接:http://blog.51cto.com/tenderrain/1601725,如需转载请自行联系原作者




相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
存储 SQL 关系型数据库
Mysql系列-4.Mysql存储引擎-InnoDB(下)
Mysql系列-4.Mysql存储引擎-InnoDB
152 0
|
存储 缓存 关系型数据库
MySQL - 存储引擎MyISAM和Innodb
MySQL - 存储引擎MyISAM和Innodb
172 0
|
存储 SQL 关系型数据库
MySQL存储引擎之MyISAM和InnoDB
MySQL存储引擎之MyISAM和InnoDB
139 0
|
11月前
|
存储 缓存 关系型数据库
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
MySQL的存储引擎是其核心组件之一,负责数据的存储、索引和检索。不同的存储引擎具有不同的功能和特性,可以根据业务需求 选择合适的引擎。本文详细介绍了MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案。
1842 57
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
|
11月前
|
存储 关系型数据库 MySQL
MySQL存储引擎详述:InnoDB为何胜出?
MySQL 是最流行的开源关系型数据库之一,其存储引擎设计是其高效灵活的关键。InnoDB 作为默认存储引擎,支持事务、行级锁和外键约束,适用于高并发读写和数据完整性要求高的场景;而 MyISAM 不支持事务,适合读密集且对事务要求不高的应用。根据不同需求选择合适的存储引擎至关重要,官方推荐大多数场景使用 InnoDB。
345 7
|
存储 关系型数据库 MySQL
数据库引擎之InnoDB存储引擎
【10月更文挑战第29天】InnoDB存储引擎以其强大的事务处理能力、高效的索引结构、灵活的锁机制和良好的性能优化特性,成为了MySQL中最受欢迎的存储引擎之一。在实际应用中,根据具体的业务需求和性能要求,合理地使用和优化InnoDB存储引擎,可以有效地提高数据库系统的性能和可靠性。
191 5
|
12月前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL的InnoDB存储引擎
InnoDB是MySQL的默认存储引擎,广泛应用于互联网公司。它支持事务、行级锁、外键和高效处理大量数据。InnoDB的主要特性包括解决不可重复读和幻读问题、高并发度、B+树索引等。其存储结构分为逻辑和物理两部分,内存结构类似Oracle的SGA和PGA,线程结构包括主线程、I/O线程和其他辅助线程。
240 0
【赵渝强老师】MySQL的InnoDB存储引擎
|
存储 SQL 缓存
InnoDB 存储引擎以及三种日志
InnoDB 存储引擎以及三种日志
147 0
|
存储 算法 关系型数据库
【MySQL技术内幕】5.7- InnoDB存储引擎中的哈希算法
【MySQL技术内幕】5.7- InnoDB存储引擎中的哈希算法
148 1
|
存储 关系型数据库 MySQL
MySQL数据库——存储引擎(2)-存储引擎特点(InnoDB、MyISAM、Memory)、存储引擎选择
MySQL数据库——存储引擎(2)-存储引擎特点(InnoDB、MyISAM、Memory)、存储引擎选择
244 1