mysql菜鸟手迹9--mysql存储引擎之InnoDB

InnoDB Engine:
对一个InnoDB表,它在磁盘上的存放的是,一个.frm的结构和描述信息文件,这个是和存储引擎无关的,还有一个表空间文件,里面存储的是数据和索引信息;InnoDB的表空间是一个逻辑的单区域,它是由1个或多个文件组成。这些文件可以存放在不同的分区上面。缺省情况下,一个InnoDB表空间存放所有的InnoDB表内容,InnoDB的存储是与机器无关的格式,我们可以通过将文件拷贝到另一台机器上来实现文件的备份迁移。InnoDB表空间的大小,可以达到文件系统所支持的尺寸。我们也可以设置单独的表空间。
InnoDB提供的事物的提交和回退,并提供了完整的ACID(原子性,一致性,隔离性,持久性)由于多版本控制,每个事物之间是互不影响的,实现了MVCC这个特性。
InnoDB提供了自动恢复的功能,这个功能是基于日志;
InnoDB管理查询竞争的时候,它采用多版本控制和行级锁,多版本控制使每个事物都有一个单独的界面(也就是它自己看到的界面和其他的事物是互不影响的),行级锁,使查询竞争降低到最低,updata时,只会锁住需要更新的行,其它的行不受影响。由于使用行级锁,它不能避免死锁的发生。
InnoDB 支持外键

InnoDB Tablespace and logs
缺省情况下,所有的表数据和索引都存放在一个共享的表空间里,在表空间里包含有一个rollback segment,里面存放的是回退日志的,一个事物更改行,它会把信息存放在rollback segment,这些信息是用来回退那些失败的事务;
innodb_file_per_table 设置单独表空间,设置之后,对一样的表是不受影响的!

配置innodb的表空间,innodb的表空间可以存放在多个文件,多个磁盘和裸设备,最大的表空间可以达到文件系统的最大值,innodb的最后一个表空间文件可以配置自动增长。
innodb_data_file_path这个参数用于配置innodb多个表空间文件
在配置文件中加入:
innodb_data_home_dir=
innodb_data_file_path=/tmp/ibdata1:10M:autoextend:max:20M
ACID (atomic)原子性,要么全成功,要么全失败。Consistent一致性;隔离性,一个事务不会影响其他事务;持久行,异常终止之后在启动时可以恢复过去;
开启事务,有两种方式,第一:set autocommit=0 ;执行一些语句,最后commit;  第二:通过标准的sql语句,start transaction;begin;begin work;commit;

innodb的外键,MyISAM不支持外键。要使用外键条件:1.所有的表必须是innodb表并且不能是临时表;2.在引用表里面,建立外键的列必许包含在索引里面,在不存在的时候,建立外键的时候会被自动创建;3.在主表里面也必须要有一个索引,别引用的列必须包含在索引里面;4.使用外键的列不支持索引前缀;5.当使用constraint创建标识的时候,必须保证名字是全局唯一的;
创建被引用表
create table parent(id int,msg varchar(100))engine=innodb
alter table parent add constraint unique index uni_idx_id(id)
创建引用表
create table child(c_id int,msg varchar(10), foreign key(c_id) references parent(id) on delete cascade on update cascade) engine=innodb

如何配置innodb buffers
innodb 使用一个缓存池来缓存一些innodb表的信息,buffer库主要是存放一些经常访问磁盘的数据,从而可以有效的降低磁盘I/O。可以改变innodb_buffer_pool_size 来设置buffer的大小,innodb_buffer_pool_size 单位是bit 主要存放,缺省8M,缓存数据和索引;理论上是越大越好,可以设置为物理内存的80%,但不要太大,太大之后会是系统内存不足,被迫使用交换分区而降低性能;
innodb_additional_men_pool_size 单位是bit ,缺省1M,主要存放数据字典的信息和内部的数据结构,比如一些表描述信息。当数据库在运行的过程中,如果发现附加池的空间不够了,他就会向操作系统申请内存,同时会向errlog里面写入一条警告信息。
innodb_max_dirty_pages_pct  是整形,范围1-100 缺省是90;当buffer_pool中的数据被修改之后,他就变成了脏数据,当这些脏数据达到一定比例的时候,就会将这些数据同步到磁盘,这个参数就是控制这个比例的;

你可能感兴趣的:(数据库,mysql,职场,休闲,mysql。InnoDB)