1、存储引擎

数据库底层饿软件组织,创建,查询,更新,删除数据等借助于存储引擎

插件式存储引擎,可插拔。

存储机制,索引技巧,锁定粒度等功能。选择不同的存储引擎。

Mysql5.5默认InnoDB

1、mysql 中支持哪些存储引擎

show engines;

2、存储引擎对比

mysql存储引擎插件的功能 mysql8 存储引擎_数据库

  • InnoDB
    Mysql 5.5 以后默认的存储引擎。事务型数据库。
    1、数据底层的存储:数据表文件—>frm(表结构)文件和.ibd(数据和索引)文件
    2、事务:支持热备,数据完整性要求比较高,比较好的选择
    3、锁的粒度:采用MVVC(多版本并发)支持高并发操作,支持四种事物隔离界别,行锁。
    4、储存特点:采用聚簇索引
    5、场景
1、更新和查询频繁,并发
2、要求事物
3、外键约束
  • MyISAM
    1、存储形式:数据表文件---->.frm和.MYD和MYI(数据和索引分离)
    2、事务:不支持
    3、存储特点:非聚簇
    4、其他:全文检索,压缩,延迟更新索引等
    5、场景:
1、count 计算
2、查询
  • Memory

数据保存在内存中,增删改查效率高,但是不能持久化

不支持事务,表级锁。

3.如何设置存储引擎

/etc/my.cnf   ----一般安装的位置

修改存储引擎
default_storage_engine = INNODB   (需重启服务)

创建表时修改存储引擎:
creat table tname(col) engine = INNODB; (单单是一张表)

查看某张表的基本信息:
show tables status from dbname where name = tname \G;
show create table 表名 \G; ---也可以查看

如果你MAC,而且用homebrew 安装默认位置:

mysql存储引擎插件的功能 mysql8 存储引擎_MySQL_02

2、索引

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可提高数据库中特定数据的查询速度。

根据存储引擎定义每个表的最大索引数和最大索引长度。所有存储引擎支持每个表至少16个索引,总索引长度至少256字节。大多数存储引擎有高度的限制。MySQL 中索引的存储类型有两种:BTREE 和 HASH ,具体和表的存储引擎相关;MyISAM 和 InnoDB 存储引擎只支持BTREE索引;MEMORY/HEAP 存储引擎可以支持HASH 和BTREE索引。

1、索引分类

  • 普通索引和唯一索引
  • 单列索引和组合索引
  • 全文索引
  • 空间索引

2、创建索引

CREATE TABLE table_name [col_name data_type]
[UNIQUE | FULLTEXT | SPATIAL] [INDEX | KEY] [index_name] (col_name [length]) [ASC | DESC]
---UNIQUE、FULLTEXT和SPATIAL 为可选参数,分别表示为唯一索引、全文索引和空间索引;INDEX 和 KEY 为同义词,用来指定创建索引;col_name 为需要创建索引的字段列,该列必须从数据表中定义的多个列中选择;index_name 指定索引的名称,为可选参数,如果不指定,那么MySQL 默认col_name 为索引值;length 为可选参数,表示索引的长度,只有字符串类型的字段才能指定索引长度;ASC或DESC 指定升序或者降序的索引值存储。
---唯一索引,关键字取上述 UNIQUE 即可。
---单列索引和组合索引,只需要创建表的时候,INDEX index_name(字段名1,...,...)

3、创建全文索引

FULLTEXT 全文索引可以用于全文搜索。只有MySQL存储引擎支持FULLTEXT 索引,并且只为CHAR、VARCHAR 和 TEXT 列创建索引。索引总是对整个列进行,不支持局部索引。

  • 因为MySQL 8.0 默认的存储引擎为InnoDB,所以在这里创建表时需要修改表的存储引擎为MyISAM,不然创建索引会出错。
SHOW CREATE table_name \G;
----可以查看表结构

4、创建空间索引

  • 注意创建时指定空间类型字段值得非空约束,并且表的存储引擎为MyISAM。

5、在已经存在的表上创建索引

ALTER TABLE table_name ADD [UNIQUE | FULLTEXT | SPATIAL] [INDEX | KEY] [index_name] (col_name [length],...) [ASC | DESC]
---- 与创建索引的语法差不多
例子:
ALTER TABLE book ADD INDEX bkidx(bookname(30));
---在bookname 字段上添加索引,索引名为bkidx

6、删除索引

ALTER TABLE table_name DROP INDEX index_name;
或者使用
DROP INDEX index_name ON table_name;
下面有几个注意点:
1、添加AUTO_INCREMENT 约束字段的唯一索引不能被删除。
2、删除表中的列时,如果要删除的列为索引的组成部分,则该列也会从索引中删除。如果组成索引的所有列都被删除了,则整个索引将被删除。