MySQL的存储引擎
什么是存储引擎?
关系数据库表是用于存储和组织信息的数据结构,可以将表理解为由行和列组成的表格,类似于Excel的电子表格的形式。有的表简单,有的表复杂,有的表根本不用来存储任何长期的数据,有的表读取时非常快,但是插入数据时很差;而我们在实际开发过程中,就可能需要各种各样的表,不同的表,就意味着存储不同类型的数据,数据的处理上也会存在着差异,那么。对于MySQL来说,它提供了很多种类型的存储引擎,我们可以根据对数据处理的需求,选择不同的存储引擎,从而最大限度的利用MySQL强大的功能。
存储引擎的类型
MyISAM、InnoDB 、Memory、CSV等9种
MyISAM与InnoDB类型主要区别
名称 |
InnoDB |
MyISAM |
事务处理 |
支持 |
不支持 |
数据行锁定 |
支持 |
不支持 |
外键约束 |
支持 |
不支持 |
全文索引 |
不支持 |
支持 |
表空间大小 |
较大,约2倍 |
较小 |
MyISAM表是独立于操作系统的,这说明可以轻松地将其从Windows服务器移植到Linux服务器;每当我们建立一个MyISAM引擎的表时,就会在本地磁盘上建立三个文件,文件名就是表明。例如,我建立了一个MyISAM引擎的tb_Demo表,那么就会生成以下三个文件:
1.tb_demo.frm,存储表定义;
2.tb_demo.MYD,存储数据;
3.tb_demo.MYI,存储索引。
MyISAM表无法处理事务,这就意味着有事务处理需求的表,不能使用MyISAM存储引擎。MyISAM存储引擎特别适合在以下几种情况下使用:
1.选择密集型的表。MyISAM存储引擎在筛选大量数据时非常迅速,这是它最突出的优点。
2.插入密集型的表。MyISAM的并发插入特性允许同时选择和插入数据。例如:MyISAM存储引擎很适合管理邮件或Web服务器日志数据。
InnoDB是一个健壮的事务型存储引擎,这种存储引擎已经被很多互联网公司使用,为用户操作非常大的数据存储提供了一个强大的解决方案。一般电脑上安装的MySQL版,InnoDB就是作为默认的存储引擎。InnoDB还引入了行级锁定和外键约束,在以下场合下,使用InnoDB是最理想的选择:
1.更新密集的表。InnoDB存储引擎特别适合处理多重并发的更新请求。
2.事务。InnoDB存储引擎是支持事务的标准MySQL存储引擎。
3.自动灾难恢复。与其它存储引擎不同,InnoDB表能够自动从灾难中恢复。
4.外键约束。MySQL支持外键的存储引擎只有InnoDB。
5.支持自动增加列AUTO_INCREMENT属性。
一般来说,如果需要事务支持,并且有较高的并发读取频率,InnoDB是不错的选择。
<适用场合
• 使用MyISAM: 不需事务,空间小,以查询访问为主
• 使用InnoDB: 多删除、更新操作,安全性高,事务处理及并发控制>
查看当前默认存储引擎
语法
SHOW VARIABLES LIKE ‘storage_engine%’;
修改存储引擎:修改my.ini配置文件
设置表的存储引擎
语法:
CREATE TABLE 表名(
#省略代码
)ENGINE=存储引擎;
示例:
CREATE TABLE `myisam` (
id INT(4)
)ENGINE=MyISAM;
数据表的存储位置
MyISAM类型表文件
*.frm:表结构定义文件
*.MYD:数据文件
*.MYI:索引文件
InnoDB类型表文件
*.frm:表结构定义文件
ibdata1文件
注意:
存储位置->因操作系统而异,可查my.ini
datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/" innodb_data_home_dir="D:/MySQL Datafiles/" |
DML语句——插入单条数据记录
语法:
INSERT INTO 表名 [(字段名列表)] VALUES (值列表); |
注意:
1.字段名是可选的,如省略则依次插入所有字段
2.多个列表和多个值之间使用逗号分隔
3.值列表和字段名列表一一对应
4.如插入的是表中部分数据,字段名列表必填
示例:
INSERT INTO `student`(`loginPwd`,`studentName`,`gradeId`,`phone`,`bornDate`) VALUES('123','黄小平',1,'13956799999','1996-5-8'); |
DML语句——插入多条数据记录
语法:
INSERT INTO 新表(字段名列表) VALUES(值列表1),(值列表2),……,(值列表n); |
示例:
INSERT INTO `subject`(`subjectName`,`classHour`,`gradeID`) VALUES('Logic Java',220,1),('HTML',160,1),('Java OOP',230,2); |
< 为避免表结构发生变化引发的错误,建议插入数据时写明具体字段名!>
DML语句——将查询结果插入新表
编写SQL语句实现从学生表提取姓名、手机号两列数据存储到通讯录表中</