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

创建数据库db1(创建数据库db_test)p id 35B1S2RU p h5 快捷链接 h5 p p p p ul li id 35B1S2UV p p p id 35B1S2S1 在 Linux 中我可以构建哪种数据库 p lt li ul

大家好,我是讯享网,很高兴认识大家。




讯享网

 <p id="35B1S2RU"><h5>快捷链接</h5></p><p><ul><li id="35B1S2UV"></p><p id="35B1S2S1">在 Linux 中我可以构建哪种数据库?</p><p></li></ul><ul><li id="35B1S2V0"></p><p id="35B1S2S2">我将使用哪些工具?</p><p></li></ul><ul><li id="35B1S2V1"></p><p id="35B1S2S3">如何使用 Linux 工具创建和使用数据库</p><p></li></ul></p><p id="35B1S2S7">数据库是许多应用程序的核心部分,从成熟的企业网站到诸如购物清单和财务跟踪器之类的简单工具。由 SQL 驱动的关系数据库很受欢迎,但 Linux 提供了一种更简单、更透明的替代方案。</p><p><h5>在 Linux 中我可以构建哪种数据库?</h5></p><p id="35B1S2S8">在 Linux 中,文本文件占据主导地位。有许多强大的工具和鼓励将它们链接在一起的生态系统,您可以通过纯文本文件实现很多功能。</p><p id="35B1S2S9">这包括构建数据库,它是一组有结构的数据,您能将其用于多种目的。使用文本文件和命令行工具,您可以创建简单的原型,快速检查数据,并像对任何代码一样轻松地对数据进行版本控制。</p><p><h5>我将使用哪些工具?</h5></p><p id="35B1S2SA">有许多有用的 Linux 命令,其中许多都与文本一起使用。这些命令中的许多都是过滤器,通过标准输入接收数据,执行某些操作,并产生标准输出。</p><p><ul><li id="35B1S2V2"><strong>grep</strong>搜索输入并选择与一个或多个模式匹配的行。</li><li id="35B1S2V3"><strong>cut</strong>提取每行的选定部分并将其写入标准输出。</li><li id="35B1S2V4"><strong>awk</strong>是一种更强大的模式扫描和处理语言。</li><li id="35B1S2V5"><strong>sort</strong>正如您所期望的那样来排序,但它可以对特定列进行排序,并正确处理数字/字母排序。</li><li id="35B1S2V6"><strong>head</strong><strong>tail</strong>允许您从输出中提取行的切片。</li><li id="35B1S2V7"><strong>join</strong>支持多个文件中的相关数据。</li></ul><h5>如何使用 Linux 工具创建和使用数据库</h5></p><p id="35B1S2SB">在此示例中,您将为待办事项应用程序构建一个简单的数据库。您可以使用标准的 Linux 工具构建所有基本功能。最终,您可以通过使用脚本语言或迁移到关系数据库来扩展应用程序。</p><p><h5>把表创建为平面文件</h5></p><p id="35B1S2SC">最简单的结构化文本格式之一是DSV,即分隔符分隔的值。这是 CSV(逗号分隔值)格式的一般情况。在 Linux 中,结构化文本文件通常使用空格或冒号(:)字符分隔字段。/etc/passwd 文件是一个经典示例:</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2Flmr%2F2024%2F1107%2F91cc77b1e09890bbff1d9432d073e7af.jpeg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="35B1S2SG">您能够用这种格式存储多种数据,比如待办事项列表:</p><p id="35B1S2SH">买牛奶:2024-10-21:2:open</p><p id="35B1S2SI">打电话给银行:2024-10-20:1:closed</p><p id="35B1S2SJ">您可以使用任何文本编辑器更新您的数据库,这是纯文本格式的另一个优点。您甚至可以通过将 echo 的输出重定向到文件直接从命令行添加项目:</p><p>echo "倒垃圾:$(date -I):3:open" &gt; tasks</p><p id="35B1S2SK">这相当于 SQL:</p><p>向 tasks 插入值( '倒垃圾', 当前日期函数(), '3', '打开')</p><p id="35B1S2SL">请注意,此命令使用子命令获取当前日期。如果您手动输入,这有点麻烦,但在脚本中会方便得多。</p><p><h5>获取整个表</h5></p><p id="35B1S2SM">选择数据可能是最常见的数据库任务。基本情况是从表中选择所有内容,即</p><p>选择 * 从 tasks</p><p id="35B1S2SN">这将从数据库的每一行获取所有列。对于基于文件的数据库,等效操作很简单:</p><p>cat tasks</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2Flmr%2F2024%2F1107%2F59372c31dd882e00cb7453ee0406ebdc.jpeg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p><h5>使用 cut 选择列</h5></p><p id="35B1S2SR">再复杂一点,您可以将选择范围缩小到特定的列。在 SQL 中,如下所示:</p><p>选择 task 从 tasks</p><p id="35B1S2SS">使用 cut 工具,您可以实现几乎相同的功能:</p><p>cut -d ':' -f1 tasks</p><p id="35B1S2ST">d 选项指定分隔符,即文件每行中分隔字段的字符。f 选项让您选择特定的字段。这将为您提供数据库中所有任务的简单列表:</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2Flmr%2F2024%2F1107%2F75f5f8cdfe9ef6ecdaa43255f68114ed.jpeg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p><h5>使用 grep 或 awk 选择行</h5></p><p id="35B1S2T1">通常您不会从数据库中获取每一行,而是希望限制结果。基于字段值进行筛选是最为明显的需求,比如:</p><p>选择 * 从 tasks 其中 状态= 打开</p><p id="35B1S2T2">在这种情况下,grep 是完美的替代品。使用它通过正则表达式模式匹配行,例如,您可以找到每个状态为“打开”的任务:</p><p>grep '打开$' tasks</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2Flmr%2F2024%2F1107%2Ff60565bd0cd20a060c.jpeg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="35B1S2T6">此特定情况利用了状态处于每行的最后一个字段这一事实;$ 用于匹配字符串的结尾。</p><p>选择 状态, 任务 从 tasks 其中 日期 &lt; 2024 -10 -21</p><p id="35B1S2T7">此 SQL 使用逻辑比较来获取特定日期之前的任务。您可以尝试构建更复杂的正则表达式,但这开始超出 grep 的能力。</p><p id="35B1S2T8">您需要的是更强大的工具,如 awk:</p><p>awk -F ':' '$2&lt;"2024-10-21" {print $1 ":" $2 }' tasks</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2Flmr%2F2024%2F1107%2F64bbe08348c7bf339f06ff27f999dde2.jpeg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="35B1S2TC">Awk 可以完成 grep 和 cut 的工作。在此示例中,读取的部分</p><p>$2&lt; "2024-10-21"</p><p id="35B1S2TD">是一个前提条件,意味着只有具有更早日期的行才会匹配。然后,该命令打印每行的前两列。</p><p><h5>Paginate Results With tail and head</h5></p><p id="35B1S2TE">SQL 的 LIMIT 子句允许您获取特定数量的结果。要获取前两行:</p><p>head -2 tasks</p><p id="35B1S2TF">您可以使用 tail 获取最后 n 行。与 head 一起,这允许您近似 LIMIT 子句以包括偏移量。例如,要获取第 2 - 3 行:</p><p>head -3 tasks | tail -2</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2Flmr%2F2024%2F1107%2F20729e84b9627bdbc05d19fad59c0c5c.jpeg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p><h5>Sort Rows With sort</h5></p><p id="35B1S2TJ">“ORDER BY”子句是许多 SQL 语句的重要部分。幸运的是,Linux 有一个很棒的等效命令:sort。与 cut 和 awk 一样,您可以按数字指定分隔符和字段,尽管标志使用不同的字母。这次,t 指定分隔符,k 指定字段编号:</p><p>sort -t ':' -k2 tasks</p><p id="35B1S2TK">这将显示按日期排序的所有记录:</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2Flmr%2F2024%2F1107%2F36b35cc67bd67c3ea879cd0.jpeg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p><h5>Join Tables With join</h5></p><p id="35B1S2TO">关系数据库都是关于不同表之间的关系,其中一个表中的字段引用另一个表中的字段。您可能没有意识到,但 Linux 有一个与 SQL 的 JOIN 子句等效的命令,不出所料,称为 join。</p><p id="35B1S2TP">让我们扩展待办事项数据,以满足几个人的任务需求。</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2Flmr%2F2024%2F1107%2Ff363ec210d95c43666ad76.jpeg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="35B1S2TT">并且创建一个文件,用于存储我们将为其存储任务的每个人的详细信息</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2Flmr%2F2024%2F1107%2F81b39be7b98b212ad132f01c351fddb3.jpeg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="35B1S2U1">您现在可以使用通过 t 选项指定分隔符的连接命令</p><p>join -t ':' -1 5 -2 1 tasks people</p><p id="35B1S2U2">-1 和 -2 选项分别指定了每个文件中要连接的字段编号。在此,它们分别是第 5 个和第 1 个字段。join 默认为使用第一个字段,所以您可以将其简化为</p><p>join -t ':' -1 5 tasks people</p><p id="35B1S2U3">并且它将产生:</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2Flmr%2F2024%2F1107%2Fe1989f1ad1097b08afdac05dda.jpeg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="35B1S2U7">为了稍微清理输出,您可以将连接的表通过管道传给 cut 并省略名称字段</p><p>join -t ':' -1 5 tasks people | cut -d ':' -f2-</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2Flmr%2F2024%2F1107%2F8e62a5f256eabaaf0736d3c6d91b41fd.jpeg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="35B1S2UB">并且您可以用 awk 将两个名称合并为一个</p><p>join -t ':' -1 5 tasks people | awk -F ':' '{print $2":"$3":"$4":"$5":"$6" "$7}'</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2Flmr%2F2024%2F1107%2F2afa46d3df896b6f7f9492f048033c2e.jpeg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p><h5>把所有内容整合在一起</h5></p><p id="35B1S2UF">总结一下,考虑一个更复杂的 SQL 表达式。这是一个连接两个表来获取名称、选择特定列并获取具有特定优先级的行的表达式。它按日期排序,且通过仅获取第一个匹配行结束</p><p id="35B1S2UG">SELECT task, date, priority, status, first_name, last_name</p><p id="35B1S2UH">FROM tasks t</p><p id="35B1S2UI">LEFT JOIN people p ON t.name = p.name</p><p id="35B1S2UJ">WHERE 优先级为 2</p><p id="35B1S2UK">ORDER BY 日期排序</p><p id="35B1S2UL">LIMIT 1</p><p id="35B1S2UM">等效的命令管道或许理解起来更有难度,但只要您熟悉了这些核心工具,就没那么复杂了</p><p id="35B1S2UN">join -t':' -1 5 -2 1 任务 人员</p><p id="35B1S2UO">| awk -F':''{print $2":"$3":"$4":"$5":"$6" "$7}'</p><p id="35B1S2UP">| grep ':2:'</p><p id="35B1S2UQ">| sort -t ':' -k2</p><p id="35B1S2UR">| head -1 (取第一个)</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2Flmr%2F2024%2F1107%2Fea5069df479ec029aeaf8811a.jpeg&thumbnail=660x&quality=80&type=jpg"/><br/></p> 

讯享网
小讯
上一篇 2025-04-14 22:28
下一篇 2025-05-16 18:01

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/170504.html