关系型数据库(RDBMS)与非关系型数据库(NoSQL)技术细节

1. 关系型数据库操作

1.1 请描述一下在关系型数据库(如 MySQL)中如何进行数据的增、删、改、查操作?
  • 增(INSERT):

    sql 复制代码
    INSERT INTO users (id, name, email) 
    VALUES (1, 'Alice', 'alice@example.com');
    • INSERT INTO 用于向表中插入一条或多条数据记录。
  • 删(DELETE):

    sql 复制代码
    DELETE FROM users WHERE id = 1;
    • DELETE 用于删除表中符合条件的记录。

    • 注意:如果不加 WHERE 条件,删除所有数据。

  • 改(UPDATE):

    sql 复制代码
    UPDATE users 
    SET email = 'alice123@example.com' 
    WHERE id = 1;
    • UPDATE 用于更新表中的数据,SET 指定要更新的字段和值。
  • 查(SELECT):

    sql 复制代码
    SELECT id, name, email FROM users WHERE id = 1;
    • SELECT 用于从表中查询数据。
    • 可以通过 WHERE 添加查询条件,也可以使用 ORDER BY 排序结果。
1.2 解释一下关系型数据库中的索引是什么?它有什么作用?如何创建和优化索引?
  • 索引定义:

    • 索引是一种数据结构,用于提高数据库查询的效率。
    • 它是数据库中表的一部分,允许快速查询数据而无需扫描整个表。
  • 索引的作用:

    1. 提高查询速度:通过索引,数据库可以直接跳到特定数据位置,避免全表扫描。
    2. 保证数据的唯一性:如主键和唯一索引。
    3. 加速排序操作 :比如通过 ORDER BY 排序数据时,索引可以大大提高速度。
  • 创建索引:

    sql 复制代码
    CREATE INDEX idx_email ON users (email);
    • CREATE INDEX 用于创建索引,通常会在常用查询的字段上创建索引。
  • 优化索引:

    1. 合理选择索引字段:只在查询频繁的列上创建索引。
    2. 避免过多索引:每个索引都会影响数据插入、更新和删除的性能。
    3. 使用复合索引:对多个列进行联合索引,减少多个单列索引的开销。
    4. 定期重建索引:对于大型数据库,定期重建索引可以优化性能。
    sql 复制代码
    ALTER TABLE users 
    ADD INDEX idx_name_email (name, email);
1.3 什么是 SQL 中的连接(JOIN)操作?有哪些不同类型的连接,它们分别在什么场景下使用?
  • JOIN 操作:

    • SQL 中的 JOIN 用于将两个或多个表的数据结合在一起,根据它们之间的关系进行匹配。
    • 连接操作通常基于表之间的外键关系来进行。
  • 不同类型的连接:

    1. INNER JOIN(内连接):
    • 只返回在两个表中都有的匹配数据。
    • 使用场景:当只需要两个表中都存在的数据时。
    sql 复制代码
    SELECT * FROM orders 
    INNER JOIN customers 
    ON orders.customer_id = customers.id;
    1. LEFT JOIN(左连接):
    • 返回左表的所有记录,以及右表中与之匹配的记录。如果右表中没有匹配的记录,结果会包含左表的记录,并且右表的列显示 NULL。
    • 使用场景:当需要返回左表的所有数据,无论右表中是否有对应数据时。
    sql 复制代码
    SELECT * FROM orders 
    LEFT JOIN customers 
    ON orders.customer_id = customers.id;
    1. RIGHT JOIN(右连接):
    • 与 LEFT JOIN 类似,只不过是返回右表的所有记录。
    • 使用场景:当需要返回右表的所有数据。
    sql 复制代码
    SELECT * FROM orders 
    RIGHT JOIN customers 
    ON orders.customer_id = customers.id;
    1. FULL OUTER JOIN(全外连接):
    • 返回两个表中所有的记录,对于没有匹配的记录,显示 NULL。
    • 使用场景:当需要返回两表中的所有数据时。
    sql 复制代码
    SELECT * FROM orders 
    FULL OUTER JOIN customers 
    ON orders.customer_id = customers.id;
1.4 关系型数据库中的事务是什么?请详细说明事务的四大特性(ACID)。
  • 事务定义:

    • 事务是指一组数据库操作,它们要么全部成功,要么全部失败。事务是数据库中处理一致性、并发性和恢复性的重要机制。
  • ACID 四大特性:

    1. 原子性(Atomicity):
    • 事务中的所有操作要么全部执行,要么全部不执行。即使发生错误,事务中的所有操作也必须回滚。
    1. 一致性(Consistency):
    • 事务开始前和结束后,数据库的状态必须是一致的。即数据库必须从一个有效状态转变为另一个有效状态。
    1. 隔离性(Isolation):
    • 一个事务的执行不应受到其他事务的干扰。即使多个事务并发执行,每个事务应该像是在独立运行一样。
    1. 持久性(Durability):
    • 一旦事务提交,事务的结果应该永久保存到数据库中,即使系统崩溃也不丢失。

2. 非关系型数据库操作

2.1 以 Redis 为例,说明如何在非关系型数据库中插入、查询和更新数据?
  • 插入数据:

    bash 复制代码
    SET user:1:name "Alice"
    • 使用 SET 命令将键 user:1:name 的值设置为 "Alice"。
  • 查询数据:

    bash 复制代码
    GET user:1:name
    • 使用 GET 命令获取键 user:1:name 的值。
  • 更新数据:

    bash 复制代码
    SET user:1:name "Bob"
    • 使用 SET 命令更新键 user:1:name 的值为 "Bob"。
2.2 非关系型数据库中的数据分片(Sharding)是什么?它是如何提高数据库性能的?
  • 数据分片定义 :
    • 数据分片是将数据水平分割到多个数据库实例上,每个实例负责一部分数据的存储。这种方式叫做水平分片。
  • 如何提高性能 :
    1. 负载均衡:将请求分散到多个分片上,避免单个数据库实例的负载过大。
    2. 高可用性:数据分片可以部署在多个物理节点上,提升系统的容错能力。
    3. 提高读写并发能力:不同的分片可以同时处理不同的请求,提高数据库的整体性能。
2.3 对于键 - 值存储类型的非关系型数据库,如 Redis,如何进行数据的持久化?
  • Redis 的持久化方式:

    1. RDB(快照):
    • Redis 可以定期将内存中的数据保存到磁盘,生成快照文件(dump.rdb)。可以设置定时保存(例如每 60 秒保存一次)。
    • 优点:备份方便,适用于需要定期备份的场景。
    • 缺点:可能会丢失最后一次操作的数据。
    1. AOF(追加文件):
    • Redis 可以将每次写操作追加到一个日志文件(appendonly.aof)中。即使 Redis 重启,也可以通过 AOF 恢复数据。
    • 优点:持久化程度较高,数据丢失较少。
    • 缺点:文件较大,可能会影响性能。
    1. 混合持久化:
    • Redis 还支持 RDB 和 AOF 混合持久化模式,结合了两者的优点。

    通过配置 Redis 的持久化选项,可以在性能和数据可靠性之间进行权衡。


巧合是上帝默默控制世界的方式。

相关推荐
其实防守也摸鱼10 分钟前
网安自测题:掌握核心知识点的实用练习
linux·运维·服务器·前端·数据库·sql·xss
数字化顾问10 分钟前
(142页PPT)PLM+ERP系统选型及建设方案建议书(附下载方式)
数据库
木白CPP11 分钟前
[QNX] 深入理解 Resource Manager 接口设计
linux·服务器·数据库
Shadow(⊙o⊙)16 分钟前
MySQL C/C++链接MySQL使用
数据库·sql·mysql
Mortalbreeze22 分钟前
MySQL 基础篇(五):数据操作基础 —— CRUD
linux·服务器·数据库·mysql
Shadow(⊙o⊙)23 分钟前
mysql为创建普通用户并创建库赋权
数据库·sql·mysql
Studying 开龙wu30 分钟前
CVAT 导出崩溃排查实录:一个空壳轨迹引发的连锁反应
数据库·sqlite
PaperData9 小时前
1985-2025年全国区县专利申请与授权面板数据
数据库
snpgroupcn9 小时前
大数据量SAP迁移方案:系统越大,越不能硬搬
数据库·sap
Flynt10 小时前
Redis Cluster主节点挂了,为什么"高可用"还全员掉线?我把三次kill的记录翻出来了
数据库·redis·分布式