Innodb存储引擎

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

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



相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
9月前
|
存储 安全 关系型数据库
什么是存储引擎
什么是存储引擎
554 0
|
4月前
|
存储 关系型数据库 MySQL
InnoDB和MyISAM存储引擎对比
InnoDB和MyISAM存储引擎对比 相同点:都是B+索引,不清楚B+索引的可以看上一篇
40 1
|
5月前
|
SQL 存储 关系型数据库
第20章_Myisam与InnoDB
第20章_Myisam与InnoDB
26 0
|
8月前
|
存储 关系型数据库 MySQL
MyISAM的特点
MyISAM是一种MySQL数据库的存储引擎
95 0
|
10月前
|
存储 缓存 Oracle
第05章_存储引擎
第05章_存储引擎
62 0
|
存储 缓存 关系型数据库
Innodb存储引擎的索引组成
Innodb存储引擎的索引组成
|
存储 安全 关系型数据库
【Innodb 和mylsam存储引擎】
【Innodb 和mylsam存储引擎】
|
关系型数据库 MySQL 数据库
MyISAM和InnoDB区别
MyISAM和InnoDB区别
MyISAM和InnoDB区别
|
存储 SQL 缓存
LSMT存储引擎浅析
LSMT存储引擎浅析
432 1
LSMT存储引擎浅析
|
存储 关系型数据库 索引
InnoDB 和 MyISAM 存储引擎的区别
InnoDB 和 MyISAM 存储引擎的区别
131 0
InnoDB 和 MyISAM 存储引擎的区别