在计算机行业里,有许多不同类型的计算机数据库,每一种都服务于不同的目的并满足特定的需求。 以下是一些常用的数据库类型:
1.关系数据库:关系数据库是使用最广泛的数据库类型。它们将数据存储在表中,表之间具有预定义的关系。关系数据库的示例包括 MySQL、Oracle 数据库和 Microsoft SQL Server。
2. NoSQL 数据库:NoSQL 数据库,或“不仅仅是SQL”数据库,旨在处理大量非结构化或半结构化数据。它们比关系数据库更灵活,并且可以水平扩展。NoSQL 数据库的示例包括 MongoDB、Cassandra 和 Redis。
3. 面向对象的数据库:面向对象的数据库以对象的形式存储数据,其中既包含数据又包含相关的过程。它们主要用于面向对象的编程,适用于复杂的数据结构。示例包括 ObjectDB 和 db4o。
4. 层次数据库:层次数据库以树状结构组织数据,记录之间具有父子关系。它们通常用于大型机系统和较旧的遗留应用程序。
5. 网络数据库:网络数据库类似于分层数据库,但允许记录之间更灵活的关系。他们使用图形结构来表示数据和关系。
6. 列式数据库:列式数据库将数据存储在列而不是行中,这允许更快的数据检索和分析,特别是对于大型数据集。示例包括 Apache Cassandra 和 Google Bigtable。
7.图形数据库:图形数据库旨在处理高度连接的数据,例如社交网络或推荐系统。它们将数据存储为节点(实体)和边(节点之间的关系),从而可以高效地导航和查询关系。示例包括 Neo4j 和 Amazon Neptune。
8. 时间序列数据库:时间序列数据库针对处理时间戳或时间序列数据进行了优化,例如传感器数据、金融市场数据或日志文件。它们根据时间范围提供高效的数据存储和检索。示例包括 InfluxDB 和 Prometheus。
9. 空间数据库:空间数据库旨在存储和查询空间或地理数据,例如地图、卫星图像或 GPS 数据。它们为距离计算和空间索引等空间操作提供专门的功能。示例包括 PostGIS 和 Oracle Spatial。
通常,我们在工作中经常接触的数据库有SQL或NoSQL。关系型数据中以MySQL为例,它是一种开源关系数据库管理系统 (RDBMS),广泛用于管理和组织结构化数据。它是世界上最受欢迎的数据库之一,以其可靠性、性能和易用性而著称。以下是 MySQL 的简要概述和简单演示:
MySQL概述:
- MySQL 遵循客户端-服务器模型,其中多个客户端应用程序可以连接到 MySQL 服务器以访问和操作数据。
- 它使用结构化查询语言 (SQL) 来定义和操作存储在数据库中的数据。
- MySQL 支持多种操作系统,包括 Windows、macOS 和 Linux,并且可以与不同的编程语言(如 Python、Java、PHP 等)集成。
演示:
让我们通过一个简单的示例来演示 MySQL 的工作原理。请记住,要在本地运行 MySQL,您需要将其安装在您的计算机上或使用提供 MySQL 托管的在线服务。
1. 安装与设置:
- 从官方网站(
https://dev.mysql.com/downloads/installer/) 下载并安装 MySQL。
- 通过设置 root 密码和其他相关设置来配置 MySQL。
2、访问MySQL服务器:
- 打开 MySQL 命令行客户端或图形用户界面 (GUI) 工具,如 MySQL Workbench。
- 使用提供的凭据(用户名和密码)连接到 MySQL 服务器。
3. 创建数据库:
- 使用以下命令创建新数据库:
CREATE DATABASE mydatabase;
4.创建表:
- 让我们创建一个名为“customers”的简单表,其中包含客户 ID、姓名、电子邮件和电话的列:
USE mydatabase;CREATE TABLE customers (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50),email VARCHAR(50),phone VARCHAR(20));
5.插入数据:
- 将一些示例数据插入“customers”表中:
INSERT INTO customers (name, email, phone)VALUES ('John Doe', 'johndoe@example.com', '123-456-7890'),('Jane Smith', 'janesmith@example.com', '987-654-3210');
6. 检索数据:
- 从“customers”表中获取数据:
SELECT * FROM customers;
7.更新数据:
- 修改“customers”表中的现有记录:
UPDATE customersSET phone = '555-555-5555'WHERE id = 1;
8. 删除数据:
- 从“customers”表中删除一条记录:
DELETE FROM customersWHERE id = 2;
这只是使用 MySQL 的一个基本示例。数据库管理系统提供了广泛的高级功能,包括数据安全、事务支持、索引、存储过程等。下面是一些常见的 MySQL 查询及其演示:
1.选择数据:
- 从表中检索所有记录:
SELECT * FROM tablename;
- 从表中检索特定列:
SELECT column1, column2 FROM tablename;
- 根据条件过滤记录:
SELECT * FROM tablename WHERE condition;
例子:
假设我们有一个名为“employees”的表,其中包含“id”、“name”、“department”和“salary”列。要从“sales”部门检索所有员工,您可以使用:
SELECT * FROM employees WHERE department = 'sales';
2. 汇总数据:
- 计算列的总计、平均值、最小值或最大值:
SELECT AVG(column) FROM tablename;SELECT SUM(column) FROM tablename;SELECT MIN(column) FROM tablename;SELECT MAX(column) FROM tablename;
例子:
假设我们有一个名为“orders”的表,其中有一列“amount”表示订单价值,要计算总订单金额,您可以使用:
SELECT SUM(amount) FROM orders;
3.排序数据:
- 按升序或降序对记录进行排序:
SELECT * FROM tablename ORDER BY column ASC;SELECT * FROM tablename ORDER BY column DESC;
例子:
假设我们有一个名为“products”的表,其中包含“name”和“price”列。要检索按价格降序排列的产品,您可以使用:
SELECT * FROM products ORDER BY price DESC;
4.加入表格:
- 根据相关列合并来自多个表的数据:
SELECT * FROM table1 JOIN table2 ON table1.column = table2.column;
例子:
考虑两个表,“orders”和“customers”,它们有一个共同的列“customer_id”。要检索订单以及客户详细信息,您可以使用:
SELECT orders.order_id, customers.nameFROM ordersJOIN customers ON orders.customer_id = customers.customer_id;
5.更新数据:
- 修改表中的记录:
UPDATE tablename SET column = value WHERE condition;
例子:
假设我们有一个名为“students”的表,其中包含“id”、“name”和“age”列,要更新具有特定 ID 的学生的年龄,您可以使用:
UPDATE students SET age = 20 WHERE id = 1;
这些只是常见 MySQL 查询的几个示例。MySQL 提供了广泛的功能和高级查询能力来处理复杂的数据操作。例如,Join table就有如下几种常用的连接类型:
1.内连接:
- 返回在两个表中具有匹配值的记录。
SELECT * FROM table1 INNER JOIN table2 ON table1.column = table2.column;
2.左连接(或左外连接):
- 返回左表中的所有记录和右表中匹配的记录。如果没有匹配项,则右表将包含 NULL 值。
SELECT * FROM table1 LEFT JOIN table2 ON table1.column = table2.column;
3. Right Join(或Right Outer Join):
- 返回右表中的所有记录和左表中匹配的记录。如果没有匹配项,则左表包含 NULL 值。
SELECT * FROM table1 RIGHT JOIN table2 ON table1.column = table2.column;
4. Full Join(或Full Outer Join):
- 当左表或右表中存在匹配项时返回所有记录。如果没有匹配,则不匹配的一侧包含 NULL 值。
SELECT * FROM table1 FULL JOIN table2 ON table1.column = table2.column;
5.交叉连接(或Cartesian Join):
- 返回两个表的笛卡尔积,得到表之间所有可能的行组合。
SELECT * FROM table1 CROSS JOIN table2;
6. Self Join:
- 将表连接到自身,通常在表具有层次结构或比较同一表中的不同行时使用。
SELECT * FROM table1 t1 INNER JOIN table1 t2 ON t1.column = t2.column;
那么,如此多join 方式,哪种最好呢?其实,它们各自都有各自的优势,你可以根据你自己的需求来,选择适合你的。毕竟,最适合你的,才是最好的。言归正传,它们的优点如下:
1.内连接:
- 最适合当您要检索在两个表中具有匹配值的记录时。
- 通常用于合并来自两个或多个表的相关数据。
2.左连接:
- 当您想要从左表中检索所有记录并从右表中检索匹配记录时很有用。
- 当您想要从主表中检索记录以及任何相关数据时通常使用。
3.右连接:
- 类似于左连接,但返回右表中的所有记录和左表中的匹配记录。
- 与左连接相比不太常用,因为它通常可以通过反转左连接中的表顺序来实现。
4.完全加入:
- 适用于想要从两个表中检索所有记录,无论它们是否具有匹配关系。
- 通常在需要查找不匹配的记录或想要合并来自两个独立来源的数据时使用。
5.交叉连接:
- 当您想要生成两个表的笛卡尔积时很有用,从而产生所有可能的行组合。
- 通常用于生成所有可能的对或需要创建临时数据集等场景。
6. Self Join:
- 当你想将一个表连接到它自己时适用,通常是为了比较同一个表中的不同行或处理分层数据。
最佳连接类型取决于具体用例和表之间的关系。 分析需求和预期结果以确定合适的连接类型很重要。
在许多情况下,可能需要结合使用不同的连接类型和附加条件才能获得所需的结果。 建议了解数据模型、考虑性能影响并测试查询结果以确定最适合您的特定场景的联接类型。
今晚就聊到这儿,下期我们继续NoSQL中常用的 MongDB介绍。