当前位置:网站首页 > 数据科学与大数据 > 正文

创建数据库db1(创建数据库db_test)



快捷链接

  • 在 Linux 中我可以构建哪种数据库?

  • 我将使用哪些工具?

  • 如何使用 Linux 工具创建和使用数据库

数据库是许多应用程序的核心部分,从成熟的企业网站到诸如购物清单和财务跟踪器之类的简单工具。由 SQL 驱动的关系数据库很受欢迎,但 Linux 提供了一种更简单、更透明的替代方案。

在 Linux 中我可以构建哪种数据库?

在 Linux 中,文本文件占据主导地位。有许多强大的工具和鼓励将它们链接在一起的生态系统,您可以通过纯文本文件实现很多功能。

这包括构建数据库,它是一组有结构的数据,您能将其用于多种目的。使用文本文件和命令行工具,您可以创建简单的原型,快速检查数据,并像对任何代码一样轻松地对数据进行版本控制。

我将使用哪些工具?

有许多有用的 Linux 命令,其中许多都与文本一起使用。这些命令中的许多都是过滤器,通过标准输入接收数据,执行某些操作,并产生标准输出。

  • grep搜索输入并选择与一个或多个模式匹配的行。
  • cut提取每行的选定部分并将其写入标准输出。
  • awk是一种更强大的模式扫描和处理语言。
  • sort正如您所期望的那样来排序,但它可以对特定列进行排序,并正确处理数字/字母排序。
  • headtail允许您从输出中提取行的切片。
  • join支持多个文件中的相关数据。
如何使用 Linux 工具创建和使用数据库

在此示例中,您将为待办事项应用程序构建一个简单的数据库。您可以使用标准的 Linux 工具构建所有基本功能。最终,您可以通过使用脚本语言或迁移到关系数据库来扩展应用程序。

把表创建为平面文件

最简单的结构化文本格式之一是DSV,即分隔符分隔的值。这是 CSV(逗号分隔值)格式的一般情况。在 Linux 中,结构化文本文件通常使用空格或冒号(:)字符分隔字段。/etc/passwd 文件是一个经典示例:


您能够用这种格式存储多种数据,比如待办事项列表:

买牛奶:2024-10-21:2:open

打电话给银行:2024-10-20:1:closed

您可以使用任何文本编辑器更新您的数据库,这是纯文本格式的另一个优点。您甚至可以通过将 echo 的输出重定向到文件直接从命令行添加项目:

echo "倒垃圾:$(date -I):3:open" > tasks

这相当于 SQL:

向 tasks 插入值( '倒垃圾', 当前日期函数(), '3', '打开')

请注意,此命令使用子命令获取当前日期。如果您手动输入,这有点麻烦,但在脚本中会方便得多。

获取整个表

选择数据可能是最常见的数据库任务。基本情况是从表中选择所有内容,即

选择 * 从 tasks

这将从数据库的每一行获取所有列。对于基于文件的数据库,等效操作很简单:

cat tasks


使用 cut 选择列

再复杂一点,您可以将选择范围缩小到特定的列。在 SQL 中,如下所示:

选择 task 从 tasks

使用 cut 工具,您可以实现几乎相同的功能:

cut -d ':' -f1 tasks

d 选项指定分隔符,即文件每行中分隔字段的字符。f 选项让您选择特定的字段。这将为您提供数据库中所有任务的简单列表:


使用 grep 或 awk 选择行

通常您不会从数据库中获取每一行,而是希望限制结果。基于字段值进行筛选是最为明显的需求,比如:

选择 * 从 tasks 其中 状态= 打开

在这种情况下,grep 是完美的替代品。使用它通过正则表达式模式匹配行,例如,您可以找到每个状态为“打开”的任务:

grep '打开$' tasks


此特定情况利用了状态处于每行的最后一个字段这一事实;$ 用于匹配字符串的结尾。

选择 状态, 任务 从 tasks 其中 日期 < 2024 -10 -21

此 SQL 使用逻辑比较来获取特定日期之前的任务。您可以尝试构建更复杂的正则表达式,但这开始超出 grep 的能力。

您需要的是更强大的工具,如 awk:

awk -F ':' '$2<"2024-10-21" {print $1 ":" $2 }' tasks


Awk 可以完成 grep 和 cut 的工作。在此示例中,读取的部分

$2< "2024-10-21"

是一个前提条件,意味着只有具有更早日期的行才会匹配。然后,该命令打印每行的前两列。

Paginate Results With tail and head

SQL 的 LIMIT 子句允许您获取特定数量的结果。要获取前两行:

head -2 tasks

您可以使用 tail 获取最后 n 行。与 head 一起,这允许您近似 LIMIT 子句以包括偏移量。例如,要获取第 2 - 3 行:

head -3 tasks | tail -2


Sort Rows With sort

“ORDER BY”子句是许多 SQL 语句的重要部分。幸运的是,Linux 有一个很棒的等效命令:sort。与 cut 和 awk 一样,您可以按数字指定分隔符和字段,尽管标志使用不同的字母。这次,t 指定分隔符,k 指定字段编号:

sort -t ':' -k2 tasks

这将显示按日期排序的所有记录:


Join Tables With join

关系数据库都是关于不同表之间的关系,其中一个表中的字段引用另一个表中的字段。您可能没有意识到,但 Linux 有一个与 SQL 的 JOIN 子句等效的命令,不出所料,称为 join。

让我们扩展待办事项数据,以满足几个人的任务需求。


并且创建一个文件,用于存储我们将为其存储任务的每个人的详细信息


您现在可以使用通过 t 选项指定分隔符的连接命令

join -t ':' -1 5 -2 1 tasks people

-1 和 -2 选项分别指定了每个文件中要连接的字段编号。在此,它们分别是第 5 个和第 1 个字段。join 默认为使用第一个字段,所以您可以将其简化为

join -t ':' -1 5 tasks people

并且它将产生:


为了稍微清理输出,您可以将连接的表通过管道传给 cut 并省略名称字段

join -t ':' -1 5 tasks people | cut -d ':' -f2-


并且您可以用 awk 将两个名称合并为一个

join -t ':' -1 5 tasks people | awk -F ':' '{print $2":"$3":"$4":"$5":"$6" "$7}'


把所有内容整合在一起

总结一下,考虑一个更复杂的 SQL 表达式。这是一个连接两个表来获取名称、选择特定列并获取具有特定优先级的行的表达式。它按日期排序,且通过仅获取第一个匹配行结束

SELECT task, date, priority, status, first_name, last_name

FROM tasks t

LEFT JOIN people p ON t.name = p.name

WHERE 优先级为 2

ORDER BY 日期排序

LIMIT 1

等效的命令管道或许理解起来更有难度,但只要您熟悉了这些核心工具,就没那么复杂了

join -t':' -1 5 -2 1 任务 人员

| awk -F':''{print $2":"$3":"$4":"$5":"$6" "$7}'

| grep ':2:'

| sort -t ':' -k2

| head -1 (取第一个)


到此这篇创建数据库db1(创建数据库db_test)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 数据库增删改查(数据库增删改查代码)2025-02-10 10:00:06
  • 104协议遥控命令(103协议遥测数据说明)2025-02-10 10:00:06
  • 小米手机数据迁移(小米手机数据迁移到红米手机)2025-02-10 10:00:06
  • cpu参数对比工具在哪(cpu数据对比图)2025-02-10 10:00:06
  • 中文全文数据库有哪些cssci(中文期刊全文数据库有哪些)2025-02-10 10:00:06
  • 小米手机数据迁移到vivo手机(小米手机的数据怎么转移到vivo)2025-02-10 10:00:06
  • 数据库基础知识面试(数据库面试笔试题及答案)2025-02-10 10:00:06
  • jdbc连接数据库增删改查(jdbc数据库链接)2025-02-10 10:00:06
  • cmip6数据处理办法(cmip5数据处理)2025-02-10 10:00:06
  • 学术数据库能够免费检索的有(常用的学术检索数据库)2025-02-10 10:00:06
  • 全屏图片