2、innodb存储引擎
>=5.5 版本中默认的存储引擎,MySql推荐使用的存储引擎。提供事务,行级锁定,存储引擎。
事务安全型存储引擎,更加注重数据的完整性和安全性。
(1)存储格式:
innodb存储引擎 每个数据表有单独的“结构文件” *.frm
数据,索引集中存储,存储于同一个表空间文件中ibdata1。
ibdata1就是InnoDB表的共享存储空间,默认innodb所有表的数据都在一个ibdata1里。
创建innodb表后,存在文件如下:
create table t1(id int,name varchar(32)) engine innodb charset utf8;
.frm表结构文件。
innodb表空间文件:存储innodb的数据和索引。
ibdata1
默认,所有的 innodb表的数据和索引在同一个表空间文件中,
通过配置可以达到每个innodb的表对应一个表空间文件。
show variables like 'innodb_file_per_table%'
开启该配置:
set global innodb_file_per_table=1;
创建一个innodbd的表进行测试使用。
查看表对应的文件自己独立的“数据/索引”文件
系统配置参数innodb_file_per_table后期无论发生任何变化,t2都有自己独立的“数据/索引”文件。
注意:相比较之下,使用独占表空间的效率以及性能会更高一点。
注意:innodb数据表不能直接进行文件的复制/粘贴进行备份还原,可以使用如下指令:
备份数据库的指令
> mysqldump -uroot -p密码 数据库名字 > f:/文件名称.sql [备份]
> mysql -uroot -p密码 数据库 < f:/文件名称.sql [还原]
(2)数据是按照主键顺序存储。
该innodb数据表,数据的写入顺序 与 存储的顺序不一致,需要按照主键的顺序把记录摆放到对应的位置上去,速度比Myisam的要稍慢。
create table t3(
id int primary key auto_increment,
name varchar(32) not null
)engine innodb charset utf8;
insert into t3 values(223,'刘备'),(12,'张飞'),(162,'张聊'),(1892,'网飞');
给innodb数据表写入4条记录信息(主键id值顺序不同)
插入时做排序工作,效率低。
(3)并发处理:
擅长处理并发的。
行级锁定(row-level locking),实现了行级锁定,在一定情况下,可以选择行级锁来提升并发性,也支持表级锁定,innodb根据操作选择。
锁机制:
当客户端操作表(记录)时,为了保证操作的隔离性(多个客户端操作不能相互影响),通过加锁来处理。
操作方面:
读锁:读操作时增加的锁,也叫共享锁,S-lock。特征是所有人都只可以读,只有释放锁之后才可以写。
写锁:写操作时增加的锁,也叫独占锁或排他锁,X-lock。特征,只有锁表的客户可以操作(读写)这个表,其他客户读都不能读。
办公室开会锁上门。
锁定粒度(范围)
表级锁:开销小,加锁快,发生锁冲突的概率最高,并发度最低。myisam和innodb都支持。
行级锁:开销大,加锁慢,发生锁冲突的概率最低,并发度也最高。innodb支持