MySQL存储引擎

真实存取数据的功能为存储引擎的功能。因此在MySQL server完成了查询优化后,只需按照生成的执行计划调用底层存储引擎提供的API,获取数据后返回客户端即可。

功能:接收上层传下来的指令,然后对表中的数据进行提取或写入操作。

  • 查看存储引擎show engines;或者show engines \G;

1、设置表的存储引擎

c 复制代码
CREATE TABLE 表名{
建表语句;
}ENGINE=存储引擎名称;
eg:create table emp(id int) engine=innodb; # 创建表的时候指定其存储引擎

修改表的存储引擎:ALTER TABLE 表名 ENGINE =存储引擎名称;eg:alter table emp4 engine=myisam; # 修改数据表的存储引擎

2、存储引擎的特点

2.1、 InnoDB 引擎的特点(具备外键支持功能的事务存储引擎)

InnoDB是MySQL的 默认事务型引擎 ,它被设计用来处理大量的短期(short-lived)事务。可以确保事务的完整提交(Commit)和回滚(Rollback);InnoDB支持外键;InnoDB是 为处理巨大数据量的最大性能设计 。

MySQL InnoDB 外键 :只有 InnoDB 支持外键;外键列、被引用列数据类型必须完全一致;被引用列必须是主键 / 唯一索引;外键列建议建索引。

1.父表(主表,被别人引用)

c 复制代码
`CREATE TABLE 父表名 (
    父主键列 INT NOT NULL AUTO_INCREMENT,
    -- 其他字段
    PRIMARY KEY (父主键列)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;`

2.子表(从表,持有外键)

c 复制代码
CREATE TABLE 子表名 (
    子表主键 INT NOT NULL AUTO_INCREMENT,
    外键列 INT NOT NULL, -- 和父主键类型一模一样
    -- 其他业务字段

    PRIMARY KEY(子表主键),
    -- 【必写】给外键建立索引,InnoDB推荐,避免性能问题
    KEY idx_子表_外键列 (外键列),

    -- ========== 外键核心语句 ==========
    CONSTRAINT 外键约束名 
    FOREIGN KEY (外键列) 
    REFERENCES 父表名(父主键列)
    ON DELETE 行为 
    ON UPDATE 行为
    -- =================================
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

eg

c 复制代码
-- 1. 父表:部门表 department(主表,被引用)
DROP TABLE IF EXISTS employee;
DROP TABLE IF EXISTS department;

CREATE TABLE department (
    dept_id INT NOT NULL AUTO_INCREMENT COMMENT '部门主键',
    dept_name VARCHAR(50) NOT NULL COMMENT '部门名称',
    PRIMARY KEY (dept_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='部门父表';

-- 2. 子表:员工表 employee,外键关联部门
CREATE TABLE employee (
    emp_id INT NOT NULL AUTO_INCREMENT COMMENT '员工主键',
    emp_name VARCHAR(30) NOT NULL COMMENT '员工姓名',
    dept_id INT NOT NULL COMMENT '外键,所属部门id',

    PRIMARY KEY (emp_id),
    -- 外键字段建立索引
    KEY idx_emp_deptid (dept_id),

    -- 外键核心约束
    CONSTRAINT fk_emp_dept
    FOREIGN KEY (dept_id) REFERENCES department(dept_id)
    ON DELETE RESTRICT   -- 子表有员工,则禁止删除部门
    ON UPDATE CASCADE    -- 修改部门主键dept_id,员工表dept_id自动同步更新
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='员工子表';

2.2、MyISAM 引擎(主要的非事务处理存储引擎)

  • MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM 不支持事务、行级锁、外键 ,有一个毫无疑问的缺陷就是崩溃后无法安全恢复 。 优点是访问的速度快。

3、 InnoDB和MyISAM的对比

  1. MYISAM不支持外键和事务,但INNOB支持。
  2. MYISAM表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作,但INNOB行锁,操作时只锁某一行,不对其它行有影响, 适合高并发的操作。
  3. MYISAM只缓存索引,不缓存真实数据,但INNOB不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响。
相关推荐
摇滚侠3 小时前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 12
java·数据库·笔记
川石课堂软件测试3 小时前
学习软件测试需掌握的一些知识
数据库·python·sql·功能测试·网络协议·mysql·http
2501_937767164 小时前
自建 SQL 数据库定时备份踩坑复盘与落地思路
数据库·sql
silvamux_5 小时前
10款模型写种草笔记:可发布性、返工来源与成本数据缺口复盘
java·数据库·笔记
I Am a robert girl7 小时前
从 GameHorizon 拆解多时间尺度游戏评测:数据管线、离线基准与在线回放的三层设计
数据库·游戏·多时间尺度·数据管线·游戏评测·离线基准·在线回放
躺柒7 小时前
读数据安全架构设计与实践17安全架构案例(下)
数据库·安全·零信任·安全架构·防火墙·无边界
SelectDB7 小时前
实时更新排错现场:导入了却查到旧数据,和 FINAL 越加越慢的两条路
大数据·数据库·数据分析
SelectDB8 小时前
拿 Planet 的账单一行行对下来,我总结出三个可自查的校验点
大数据·数据库·数据分析
SelectDB8 小时前
Apache Doris + Vane:让多模态数据进入业务分析
大数据·数据库·数据分析
pjj1985410 小时前
ClickHouse 与 Doris 数据库技术梳理:看懂分析型数据库
数据库·clickhouse