MySQL存储引擎
MySQL存储引擎的概念
•MySQL中的数据用各种不同的技术存储在文件中,每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力,这些不同的技术以及配套的功能在 MySQL中称为存储引擎
•存储引擎就是 MySQL将数据存储在文件系统中的存储方式或者存储格式
•目前 MySQL常用的两种存储引擎
MyISAM
InnoDB
•MySQL存储引擎是 MySQL数据库服务器中的组件,负责为数据库执行实际的数据I/O操作
•MySQL系统中,存储引擎处于文件系统之上,在数据保存到数据文件之前会传输到存储引擎,之后按照各个存储引擎的存储格式进行存储
MyISAM 特点
不支持事务,也不支持快键
表级锁定形式,数据在更新时锁定整个表
数据库在读写过程中相互阻塞,会在数据写入的过程阻塞用户数据的读取,也会在数据读取的过程中阻塞用户的数据写入
可通过key_buffer_size来设置缓存索引,提高访问性能,减少磁盘I/O的压力,但缓存只会缓存索引文件,不会缓存数据
釆用 MyISAM存储引擎数据单独写入或读取,速度过程较快且占用资源相对少
MyISAM存储引擎它不支持外键约束,只支持全文索引
每个 MyISAM在磁盘上存储成三个文件,每一个文件的名字以表的名字开始,扩展名指出文件类型
MyISAM在磁盘上存储的文件
.frm文件存储表定义
数据文件的扩展名为.MYD( MYData)
索引文件的扩展名是.MYI( MYIndex)
MyISAM支持的存储格式
静态表
动态表
压缩表
InnoDB 特点
支持事务:支持4个事务隔离级别
行级锁定,但是全表扫描仍然会是表级锁定
读写阻塞与事务隔离级别相关
具有非常高效的缓存特性:能缓存索引,也能缓存数据
表与主键以簇的方式存储
支持分区、表空间,类似 oracle数据库
支持外键约束,5.5以前不支持全文索引,5.5版本以后支持全文索引
对硬件资源要求还是比较高的场合
存储引擎修改与查看(本次使用的是MySQL5.6版本)
查看系统支持的存储引擎
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)
查看表存储引擎
//这边先进入库,随便创建一张表,我创建的表名叫:chengji
mysql> show create table chengji \G
*************************** 1. row ***************************
Table: chengji
Create Table: CREATE TABLE `chengji` (
`id` int(4) NOT NULL AUTO_INCREMENT,
`name` varchar(10) NOT NULL,
`address` varchar(50) DEFAULT 'nanjing',
`age` int(3) NOT NULL,
`hobby` int(2) NOT NULL,
PRIMARY KEY (`id`),
KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
修改表的存储引擎
mysql> alter table chengji engine=myisam;
Query OK, 6 rows affected (0.01 sec)
Records: 6 Duplicates: 0 Warnings: 0
修改默认存储引擎
mysql> show variables like '%storage_engine%';
+----------------------------+--------+
| Variable_name | Value |
+----------------------------+--------+
| default_storage_engine | InnoDB |
| default_tmp_storage_engine | InnoDB |
| storage_engine | InnoDB |
+----------------------------+--------+
3 rows in set (0.00 sec)
mysql> quit
Bye
[root@localhost ~]# vim /etc/my.cnf
在mysqld模板下面加上下面这句话
default-storage-engine = MyISAM
[root@localhost ~]# systemctl restart mysqld
进入Mysql
mysql> show variables like '%storage_engine%';
+----------------------------+--------+
| Variable_name | Value |
+----------------------------+--------+
| default_storage_engine | MyISAM |
| default_tmp_storage_engine | InnoDB |
| storage_engine | MyISAM |
+----------------------------+--------+
3 rows in set (0.00 sec)