您好，欢迎阅读我们关于 SQL 的讲座。
所以这是一个非常
非常简短的 SQL 介绍。
我喜欢 SQL。 前几
天我和一个学生说话，他们说，
“SQL 是我最喜欢的语言。”
我说，“我必须同意
SQL 也是我最喜欢的语言。”
因为 SQL 非常漂亮，
你甚至不需要在 SQL 中编写循环，所以
我们用
Python 这样的语言编写循环，只是因为我们必须这样做。
问题在于 SQL 是完美的，
但它不是我们可以编写像
Linux 或 Python 这样复杂的东西的方式。
所以 SQL 并不是真正的计算机的想法，
我们有这些东西叫做数据库引
擎，这些数据库引擎
使事情非常好。
所以 SQL 是组织数据的好方法，
但是很多工作都在
保持这些数据的组织并使其变得简单。
所以就像有这个抽象
，这是一个很大的工作来使抽象工作。
所以我想从
数据库之前的一点历史开始，
你可能会想，“好吧，在
数据库之前，怎么可能呢？”
在过去的时候，
如果你看电脑的旧电影，
你会看到
背景有这些磁带机的照片，它们正在旋转。
磁带机的旋转就是一
种计算的物理表现。
事实上，在过去的时候，
计算机没有足够的数据
来存储它们的所有数据在内存或磁盘上，
我们在早期甚至没有磁盘。
早期，磁带就是我们所
拥有的，我们使用的是音频磁带的变化，
而不是音频，
它们包含了数据，零和 1。 所
以在过去的时候，事情的工作方式
让你能有一个数据库，就像它一样，
是数据库是
你所有的数据记录在磁带上。
磁带的关键在于
它是一个物理的东西
，所以你必须倒带它，
前进和后退。
你们中的大多数人
甚至从来没有见过磁带、八轨
带或卷轴到卷带，
但它是一个物理长千英尺的塑料片，最
后要获取数据，
你必须旋转它，直到你到达那里。
所以这不是我们所说的随机存
取，也就是说，在随机存取中，无论是内存还是磁盘驱动器，随机存取都可以让你
在固定的时间内到达任何地方。
然而，如果你接近磁带上的某些东西，
你可以很快地获得它。
如果你很远，你得走，
然后等待，然后回来。
所以这导致了一种模式
，每天晚上我们都
会从昨天的帐户余额中采取磁带。
我们只是说我们是一家银
行，我们有人来到窗户，
投入钱，拿钱。
然后我们要做的是把所有的
交易，有时候放在身体上打孔的卡片上，
然后我们对它们进行排序，对不对？
假设我们有 26 个帐户，C 人出现
了加 10 美元，F
出现并减去 10 美元，等等等。
然后我们晚
上会有什么，我们会得到这些所有的排序，而且有物理机器可以在最早的天，
然后我们将有旧的平衡，
A，B，C，D，
E，F，坐在磁带上顺序，按顺序排序。
我们会在银行关闭之后开始一个过程，
我们可以从磁带上读取第一条记录像 A，
我们会读出卡片上的第一笔交易，然后
我们将它们进行比较。
如果磁带
早于交易
或更低，我们只会复制它，所以我们会复制它。
然后 B 会比较 C，
B 会被复制，
然后 C 会遇到，然后
我们会意识到 C 数据，我
们将不得不更新 C 数据，
并将 10 美元添加到余额，然后我们写这个。
当我们写这篇文章时，你会注意到，
我们正在排序，它是按排序顺序排序的。
然后我们会复制 D，我们没有 D
，它只会被复制。
我们会复制 E，我们没有 E，
它只是被复制，
然后我们会，哎呀，忘了把 F 放在这张照片上，
我们将有 F，我们减去 10，然后我们会复制它。
然后我们会完成
那个晚上我们
必须做的事情，然后我们要做的就是我们得到
这些新的更新数据，它们
都按帐户顺序排序。
然后第二天晚上，
我们会移动磁带，
新的磁带将
是旧的磁带，我们会一遍又一遍地做到这一点。 有时
候这些过程会运
行四
到五个小时，因为磁带很长，或者它必须是多个磁带，
所以大量的计算是
在银行五点钟关闭之后完成
的，然后一群人会进来，
我们叫
他们操作员，他们将安装这些磁带并运行
这些作业，然后坐在那里，看着
数据
从一个磁带复制到另一个磁带时旋转。
所以是的，这是相当酷的。 值得
庆幸的是，我们不再是这样做的。
使我们不必做到
这一点的原因是磁盘驱动器的发明。
磁盘驱动器是磁性介质，
就像磁带驱动器一样，
但不同之处在
于它们在这些旋转盘上。
所以你可以做的是数据
是在这些盘子上的一系列同心圆，
然后你有一
个脑袋可以快速进出。
所以你可以访问数据的
速度和
头部移动到某个圆柱体的速度的组合
，你必须等到数据出现。
所以有时候你会有 5,400 转每分钟。
所以这意味着每分钟 5,400
次，每秒五千
次，这是 100 次。
你会等一百秒钟的时间
所以这比等待像一分半，
两分钟甚至 10 分钟旋转磁带更好。
所以问题
是，我们会这样
说，“好吧，现在我们拥有了这个奇妙的技术，
我们可以将所有夜间数据存储在
磁盘上，因为它有足够的空间，
我们该如何构建
技术来充分利用这些数据呢？”
大量的研究，大
量的计算机科学，
很多供应商的研究都开始了
解如何最好地利用这个新的磁盘。
我记得跟那些人说话，
因为我们以前使用的是软盘，
它们慢得多，
所以他们没有去 5,400。
所以它可能需要四分之一秒钟才能移动
头部，它可能需要
几乎一秒钟的时间来旋转它，
这仍然比 10 分钟快，对不对？
所以它就像一秒钟到达
软盘上的任何地方。
我们将构建存储数据的方法，
我们将从这个物理的东西开始，
你会听到它的
呼噜声，移动，呼叫和移动，
然后你会想出一个更好的方法来存
储数据，
然后它咕噜和移动更少，
你的东西会走得更快
所以这就像一个研究的东西。
这是很好的过去，电脑实际上发出噪音，
你可以在计算机内改变你的代码。
当然，我们做的第一件事就是
把那些顺序的主更新放在上面，
但这并不是最好的。
这就是一种研究，
不仅仅是我们如何做我们
以前对无法
随机访问的数据所做的事情，而
是说让我们利用它。
所以大量的研究，很多供应商，
人们买了很多非常昂贵的软件，说：
“你看，你是一家银行，
你真的真正想知道这是如何运作的。”
所以发生的事情发生在 60 年代和 70 年代，
计算机供应商在战斗，他
们会想出一种技术，与
我们目前的数据库技术相比，这
是微不足道
的，但那时花了很多工作，他
们会与其他计算机供应商
，他们会说，“我们的索引
顺序机制更好。”
供应商 2 会说，
“我们的网络方法更好。”
然后他们坐下来，
他们会相互挣扎，
然后穷人的顾客会这样，
“我甚至不知道你在说什么。”
所以他们只是
从那
个把他们带到高尔夫球或者享用最好的午餐或者带他们去佛罗里达州旅行的供应商那里买东西。
然后他们就会适应那个
供应商所做的任何事情
所以这真的有点吓人，因为我们正
在搬到一个你被锁在一个供应商的地方，然后一旦你被锁定在一个供应商，你的状况就很糟糕。
所以，
特别是美国政府有大量的
资金，购买了大量的计算机，用
于正常的数据处理和
战略性的东西，比如军事用品，
所以他们买了大量的计算机，
他们知道这些供应商，
如果他们达到了目标他们
将它们锁定在一个供
应商中，供应商只能决定价格。
因此，联邦政府通过 NIST，
国家标准和技术研究所，
决定数据库需要一个标准。
他们需要一种方法，以便我们
可以使用
相同的技术与任何供应商的数据库交谈，而不必做一个供应商，
然后如果你换
了供应商，你必须完全重写你的软件。
所以 NIST 没有指定这个抽象，
这个标准是如何工作的。
他们只
是让供应商进
来，并说：“如果您不想出标准，我们将停止使用您的软件。”
这是一个完美的时间，因为尽管
供应商认为一切都是完美和美好
的，但有很多好处。
特别是，有一
个关系数据库的概念，
当时它更多的是
一个数学理论，更好地存储
和检索数据，而不是
一种实际实现的可用技术。
所以 SQL，这是 Liz Fong，
我在 NIST 做了一个采访，
她谈
到了早期的时候，这是一个很棒的采访，早期的 SQL 标准是如何真正有意义的，真正解决了这个行业，并且让行业的运作非常好。
我建议你看
这段视频，只是让你可以看到。
现在，SQL 基本上说的是，
让我们不必担心
数据在磁盘上的实际位置，因为
早期的数据库方法是
我们程序员知道有
柱体和位置，
我们会以某种方式放置东西
，我们会创建索引
，我们会自己查看索引，
所有类型的不同的东西，
或者我们读到磁盘上的一个位置，这将
有一个
我们应该在磁盘上读取的下一个位置的地址。
他们说，你知道吗，
让我们不用担心
桌子上的物理存储结构，而是想
出一种语言，
我们可以用一种
非常简单的语言表达我们想要读取、写入、更新和删除的内容，
然后我们可以构建一个软件
，其下面可能有许多磁盘格式。
然后我们都可以使用这种语言，你可以
购买供应商 A 并使用
这种语言和供应商 B 并使用这种语言，
然后你甚至可以对其进行基准测试，说：
“这里有一堆用这种语言的东西。
哪个供应商可以更快地运行这个？”
所以 NIST 也有一系列的基准测试，
TPC 是一些基准。
所以他们所做的是他们基本上做到了
这样就像一个美丽而简单的语言
，这就是我们所说的 SQL。
我认为它在某些时候被称
为简单查询语言
，它是我们用来与数据库交谈的语言。
有趣的是 SQL 允许我们
在 60 年代和 70 年代真正做的事情，当它第一次出现时，
是与旧式的数据库交谈，比如索引，
顺序和网络式的数据库，以
及这种称为关系数据库的新形式，它
有这种令人敬畏的数学基础，
但第一次执行得很糟糕，
我们可以说，“哦，奇怪。”
当关系数据库的性能达到了与
其他数据库一样好的程度
时，我们可以切换，我们可以谈论相同的 SQL。
所以它允许在
10 年甚至 15 年的时间
里进行了惊人的创新，抽象使我们能够以
美妙的方式改进数据库，而不
必真正改变我们作为程序员使用它们的方式。
漂亮的 Dang 真棒，我会说实话。
所以我一直在谈论关
系数据库和关系数据库的概念，
我承认，当我第一次看到关
系数据库在 80 年代初，我很喜欢，
这是废话，因
为我再次听到软盘，我知道我
们正在移动一个东西我对正
在发生的事情有这么多的认识
，我喜欢这种认识。
关系数据库有点像隐藏
了这个层后面发生的事情，
事实证明，每当我使用它时，
它都会变慢，因为它还不聪明。
因此，关系数据库
开始作为一个数学概念，作为用
列、
行、连接和连接来表示数据网络的理论最佳方式，最
终我们将讨论所有这些。
这是一个美丽的想法，数学是正确的。
只是花了很长时间才能到达
关系数据库的卓越数学
比
上一代高度巧妙优化的数据库系统更好的地步。
因此，有很多常见的数据库系统
可以运行。 其中
一些是开源的，其中
一些是商业的。
Postgres 和 MySQL 是开源的。
Postgres 可能是更复
杂、更复杂和更丰富的，
Oracle 是一个复杂、复杂
和丰富的数据库，
可用于大量的资金，
微软有一个名为 SQL Server 的数据库。
在 SQL 规范存在之后，我们看到的所有这些数据库都在某种意义上演变，所
以它们只是一种构建的 SQL。
有类似于学习 SQL 的遗留数据库。
还有很多其他的数据库
SQLite 是我们实际上将在
这个课程中使用
的东西，它超级酷，超快。 在
你的手机上，
你可能有 40 个 SQLite 副本，
在你的车里，你可能有 40 个
SQLite 副本，因为它是一个真正的微小的嵌入式数据库。
这对于生产规模来说并不好。
当你有 100 个用户
同时点击一个网站时，
Postgres，MySQL，或者 Oracle 或 SQL Server 真的
是一种在线真正的多处理数据库。
但 SQLite 很棒，因为它非常简单。
它将
所有内容存储在一个文件中，我们可以移动文件等，所以我喜欢 SQLite
，在这个类中，
我们将讨论 SQLite。
但我们谈论的一切都
适用于所有这些不同的数据库系统。
所以，当你要使用数据
库时，你必须做的第一件事
就是
你和数据库之间的合同，关
于列的形状
，列有多宽，
你要在这里存储什么样的数据。
然后它通知
数据库软件将如何
构建该数据库，就像在磁盘上一样。
你正在做的一部分是
允许数据库软件，MySQL
或 Postgres，或 SQLite，超级优化其存储。
它比你聪明得多
像 Oracle 或 MySQL
或 Postgres 这样的东西可能代表了十亿美元的
研究和
开发，如果不是更多的话，那么有关
存储和检索数据的最佳方式。 而
且你甚至不需要知道任何这一点。
你只是说，看，我要有这些列，
它将有 100 个字符的文本，
然后我将有一个整数和一
个浮点数，然后 3000 个字符的文本，
你担心所有的细节。
但关键是，如果你只是说，
“我会存储我想要的任何
东西”，那么它就无法优化，所以你必须
在一开始就签订合同并说，
“这正是我在与数据
库系统交谈时将数据布局的方式。
然后你可以找出如何
在实际磁盘中布局数据。”
所以这叫做模式或数据库模型，构
建一个数据库模型本身就是一件很酷的事情。 所
以，如果你正在构建一个复杂的应用程序，
你有这些模型，它们有联系
，我们最终会讨论所有这些东西。
但是，关键的是，
这是您和
数据库软件之间的合同，以便数
据库软件能够
优化数据库的存储。
现在，一旦你给出了模式，
那么你就可以编写依赖于该模式的查询。
因此，您可能有一个名为
email 的列和一个名为 name 的列，
然后您可以
使用该模式将数据插入
数据库，您可以使用模式检索
数据，可以更改数据库内部深处的数据排序，
然后删除数据。
挂在一秒钟。 哇 嗨那里
你在那里干什么？ 哦，当它。
对不起，对不起 你是个坏生物
看看那个 我想知道那是什么噪音
过来 我得把你介绍给所有这些人
过来
你没有表现
所以这是谢尔比
嗨谢尔比 所以这是谢尔比 这是我的小狗
我试图让她
离开笼子让她坐在我的脚旁边
她有一些咀嚼玩具
嗨谢尔比 这是谢尔比
她在打扰
你打断了我的演讲 但你很可爱
所以不要咀嚼笔，
咀嚼我给你的咀嚼玩具，好吗？
让我通过这个讲座。
好吧，你可以下来。
只要放弃咀嚼就可以了。
对不起，狗的中断。
我只是听到咀嚼的声音，我想，
我拿走了所有东西，但后来
有一支笔在地板上
，所以笔，可怜的笔满足了小狗先生。
哦，好了。 好吧，我在哪里？
SQL。 CRUD，创建，读取
，更新和删除数据。
所以我们的下一步是
实际上做一些 SQL 并创建一个数据库。
[ 音乐]