关系型数据库(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 的持久化选项,可以在性能和数据可靠性之间进行权衡。


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

相关推荐
Elastic 中国社区官方博客14 分钟前
Elasticsearch Serverless 中的数据流自动分片
大数据·数据库·elasticsearch·搜索引擎·serverless·时序数据库
Minyy1117 分钟前
牛客网刷题SQL--高级查询
数据库·sql
秋意钟19 分钟前
MySQL基本架构
数据库·mysql·架构
朱小勇本勇1 小时前
Qt实现控件拖曳
开发语言·数据库·qt
m0_748245921 小时前
mysql之如何获知版本
数据库·mysql
纯洁的小魔鬼1 小时前
redis 基础
数据库·redis·命令行
I love this bad girl1 小时前
防火墙旁挂部署+故障切换
服务器·网络·数据库
echo爱学易语言1 小时前
Linux ufw命令丨Linux网络防火墙ufw命令详解
服务器·网络·数据库
JhonKI1 小时前
【MySQL】表的基本查询(下)
数据库·mysql·oracle
微风轻吟挽歌1 小时前
Mysql唯一约束
数据库·mysql