Skip to content

数据库笔记

统计信息:字数 6899 阅读14分钟

原始笔记链接:https://cloud.seatable.cn/dtable/external-links/59b453a8639945478de2/

0113 数据库事务处理是什么

事务处理是数据库中的术语:某一组操作是一个原子操作,如果中途无法执行,就回退到开始的状态。不能执行到一半执行停止执行。

实例:删除一个用户时,用户的各种信息分别在不同的表中存储,那么这组操作就包括多个删除 SQL 语句,就是一个 commit。例如删除用户的基本信息,用户的评论,用户的操作日志等。如果删除用户评论时,发现找不到这个用户,那么应该提示错误并回退到之前的状态,而不应该继续执行,或者执行一半。

START TRANSATION
DELETE FROM USERS WHERE user_id = 002;
DELETE FROM COMMENTS WHERE user_id = 002;
DELETE FROM OPERATIONS WHERE user_id = 002;
COMMIT;

0377 mysql 中主键外键是什么?怎么使用?

mysql 中不同表通过主键和外键建立关联,进行约束,确保了数据一致性。

根据不同表的关联关系,确定主键和外键。

如果是一对多的关系(例如用户表和评论表),那么用户表的 id 就是主键,在评论表中建立 user_id 作为外键。

如果是多对多的关系(例如用户表和图书表),那么需要新建一个中间表,user_book 存放外键。用户表中 id 是主键,图书表中 id 也是主键,user_book 表中,新建 book_id 和 user_id 作为外键,进行关联和约束。

主键是唯一的,确保了数据增删改的联动性。

个人理解:

安装和环境:elastic 搜索是一个单独的服务,需要运行在 Java 环境中;默认端口是 9200

搜索原理:类似数据库增加索引,elastic 对于文本内容也增加了索引(具体的中文分词、英文分词、构建字典树等细节不考虑)。增加索引后,对全文搜索性能更好。

关键词:节点 Node,集群 cluster,索引 Index,文档 Document。

每一个 elastic 是一个节点,多个节点构成分布式集群。每一个索引,包括多个文档。

搜索步骤:

通过 API 建立删除索引

PUT localhost:9200/novel
DELETE localhost:9200/novel

设置中文分词(创建索引时,增加配置)"analyzer": "ik_max_word" 表示分词器

curl -X PUT 'localhost:9200/accounts' -d '

{
  "mappings": {
    "person": {
      "properties": {
        "user": {
          "type": "text",
          "analyzer": "ik_max_word",
          "search_analyzer": "ik_max_word"
        },
        "title": {
          "type": "text",
          "analyzer": "ik_max_word",
          "search_analyzer": "ik_max_word"
        },
        "desc": {
          "type": "text",
          "analyzer": "ik_max_word",
          "search_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,有一些性能差异。

0489 数据库 schema 是什么意思

schema 是数据库的组织和结构,包含了表、列、数据类型、视图、存储过程、关系、主键、外键等数据库对象。

  • 组织和结构:Schema 在数据库中起到了组织和结构化的作用,它定义了数据库的结构和对象之间的关系,使得数据存储和检索更加有序和高效。‌

  • 命名空间和对象集合:Schema在数据库中形成了一个命名空间,允许多个用户使用同一个数据库而不会相互干扰。它包含了表和其他数据库对象,如数据类型、函数、操作符等。‌

  • 避免名称冲突:通过将数据库对象组织成逻辑组,Schema有助于避免对象名称的冲突

  • 数据完整性和业务逻辑:Schema还通过定义约束和规则来确保数据的完整性和一致性,如唯一约束和非空约束,有助于维护数据的质量和准确性。

  • 可视化表示:在可视化工具中,Schema可以通过关系图表来表示,显示数据库对象及其之间的关系。‌

Last update: November 9, 2024