From 1d012fcd67e4d406c97b2645f644441c379244f0 Mon Sep 17 00:00:00 2001 From: wizardforcel <562826179@qq.com> Date: Mon, 14 Aug 2017 16:37:59 +0800 Subject: [PATCH] ex38 --- ex38.md | 127 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 ex38.md diff --git a/ex38.md b/ex38.md new file mode 100644 index 0000000..9da2ed7 --- /dev/null +++ b/ex38.md @@ -0,0 +1,127 @@ +# 练习 38:SQL 简介 + +> 原文:[Exercise 38: Introduction To SQL](https://learncodethehardway.org/more-python-book/ex38.html) + +> 译者:[飞龙](https://github.com/wizardforcel) + +> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/) + +> 自豪地采用[谷歌翻译](https://translate.google.cn/) + +学习如何建模和设计实体数据的最佳方法,是从非常基本的搭积木开始。数据库的 SQL(“SeQueL”)风格数十年来已成为数据建模和存储的标准。一旦你知道基本的 SQL,你可以轻松地使用任何 NoSQL 或对象关系映射(ORM)系统。SQL 是一种非常形式化的存储,操作和访问数据的方式,向你提供了一种思考它的形式化方式。这也不是很困难,因为这个语言并不像完整的编程语言那样图灵完备。 + +SQL 无处不在,我不是因为我想让你使用它而这么说。这只是一个事实。我敢打赌,现在你的口袋里有一些 SQL。所有 Android 手机和 iPhone 都可以轻松访问名为 SQLite 的 SQL 数据库,手机上的许多应用程序都可以直接使用它。它撑起了银行,医院,大学,政府,小企业和大型企业;这个星球上的每个计算机,和每一个人最终都会接触一些运行 SQL 的东西。SQL 是一个非常成功和健壮的技术。 + +SQL 的问题是,每个人似乎都讨厌它的本质。大多数程序员不能忍受,这是一种奇怪的笨拙的“非语言”。在任何现代问题很久之前,比如“网络规模”或面向对象编程,他就被设计了出来。尽管基于坚实的数学构建的操作理论之上,但是它有令人讨厌的足够的错误。树?嵌套对象和父子关系?SQL只是嘲笑你,给你一个大型的扁平的表,说“你弄清楚它吧,兄弟”。 + +如果每个人都如此讨厌它,为什么要学习 SQL?因为这个假设的仇恨背后,是缺乏对 SQL 的理解以及如何使用它。部分 NoSQL 运动是对过时数据库服务器的反应,也是对 SQL 的恐惧的反应,它来源于对其工作原理的忽视。通过学习 SQL,你实际上将学习一些重要理论概念,它们适用于过去和现在几乎所有数据存储系统。 + +无论 SQL 仇恨者声称什么,你应该学习 SQL,因为它是无处不在的,实际上并不足够难以学习。成为博学的 SQL 用户,将帮助你为要使用的数据库做出明智的决定,无论是否使用 SQL,并且作为程序员,更深入地了解你使用的许多系统。 + +## SQL 是什么? + +我将 SQL 读作“Sequal”,但如果你愿意也可以读作“S-Q-L”。SQL 也代表结构化查询语言,但现在还没有人甚至关心,因为那只是一个营销手段。SQL 所做的事情,只是为你提供了一种语言,用于与数据库中的数据交互。然而,它的优势在于,它匹配了许多年前建立的理论,定义了良好结构化数据的属性。这不完全相同(一些诋毁者感叹它),但它足够有用。 + +> 译者注:不要理会那些让你读成“S-Q-L”的人,就算标准是这样,你可以把“Sequal”当做别名。 + +SQL 的工作原理是,它了解表中的字段,以及如何根据字段的内容在表中查找数据。所有 SQL 操作都是你对表执行的四个常规操作之一: + +| 名称 | 中文缩写 | 首字母 | 意义 | +| --- | --- | +| 创建 | 增 | C | 将数据放入表中 | +| 读取 | 查 | R | 从表中查询数据 | +| 更新 | 改 | U | 修改已经在表中的数据 | +| 删除 | 删 | D | 从表中移除数据 | + +这缩写为“CRUD”,被认为是每个数据存储系统必须具备的基本功能。事实上,如果你不能以某种方式来执行这四种之一,那么最好有一个很好的理由。 + +> 译者注:一些人把它们简写为 CURD 或者 CRUD,其实都是一样的。 + +我喜欢通过将其与 Excel 等电子表格软件进行比较,来解释 SQL 的工作原理: + ++ 数据库是整个电子表格文件。 ++ 表格是电子表格中的标签/表格,每个表格都有一个名称。 ++ 列就是列。 ++ 行就是行。 ++ 然后,SQL为你提供了一种语言,用于对其进行 CRUD 操作,来生成新表或更改现有表。 + +最后一条是重要的,不了解这个会使人们产生问题。SQL 只知道表,每个操作都生成表。它通过修改现有表来“生成”表,或者返回一个新的临时表作为数据集。 + +在阅读本书时,你将开始了解此设计的意义。例如,面向对象语言与 SQL 数据库不匹配的原因之一是,OOP 语言围绕图来组织,但 SQL 只希望返回表。虽然可以将几乎任何图形映射到表格,反之亦然,但它为 OOP 语言增加了翻译负担。如果 SQL 返回一个嵌套数据结构,那么这不会是一个问题。 + +## 起步 + +我们将使用 SQLite3 作为本节的练习工具。SQLite3 是一个完整的数据库系统,具有几乎无需设置的优点。你只需下载一个二进制文件,就像大多数其他脚本语言一样使用它。有了它,你将能够学习 SQL,而不会卡在数据库服务器的管理。 + +安装 SQLite3 很简单: + ++ 请访问 [SQLite3](http://www.sqlite.org/download.html) 下载页面,并为你的平台获取二进制文件。寻找“Precompiled Binaries for X”,X 是你的操作系统的首选项。 ++ 或使用你的操作系统的软件包管理器进行安装。如果你使用 Linux ,那么你知道这是什么意思。如果你使用 macOS ,那么首先得到一个包管理器,然后使用它来安装 SQLite3。 + +安装完成后,请确保你可以启动命令行并运行它。这是一个快速测试,你可以尝试: + +``` +$ sqlite3 test.db +SQLite version 3.7.8 2011-09-19 14:49:19 +Enter ".help" for instructions +Enter SQL statements terminated with a ";" +sqlite> create table test (id); +sqlite> .quit +``` + +然后看到`test.db`文件在那里。如果它可以工作,那么你就完成了。你应该确保你的 SQLite3 版本与我在这里的版本相同:3.7.8。有时,旧版本的东西不能正常工作。 + +## 学习 SQL 词汇 + +要开始学习SQL,你需要为这些 SQL 术语创建速记卡(或使用 Anki)。在这之后的练习中,你将学习这些 SQL 语句,并将其应用于不同的问题。思考 SQL 语言的最佳方法是,将所有东西看做`CREATE`,`READ`,`UPDATE`和`DELETE`操作。即使一个单词是`INSERT`,你仍然会将其视为`CREATE`操作,因为它将创建数据。首先,只要花一些时间记住这些单词,并继续研究,就像本节的练习一样。 + +> `CREATE` + +> 创建数据库的表格,可以储存数据的列。 + +> `INSERT` + +> 向数据库表格添加行,并填充在数据的列中。 + +> `UPDATE` + +> 修改表中的一列或者多列。 + +> `DELETE` + +> 从表中删除一行。 + +> `SELECT` + +> 查询一个表或一系列表,返回带有结果的临时表。 + +> `DROP` + +> 销毁一个表。 + +> `FROM` + +> SQL 语句的常见部分,用于指定要使用表的那些列。 + +> `IN` + +> 用于表示元素集合。 + +> `WHERE` + +> 用在查询中,来表示一些东西应该来自哪里。 + +> `SET` + +> 用在更新中,来表示哪一列修改成什么。 + +## SQL 语法 + +接下来,你将为 SQL 的另一组重要语法结构创建速记卡。他们不会太多,但是写下它们(或使用 Anki),并开始研究他们,以便你更快地学习语言。你正在学习的语法用于 SQLite3,我们将在本书中使用它。这是一个相当普遍的 SQL 语法,但每个数据库都有不同的奇怪的偏好,你必须学习它。一旦了解它,很容易弄清楚另外一个数据库的用法。 + +你将需要访问 [SQLite 3 定义页面](https://sqlite.org/lang.html)来创建所需的卡。该页面列出了 SQLite 了解的所有内容,但仅关注上面列出的主要语句。添加你不明白的其他任何单词。他们的图表有点复杂,但它们只是 SQL BNF 的图形视图,你在第五部分中了解了它们。如果你不记得 ABNF,返回第五部分并重新学习。 + +## 深入学习 + ++ 访问 SQLite3 语法列表并浏览所有可用的命令。他们中的大多数都不会有意义,但是如果你有任何兴趣,那么你也可以为他们做速记卡。 ++ 在完成剩余练习的整个时间里,研究这些速记卡。 -- GitLab