高频知识点
数据库-笔记
数据库笔记
2026-7-17
原始笔记链接:https://cloud.seatable.cn/dtable/external-links/59b453a8639945478de2/
0113 数据库事务处理是什么
事务处理:某一组操作是一个原子操作,如果中途无法执行,就回退到开始的状态。不能执行到一半执行停止执行。
实例:删除一个用户时,用户的各种信息分别在不同的表中存储,那么这组操作就包括多个删除 SQL 语句,就是一个 commit。例如删除用户的基本信息,用户的评论,用户的操作日志等。如果删除用户评论时,发现找不到这个用户,那么应该提示错误并回退到之前的状态,而不应该继续执行,或者执行一半。
|
|
0377 mysql 中主键外键是什么
mysql 中不同表通过主键和外键建立关联,进行约束,确保了数据一致性。
根据不同表的关联关系,确定主键和外键。
如果是一对多的关系(例如用户表和评论表),那么用户表的 id 就是主键,在评论表中建立 user_id 作为外键。
如果是多对多的关系(例如用户表和图书表),那么需要新建一个中间表,user_book 存放外键。用户表中 id 是主键,图书表中 id 也是主键,user_book 表中,新建 book_id 和 user_id 作为外键,进行关联和约束。
主键是唯一的,确保了数据增删改的联动性。
0888 数据库视图是什么
视图是基于一个或多个基本表的查询结果的虚拟表。
它是一个逻辑概念,不实际存储数据,但可以像基本表一样使用。
视图是通过 SELECT 语句创建的,并可以对其进行查询、插入、更新和删除等操作。
视图的主要作用,简化复杂查询和保护数据的安全性。
通过创建视图,可以隐藏底层表结构和数据,只暴露需要的信息给用户。
视图还可以将多个表的数据合并到一个虚拟表中,简化查询操作。
1、特点
-
不存储实际数据,只保存查询定义
-
可以像基本表一样使用,进行CRUD操作
-
可以简化复杂查询和保护数据安全
2、优点
简化查询:通过创建视图,可以将复杂的查询操作封装成一个简单的查询语句,并且可以重复使用。
数据安全:通过视图,可以隐藏底层表的结构和数据,只暴露必要的信息给用户。可以给用户授予对视图的访问权限,而不直接访问基本表,从而提高数据的安全性。
数据一致性:通过视图,可以将多个相关的表的数据合并到一个虚拟表中,保证了数据的一致性。
3、缺点
查询效率:视图的查询效率可能会低于直接查询基本表,因为视图需要在查询时动态生成结果。
更新限制:由于视图是基于基本表的查询结果,对视图的更新操作可能会受到限制。例如,视图中使用了聚合函数或 GROUP BY 子句,则不能对视图进行更新。
存储空间:虽然视图不存储实际数据,但是需要占用一定的存储空间来保存查询定义。
4、用途
简化复杂查询:通过将复杂的查询逻辑封装到视图中,可以简化应用程序中的查询操作。
数据安全性:视图可以限制用户对底层表的访问权限,从而提供更高的数据安全性和隐私保护。
数据抽象和封装:通过视图,可以将多个表的数据抽象为一个虚拟表,简化数据模型和应用程序开发。
性能优化:视图可以预先计算和存储结果集,以提高查询性能,并避免重复执行复杂查询。
基本使用
视图的增删和表类似
|
|
案例
|
|
参考链接
https://blog.csdn.net/qq_21891743/article/details/132590386
https://blog.csdn.net/2301_78341899/article/details/131533874
0819 mysql 如何支持 emoji 表情
这是 mysql 字符集的问题,如果是 emoji 表情发送失败,原因是数据库不能存储 emoji 表情,需要修改 mysql 的配置,将字符类型修改为 utf8mb4。
mysql 的 utf-8 编码的一个字符最多 3 个字节,但是一个 emoji 表情为 4 个字节,所以 utf-8 不支持储存 emoji 表情,但是 utf-8 的超集 utf8mb4 一个字符最多能有 4 个字节,所以能够支持 emoji 的表情存储。
找到/etc/mysql 路径下有 my.cnf 文件,添加如下的配置:
|
|
重启 mysql 的服务:
|
|
0687 elastic search 的基本原理
安装和环境:elastic search 是一个单独 java 服务;默认端口是 9200
搜索原理:类似数据库增加索引,elastic 对于文本内容也增加了索引(具体的中文分词、英文分词、构建字典树等细节不考虑)。增加索引后,对全文搜索性能更好。
关键词:节点 Node,集群 cluster,索引 Index,文档 Document。
每一个 elastic 是一个节点,多个节点构成分布式集群。每一个索引,包括多个文档。
搜索步骤:
通过 API 建立删除索引
|
|
设置中文分词(创建索引时,增加配置)“analyzer”: “ik_max_word” 表示分词器
|
|
参考:
https://www.ruanyifeng.com/blog/2017/08/elasticsearch.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started.html
https://www.elastic.co/cn/blog/a-practical-introduction-to-elasticsearch
0296 MYSQL 高并发性能问题
Mysql 高并发性能问题
问题:mysql 分布式还不完善,所以存在高并发的问题。如果并行请求很多,mysql 锁无法合理分配资源,产生延时。
解决
1、分库分表:利用已有的MySQL资源,将原来的数据表拆分成多个数据库(或者表),同时支持多个SQL的查询,可以在一定程度上提升查询性能。
2、缓存技术:使用缓存可以减少MySQL服务器的查询压力,提高数据的读取速度,降低内存的占用。常用的缓存技术有Redis、Memcache等,可以将MySQL查询和处理的结果缓存起来,实现简单的数据一次查询,多次引用的功能。
3、HTTP集群:通过市面上常用的反向代理负载均衡技术,将网站服务器的查询压力分散到多台服务器上,从而提升MySQL的性能和容量。
4、优化SQL语句:通过在查询语句中添加索引、减少冗余数据等步骤,提升表之间关联查询、语句执行速度以及内存容量。
参考链接
https://www.dbs724.com/157170.html
https://blog.csdn.net/weixin_40990818/article/details/113704102
https://juejin.cn/post/7163894728201601060
0378 mysql 中如何优化
mysql 初级使用不涉及复杂算法
如果遇到慢查询时:mysql 建立索引时,实际上就是线性查找,转换成映射查找(建立索引,具体算法不一样),可以提高查询的速度。
0380 mysql 和 mariaDB 的区别
https://blog.csdn.net/sensor_WU/article/details/129646422
相同点:mysql 和 mariaDB 都是关系型数据库,主要功能相同。MariaDB是MySQL的一个分支,由开源社区维护,采用GPL授权许可,完全兼容MySQL。
发展历史:mysql 早期是个人开发者发布,随后被 Sun 收购,随后 2008 年被 Oracle 收购,走上了商业化道路(收费)。2009年 mysql 创始人在新的分支上创建了 mariaDB,使用 GPL 许可证,代码开源。
主要区别:mysql 存储引擎是 innoDB, mariaDB 存储引擎是 XtraDB,有一些性能差异。
0891 ORM 对象关系映射
对象关系映射,Object relationship mapping
ORM 框架是一种用于解决编程语言中的对象模型,与关系型数据库中数据模型之间不匹配问题,的技术框架。
核心:建立对象与数据库表之间的映射关系,让开发者可以直接使用面向对象的方式(如操作类、对象、方法)来操作数据库,而无需编写复杂的 SQL 语句。
Python 领域的 ORM 框架:SQLAlchemy、Django ORM
ORM 优势:
-
简化数据库操作:用熟悉的面向对象语法(如创建对象、调用方法)替代 SQL 语句,降低了数据库操作的复杂度。
-
隔离数据库差异:屏蔽了不同数据库(如 MySQL、PostgreSQL、Oracle 等)的 SQL 语法差异,切换数据库时无需大量修改代码。
-
提高开发效率:减少了重复编写 SQL 的工作量,让开发者更专注于业务逻辑而非数据访问细节。
-
增强代码可维护性:将数据访问逻辑集中管理,便于后期修改和维护。
0899 强制删除外键的数据库表
通常,删除数据库表,执行
|
|
如果这个表和其他的表存在多个外键关联,又必须删除(本地测试可以这样操作),执行下面的脚本,强制删除表
|
|
0489 数据库 schema 是什么意思
schema 是数据库的组织和结构,包含了表、列、数据类型、视图、存储过程、关系、主键、外键等数据库对象。
-
组织和结构:Schema 在数据库中起到了组织和结构化的作用,它定义了数据库的结构和对象之间的关系,使得数据存储和检索更加有序和高效。
-
命名空间和对象集合:Schema在数据库中形成了一个命名空间,允许多个用户使用同一个数据库而不会相互干扰。它包含了表和其他数据库对象,如数据类型、函数、操作符等。
-
避免名称冲突:通过将数据库对象组织成逻辑组,Schema有助于避免对象名称的冲突
-
数据完整性和业务逻辑:Schema还通过定义约束和规则来确保数据的完整性和一致性,如唯一约束和非空约束,有助于维护数据的质量和准确性。
-
可视化表示:在可视化工具中,Schema可以通过关系图表来表示,显示数据库对象及其之间的关系。