Innodb存储引擎

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

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



相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
存储 关系型数据库 MySQL
什么是MyISAM和InnoDB
【10月更文挑战第17天】什么是MyISAM和InnoDB
93 0
|
4月前
|
安全 关系型数据库 数据库
MyISAM和InnoDB的区别
InnoDB支持事务,MyISAM不支持 InnoDB支持外键,MyISAM不支持 InnoDB是聚簇索引,MyISAM是非聚簇索引 InnoDB支持行锁和表锁,MyISAM只支持表锁;【并发情况下,InnoDB性能更牛,默认一锁只会锁住一行数据】 InnoDB不支持全文索引,MyISAM支持 InnoDB支持自增和MVCC模式的读写,MyISAM不支持 InnoDB支持支出数据库异常崩溃后的安全恢复,MyISAM不支持【崩溃后,重启会保证数据恢复到崩溃前状态。这个恢复的过程依赖于redo.log】
|
4月前
|
存储 关系型数据库 MySQL
MyISAM存储引擎
【10月更文挑战第29天】MyISAM存储引擎以其简单高效的存储结构、良好的查询性能和数据压缩功能,在一些特定的应用场景中具有一定的优势。但由于其不支持事务处理和表级锁机制的限制,在需要处理大量并发事务和保证数据一致性的场景中,通常会选择InnoDB等支持事务的存储引擎。在实际应用中,需要根据具体的业务需求和性能要求,合理地选择和使用存储引擎,以充分发挥其优势,提高数据库系统的性能和可靠性。
89 6
|
4月前
|
存储 关系型数据库 MySQL
数据库引擎之InnoDB存储引擎
【10月更文挑战第29天】InnoDB存储引擎以其强大的事务处理能力、高效的索引结构、灵活的锁机制和良好的性能优化特性,成为了MySQL中最受欢迎的存储引擎之一。在实际应用中,根据具体的业务需求和性能要求,合理地使用和优化InnoDB存储引擎,可以有效地提高数据库系统的性能和可靠性。
74 5
|
6月前
|
存储 SQL 缓存
InnoDB 存储引擎以及三种日志
InnoDB 存储引擎以及三种日志
41 0
|
9月前
|
存储 关系型数据库 MySQL
MySQL数据库——存储引擎(2)-存储引擎特点(InnoDB、MyISAM、Memory)、存储引擎选择
MySQL数据库——存储引擎(2)-存储引擎特点(InnoDB、MyISAM、Memory)、存储引擎选择
134 1
|
存储 SQL 缓存
InnoDB、MyISAM、Memory 存储引擎 的区别
InnoDB、MyISAM、Memory 存储引擎 的区别
217 0
|
存储 关系型数据库 MySQL
InnoDB和MyISAM存储引擎对比
InnoDB和MyISAM存储引擎对比 相同点:都是B+索引,不清楚B+索引的可以看上一篇
83 1
|
SQL 存储 关系型数据库
第20章_Myisam与InnoDB
第20章_Myisam与InnoDB
45 0
|
关系型数据库 MySQL 数据库
MyISAM和InnoDB区别
MyISAM和InnoDB区别
MyISAM和InnoDB区别
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等