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不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响。
相关推荐
reasonsummer1 小时前
【办公类-146-05】20260901《一分园、二分园四大教育》(优化版:标题excle+复制AI文字+Python占位符录入)
开发语言·数据库·c#
2301_800954991 小时前
关系型数据库与非关系型数据库详解
数据库·nosql
崖边看雾1 小时前
MySQL——SQL 经典练习题:学生选课成绩查询(附详细注释)
大数据·数据库·sql·mysql
众壹新能源科技1 小时前
经营口径与运维口径不一致时,发电量报表怎么对账
运维·数据库·人工智能
jyOverQ1 小时前
MySQL 索引为什么能加快查询?B+Tree 到底是什么?
数据库·mysql
天天进步20152 小时前
Pixelle-Video 源码解析 #17:TTS 语音生成:Edge-TTS、Index-TTS 如何接入?
前端·数据库
鸽芷咕2 小时前
异构数据同步,凭什么敢说数据不丢?——拆解金仓KFS的全周期一致性校验
数据库
海浪仙人掌2 小时前
账龄分析的定义是什么?账龄分析有什么作用?
数据库
ACP广源盛139246256732 小时前
M6/M5 Pro Mac mini 端侧 AI 落地@ACP#IX6024 PCIe2.0 交换芯片在轻量化 AI 服务中的机会与应用场景
大数据·数据库·人工智能·嵌入式硬件·macos·开源