数据库引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据库引擎进行创建、查询、更新和删除数据,不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。
打开cmd,输入cmd -u root -p,输入密码进入
- 创建数据库 create database demo1;
- 查询所有的当前数据库连接的库 show databases;
- 进入其中某个库,use demo1;
- 查看其中所有的表 show tables;
- 查询当前表的所有的字段 show create table personyhb;
- 查询自己的数据库用的引擎 SHOW ENGINES;
有InnoDB、MRG MYISAM、MEMORY、BLACKHOLE、MyISAM、CSV、archive、performance_schema、federated
可以看出数据库为我们提供了非常多的存储引擎,从表中看出,InnoDB的Support列是default,表明InnoDB是默认的数据库引擎,不过Mysql对于多引擎有很好的兼容 ,一个数据库服务器上不同的服务器上完全可以使用不同的数据引擎,甚至一个数据库中的多个表可以使用多个不同引擎。
两者之间的差异:
InnoDB----Support transactions,row-level lockings and foreign keys
(1)InnoDB支持事务,MyISAM不支持,对于InnoDB每条SQL语句都默认封装成事务提交,这样就会影响速度,,优化速度的方式就是将多条SQL语句放在begin和end之间,组成一个事务。
(2) InnoDB支持外键,而MyISAM不支持
(3)InnoDB不支持全文索引,而MyISAM支持全文索引,查询效率上MyISAM更高。
所以如果一个表修改要求比较高的事务处理,可以选择InnoDB。数据库中可以将查询要求比较高的表选择MyISAM存储。如果该数据库需要一个用于查询的临时表,甚至可以考虑选择MEMORY存储引擎。
二.存储引擎原理
1. InnoDB、MylSAM两者引擎所用的索引的数据结构都是B+树,不过区别在于:
MylSAM中的B+树的数据结构存储的内容是实际数据的地址值,它的索引和实际数据是分开的,只不过使用索引指向实际数据,这种索引的模式被成为非聚集索引。
InnoDB中B+树的数据结构存储的都是实际的数据,这种索引称为聚集索引。
什么是索引:
唯一索引:唯一索引不允许具有相同的索引值
主键索引:是唯一索引的特殊类型,为表定义一个主键,将自动创建主键索引。主键索引要求主键中每个值是唯一的,并且不能为空。
聚集索引(clustered)表中各行的物理顺序与键值的逻辑(索引)顺序相同,每个表只能有一个。
非聚集索引(Non-clustered):非聚集索引指定表的逻辑顺序,数据存储在一个位置,索引存储在另一个位置,索引中包含数据存储位置的一个指针,可以有多个,小于249个。
MyISAM:它的索引文件仅仅保存数据记录的地址。
MyISAM 中索引检索的算法为首先按照 B+Tree 搜索算法搜索索引,如果指定的 Key 存在,则取出其 data 域的值,然后以 data 域的值为地址,读取相应数据记录。
由于 InnoDB 利用的数据库主键作为索引 Key,所以 InnoDB 数据表文件本身就是主索引,且因为 InnoDB 数据文件需要按照主键聚集,所以使用 InnoDB 作为数据引擎的表需要有个主键,如果没有显式指定的话 MySQL 会尝试自动选择一个可以唯一标识数据的列作为主键,如果无法找到,则会生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整形。