MySQL相关问题-1

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: MySQL支持多种数据引擎,如InnoDB(支持事务、行级锁、外键及聚簇索引)、MyISAM(查询快、仅支持表级锁及非聚簇索引)、Memory(数据存储于内存,适合临时数据)和Archive(高效压缩,适合归档数据)。不同引擎在事务、锁机制、索引类型及适用场景上存在差异。

Q:MySQL支持的数据引擎有哪些?有什么区别

  1. InnoDB(默认引擎)(一诺DB)
  1. 支持 事务(ACID 特性),通过 COMMIT/ROLLBACK 保证数据一致性。
  2. 支持 行级锁(仅锁定修改的行,减少锁冲突)和 表级锁。
  3. 支持 外键约束,维护表之间的关联关系。
  4. 采用 聚簇索引(数据和索引存储在一起),查询效率高。
  5. 具备 崩溃恢复能力(通过 redo log 和 undo log 实现)。
  1. MyISAM(麦爱山姆)
  1. 不支持事务和外键。
  2. 只支持 表级锁(写入时锁定整张表,并发写入性能差)。
  3. 采用 非聚簇索引(数据和索引分开存储),查询速度快(尤其全表扫描)。
  4. 支持 全文索引(MySQL 5.6 前仅 MyISAM 支持)。
  5. 存储格式简单,占用空间小,备份恢复方便。
  1. Memory(HEAP)(灭摸瑞)
  1. 数据 全部存储在内存中,读写速度极快(适用于临时数据)。
  2. 支持 哈希索引(查询速度快,但不支持范围查询)和 B 树索引。
  3. 不支持事务、外键,表级锁。
  4. 数据在 MySQL 服务重启或崩溃后丢失(内存易失性)。
  1. Archive(哦凯服)
  1. 专为 数据归档 设计,压缩比极高(节省存储空间)。
  2. 只支持 INSERT 和 SELECT 操作,不支持 UPDATE、DELETE、索引(除自增主键)。
  3. 行级锁,适合批量插入。

<!--br {mso-data-placement:same-cell;}--> td {white-space:nowrap;border:0.5pt solid #dee0e3;font-size:10pt;font-style:normal;font-weight:normal;vertical-align:middle;word-break:normal;word-wrap:normal;}

特性 InnoDB MyISAM Memory Archive
事务支持
外键支持
锁粒度 行级锁 表级锁 表级锁 行级锁
索引类型 B-Tree(聚簇) B-Tree(非聚簇) 哈希 / B-Tree B-Tree
数据存储 磁盘 磁盘 内存 磁盘(压缩)
崩溃恢复
适用场景 事务、高并发 只读、全文搜索 临时数据、高速查询 历史归档


Q:数据库的三范式

  1. 第一范式(1NF):属性不可拆分(列)
  2. 第二范式(2NF):在满足第一范式的情况下,不能存在部分依赖,既非主键属性必须完全依赖于主键,不能依赖部分主键
  3. 第三范式(3NF):在满足第二范式的情况下,不能出现依赖传递,例如:C(非主属性)-->B(非主属性)-->A(主属性)

1NF的情况:

在需求分析后,contact(属性)可拆分成电话号码和地址俩列,不满足1NF条件

<!--br {mso-data-placement:same-cell;}--> td {white-space:nowrap;border:0.5pt solid #dee0e3;font-size:10pt;font-style:normal;font-weight:normal;vertical-align:middle;word-break:normal;word-wrap:normal;}

id name sex_code sex_desc contact
1 张三 0 17835201234_山西省运城市xx村
2 李四 0 17735204567_山西省吕梁市yy村
3 王五 1 18835207890_山西省太原市zz村

2NF的情况:

kc_name依赖于kc_id而不依赖于stu_id,此时的kc_id和stu_id属于联合主键,所以不满足2NF的情况

<!--br {mso-data-placement:same-cell;}--> td {white-space:nowrap;border:0.5pt solid #dee0e3;font-size:10pt;font-style:normal;font-weight:normal;vertical-align:middle;word-break:normal;word-wrap:normal;}

stu_id kc_id score kc_name
1 1011 85 高数3-1
1 1022 79 计算机组成原理
2 1011 59.9 高数3-1

3NF的情况:

sex_desc依赖于sex_code,而sex_code依赖于id,这出现了依赖传递,不符合3NF

<!--br {mso-data-placement:same-cell;}--> td {white-space:nowrap;border:0.5pt solid #dee0e3;font-size:10pt;font-style:normal;font-weight:normal;vertical-align:middle;word-break:normal;word-wrap:normal;}

id name sex_code sex_desc phone address
1 张三 0 17835201234 山西省运城市xx村
2 李四 0 17735204567 山西省吕梁市yy村
3 王五 1 18835207890 山西省太原市zz村


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
Java 存储
线程池的核心参数有哪些?
线程池七大核心参数:核心/最大线程数、线程保持时间及单位、阻塞队列、线程工厂与拒绝策略。
528 79
|
3月前
|
SQL 缓存 Java
MyBatis场景面试题
MyBatis与MyBatisPlus均属ORM框架,前者擅长复杂SQL及动态查询,后者封装API简化单表操作。常用XML标签如if、foreach提升SQL灵活性。MyBatis支持一级(SqlSession级)与二级(NameSpace级)缓存,提升查询效率。#{}防SQL注入,${}用于动态表名等场景。
205 62
|
3月前
|
存储 SQL 关系型数据库
MySQL 核心知识与索引优化全解析
本文系统梳理了 MySQL 的核心知识与索引优化策略。在基础概念部分,阐述了 char 与 varchar 在存储方式和性能上的差异,以及事务的 ACID 特性、并发事务问题及对应的隔离级别(MySQL 默认 REPEATABLE READ)。 索引基础部分,详解了 InnoDB 默认的 B+tree 索引结构(多路平衡树、叶子节点存数据、双向链表支持区间查询),区分了聚簇索引(数据与索引共存,唯一)和二级索引(数据与索引分离,多个),解释了回表查询的概念及优化方法,并分析了 B+tree 作为索引结构的优势(树高低、效率稳、支持区间查询)。 索引优化部分,列出了索引创建的六大原则
|
3月前
|
前端开发 Java Spring
SpringMvC的执行流程
客户端发送HTTP请求,Spring MVC的前端控制器DispatcherServlet接收请求并调用HandlerMapper进行映射,返回包含Controller和拦截器的执行链。控制器执行逻辑后返回ModelAndView,前端控制器再调用ViewResolver解析视图并渲染HTML页面,最终返回给客户端。
212 0
|
3月前
|
SQL 前端开发 Java
Spring的三层架构
Spring MVC 三层架构(表现层、业务层、数据访问层)通过职责分离提升代码可维护性与扩展性。表现层(Controller)接收请求并返回响应;业务层(Service)处理核心逻辑与事务;数据访问层(Mapper)负责数据库操作与数据映射,共同实现高效、清晰的系统开发。
249 0
|
3月前
|
Java Spring 容器
DI依赖注入的几种手段
本内容介绍了依赖注入的四种方式:构造器注入、接口注入、Setter注入和注解注入,并重点比较了Spring中的@Autowired与Java标准注解@Resource的区别,包括来源和依赖查找策略。
207 0
|
3月前
|
存储 算法 索引
HashMap的实现原理
HashMap基于哈希算法实现,采用链表散列结构(数组+链表/红黑树)。JDK1.8前使用拉链法解决冲突,将冲突元素存入链表。JDK1.8后,当链表长度超过8时,转化为红黑树以提升查找效率;当元素数小于6时,退化为链表。通过key的hashCode计算索引,put时若key相同则覆盖,不同则添加到链表或树中。get时通过hash值定位并判断key获取对应值。
217 0
|
2月前
|
SQL Arthas 关系型数据库
MySQL相关问题
当SQL语句执行缓慢时,可通过Skywalking等工具定位慢SQL,再使用Explain分析执行计划。重点关注possible_keys、key、key_len、type和extra字段,判断索引使用情况及是否回表。可通过优化索引、使用覆盖索引等方式提升性能。此外,还可开启MySQL慢日志或使用Arthas、Prometheus等工具辅助定位问题。
57 0
|
2月前
|
NoSQL Redis
Redis相关问题-2
本文介绍了Redis的内存淘汰策略和分布式锁实现。内存淘汰策略包括淘汰易失数据和全库数据,具体方法如volatile-lru、volatile-lfu、allkeys-random等,以及no-eviction不淘汰策略。同时详细讲解了Redis分布式锁的实现,通过SETNX命令实现锁机制,解决死锁、锁超时、归一性和可重入性问题,提供代码示例说明加锁与解锁的绑定及可重入锁的实现方式。
36 0
|
2月前
|
存储 缓存 NoSQL
Redis相关问题-01
本文介绍了Redis中的三大缓存问题及其解决方案,包括缓存穿透(数据库和缓存无数据)、缓存击穿(热点数据失效)和缓存雪崩(大量缓存同时失效)。此外,还讲解了Redis的数据持久化策略(RDB和AOF)、常用数据类型(String、Hash、List、Set、ZSet及高级类型如Bitmap、HyperLogLog、Geo)以及数据过期处理策略(定期删除、惰性删除和内存淘汰机制)。
93 0