存储引擎就是如何存储数据、如何为数据建立索引和如何更新、查询数据等技术的实现方法。
mysql默认支持多种存储引擎,以适用于不同领域的数据库应用需要,用户可以通过选择使用不同的存储引擎提高应用的效率,提供灵活的存储。
- 查看当前的存储引擎
show variables like '%storage_engine'; --查看当前mysql默认的存储引擎
show engines; --查看当前mysql版本支持的存储引擎
-
修改mysql默认的存储引擎
– 关闭mysql服务
–找到mysql安装目录下的my.ini文件
– 找到default-storage-engin = INNODB将其改为其他引擎
–启动mysql服务
-
mysql常用的存储引擎
功能 | myisam | memory | innodb | archive |
---|---|---|---|---|
存储限制 | 256T | RAM | 64T | None |
支持事务处理 | No | No | Yes | No |
支持全文索引 | Yes | No | No | No |
支持数索引 | Yes | Yes | Yes | No |
支持哈希索引 | No | Yes | No | No |
支持数据缓存 | No | N/A | Yes | No |
支持外键约束 | No | No | Yes | No |
1. InnoDB
事务性数据库的首选引擎,支持事务安全表(ACID),支持行级锁定和外键约束,innoDB是mysql默认的存储引擎,使用B-tree索引结构。
其特点有:
- 支持事务处理;具有提交、回滚、崩溃恢复能力。
- InnoDB是为处理巨大数据量的最大性能设计,它的cpu效率比其他基于磁盘的关系型数据库引擎要高。
- InnoDB自带缓冲池,可以将数据和索引缓存在内存中。
- 支持外键完整性约束。
- 支持行级锁定。
- 被用在众多高性能需求的大型数据库站点上。
2. MyIsam
MyIsam基于Isam引擎,并对齐扩展。是在web,数据仓储和其他应用场景下最常用的引擎之一。它拥有较高的插入、查询速度,但不支持事务处理。
其特点有:
- 能更好地支持大文件
- 当删除、更新、插入混用时,产生更少碎片。
- 每个MyIsam表最大索引数是64,但可以通过重新编译来改变,每个索引最大的列数是16。
- 最大的键长度是1000字节。
- Blob和txt列可以被索引。
- null被允许存在于索引列中,这个值占每个键的0~1个字节。
- 所有数字键值以高字节优先被存储以允许一个更高的所有压缩。
- MyIsam类型表的auto_increment列更新比InnoDB类型的要更快。
- 可以将数据文件和索引文件存放在不同目录。
- 每个字符列可以有不同的字符集。
- 有varchar的表可以固定或动态记录长度,
- varchar和char列可以达到64K。
- 只支持表锁
3. Memory
是存储引擎将表中的数据存储到内存中,为查询和引用其他表的数据提供快速访问。
-
存储引擎的选择
一般对于插入和并发性能要求较高的,或者需要外键,或需要事务支持的情况,需要选择InnoDB,插入较少,查询较多的场景则优先考虑MyIsam。
-
使用引擎
一般在建表的时候添加引擎:
create table table_name (name char(10) )engine=MyIsam charset= utf8--修改存储引擎 alter table table_name enging = new_enging;
-
InnoDB和MyIsam在文件存储方面的区别
-
InnoDB将一张表存储为两个文件
- demo.frm ==>存储表的结构和索引,frm文件可以在客户端中使用desc命令读取
- demo.ibd ==>存储数据,ibd存储是有限的,存储不足自动创建ibd1,ibd2
- InnoDB的文件创建在对应的数据库中,不能任意移动
-
MyIsam将一张表存储为三个文件
- demo.frm ==>存储表的结构
- demo.myd ==>存储数据
- demo.myi ==>存储表的索引
- MyIsam的文件可以任意移动
-
-
外键
MySQL 中的外键用于建立两个表之间的关联关系,确保数据的一致性和完整性。外键是一个表中的一个或多个字段,它与另一个表的主键相关联。
-
定义外键
在创建表的时候,可以通过
FOREIGN KEY
约束来定义外键。例如:CREATE TABLE orders (order_id INT AUTO_INCREMENT,customer_id INT,order_date DATE,PRIMARY KEY (order_id),FOREIGN KEY (customer_id) REFERENCES customers(customer_id) );
-
使用add添加外键
alter table table1 add constraint foreign_key_name foreign key (id) reference table2(id);
-
删除外键
ALTER TABLE orders DROP FOREIGN KEY fk_customer_id;
-
检查外键约束
SHOW CREATE TABLE table_name;
-
外键和索引
外键字段通常会被自动索引,以提高关联查询的性能
-
外键和事务
在事务中,外键约束确保数据的一致性,如果事务中的操作违反了外键约束,事务将被回滚。
-
外键和存储引擎
不是所有的mysql存储引擎都支持外键,myisam存储引擎不支持外键,innoDB则支持。
-
外键和性能
外键可以增加数据的一致性,但也可能影响性能,特别是在有大量数据和复杂关联的情况下,因此,在设计数据库时需要权衡外键的使用。
-
数据库的foreign_key_checks系统变量
使用外键时,需要确保数据库的foreign_key_checks系统变量是开启的,否则外键约束可能不会生效,可以通过以下命令查看和设置改变量:
-- 查看当前设置 SHOW VARIABLES LIKE 'foreign_key_checks';-- 设置为 ON SET GLOBAL foreign_key_checks = 1;
-