SQL必知必会
陈旸
清华大学计算机博士
立即订阅
10179 人已学习
课程目录
已完结 49 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词丨SQL可能是你掌握的最有用的技能
免费
第一章:SQL语法基础篇 (19讲)
01丨了解SQL:一门半衰期很长的语言
02丨DBMS的前世今生
03丨学会用数据库的方式思考SQL是如何执行的
04丨使用DDL创建数据库&数据表时需要注意什么?
05丨检索数据:你还在SELECT * 么?
06丨数据过滤:SQL数据过滤都有哪些方法?
07丨什么是SQL函数?为什么使用SQL函数可能会带来问题?
08丨什么是SQL的聚集函数,如何利用它们汇总表的数据?
09丨子查询:子查询的种类都有哪些,如何提高子查询的性能?
10丨常用的SQL标准有哪些,在SQL92中是如何使用连接的?
11丨SQL99是如何使用连接的,与SQL92的区别是什么?
12丨视图在SQL中的作用是什么,它是怎样工作的?
13丨什么是存储过程,在实际项目中用得多么?
14丨什么是事务处理,如何使用COMMIT和ROLLBACK进行操作?
15丨初识事务隔离:隔离的级别有哪些,它们都解决了哪些异常问题?
16丨游标:当我们需要逐条处理数据时,该怎么做?
17丨如何使用Python操作MySQL?
18丨SQLAlchemy:如何使用Python ORM框架来操作MySQL?
19丨基础篇总结:如何理解查询优化、通配符以及存储过程?
第二章:SQL性能优化篇 (18讲)
20丨当我们思考数据库调优的时候,都有哪些维度可以选择?
21丨范式设计:数据表的范式有哪些,3NF指的是什么?
22丨反范式设计:3NF有什么不足,为什么有时候需要反范式设计?
23丨索引的概览:用还是不用索引,这是一个问题
24丨索引的原理:我们为什么用B+树来做索引?
25丨Hash索引的底层原理是什么?
26丨索引的使用原则:如何通过索引让SQL查询效率最大化?
27丨从数据页的角度理解B+树查询
28丨从磁盘I/O的角度理解SQL查询的成本
29丨为什么没有理想的索引?
30丨锁:悲观锁和乐观锁是什么?
31丨为什么大部分RDBMS都会支持MVCC?
32丨查询优化器是如何工作的?
33丨如何使用性能分析工具定位SQL执行慢的原因?
34丨答疑篇:关于索引以及缓冲池的一些解惑
35丨数据库主从同步的作用是什么,如何解决数据不一致问题?
36丨数据库没有备份,没有使用Binlog的情况下,如何恢复数据?
37丨SQL注入:你的SQL是如何被注入的?
第三章:认识DBMS (7讲)
38丨如何在Excel中使用SQL语言?
39丨WebSQL:如何在H5中存储一个本地数据库?
40丨SQLite:为什么微信用SQLite存储聊天记录?
41丨初识Redis:Redis为什么会这么快?
42丨如何使用Redis来实现多用户抢票问题
43丨如何使用Redis搭建玩家排行榜?
44丨DBMS篇总结和答疑:用SQLite做词云
第四章:SQL项目实战 (3讲)
45丨数据清洗:如何使用SQL对数据进行清洗?
46丨数据集成:如何对各种数据库进行集成和转换?
47丨如何利用SQL对零售数据进行分析?
结束语 (1讲)
结束语 | 互联网的下半场是数据驱动的时代
SQL必知必会
登录|注册

02丨DBMS的前世今生

陈旸 2019-06-14
上一讲我们介绍过两个 IBM 研究员在 1974 年发表了一篇有关结构化英语查询语言的论文,并将这门语言命名为 SEQUEL。SEQUEL 的语言标准是开放的,但是围绕它的商业化竞争却从来没有停止过。首先因为商标之争,SEQUEL 改名为 SQL,后来有一个重量级的公司基于那篇论文研发出了商业化的数据库管理软件,这就是 Oracle。自此之后,又诞生了一堆大家熟知的 DBMS,比如 MySQL、SQL Server、PostgreSQL、DB2 和 MongoDB 等。
我们今天了解一下这些数据库管理软件,也就是 DBMS。为什么需要了解它们呢?因为在工作中,我们通常都是和这些数据库管理软件打交道,只不过 SQL 是它们的通用语言。
今天我们先从 SQL 语言中跳脱出来,来分析下这些 DBMS。关于今天的内容,你可以从以下几个方面进行思考:
主流的 DBMS 都有哪些,它们各自都有哪些特点;
既然 SQL 是通用的标准语言,为什么能存在这么多 DBMS;
从这些 DBMS 的发展史中,你有哪些感悟。

DB、DBS 和 DBMS 的区别是什么

说到 DBMS,有一些概念你需要了解。
DBMS 的英文全称是 DataBase Management System,数据库管理系统,实际上它可以对多个数据库进行管理,所以你可以理解为 DBMS = 多个数据库(DB) + 管理程序。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《SQL必知必会》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(53)

  • Berry Wang 置顶
    老师好,文章中有句话不太理解,“列式数据库是将数据按照列存储到数据库中,这样做的好处是可以大量降低系统的 I/O”,这里降低系统I/O,老师能解释下吗?

    作者回复: 行式存储是把一行的数据都串起来进行存储,然后再存储下一行。
    同样,列式存储是把一列的数据都串起来进行存储,然后再存储下一列。
    这样做的好处,就是相邻的数据的数据类型是一样的,因此也更容易压缩。压缩之后就自然降低了IO

    2019-06-14
    1
    67
  • 格非 置顶
    @王鹏飞Tbb,我的理解是:列式数据库将数据按照列进行存储,因为每列的数据格式是相同的,在存储过程时,可以使用有效的压缩算法进行压缩存储,在读取时,可以只读取需要的列到内存中,但如果是行式数据库,就需要将整行数据读入内存中,所以说列式数据库按照列式存储数据会大量降低系统的IO

    作者回复: 对的 大家都可以看下这个回答

    2019-06-14
    1
    39
  • 猴子哥🐒 置顶
    老师好,文章中的思维导图是否用xmind做的呢?能否在以后的课程中将源文件上传上来呢?

    作者回复: 可以 我放到这里了 https://github.com/cystanford/SQL-XMind

    2019-06-14
    12
  • 逗逼师父
    按照我的使用频率排序:MySQL,Redis, MongoDB, ES, MariaDB, SQLite, PostgreSQL, Oracle

    平时就是MySQL用的最多,NoSQL中Redis和MongoDB容易上手,ES这个鬼就很折磨人,查询语句变态,瞬间能够明白为啥NoSQL最终演化为了No, SQL 。虽然MongoDB容易很多,但是它也是专有的查询语言,如果遇到因某种原因要跟换底层数据库的时候,很可能意味着要重写比较多的代码。

    我个人理解SQL就像面向对象里的接口,而各个DBMS是具体的实现。

    2019-06-14
    14
  • 程序员人生
    根据川杰的问题,“请问时序数据库主要用于什么场景?”。分享一点点经验,我曾经用时序数据库保存实时采集到的监控数据(grapihte+grafana)。由于它的存储格式是时间序列-指标值的形式,所以比较方便地在事后查找是哪个时间点开始异常。
    2019-06-14
    8
  • 雨先生的晴天
    请问云计算中,(亚马逊的AWS, 谷歌的BigQuery) 是用的哪一种DBMS呀? 或者说他们本身就在提供DBMS系统。
    2019-06-14
    2
    8
  • 疯狂青蛙
    刚毕业时使用delphi开发,当时用的就是sql server 2000,因为express版本有存储的大小限制,直接用的企业版本,后来转.net开发后做医疗产品,开始接触oracle,医院数据信息量很大,稳定性要求很高,当时数据库90%都是oracle,也有一些老项目用的DB2,再后来从事互联网+医疗产品开发,服务云化,开始使用mysql做存储管理,这期间还涉及了MongoDB的开发,在特定的文档存储上使用MondoDB。

    作者回复: 很好的经历分享

    2019-06-14
    6
  • 川杰
    请问时序数据库主要用于什么场景?
    2019-06-14
    1
    5
  • 乘坐Tornado的线程魔法师
    请教下老师,为什么Mongo相对来说支持高并发要优于MySQL?比如从数据结构的角度讲
    2019-06-14
    3
  • leslie
    主流关系型数据库:作者似乎漏了sybase吧。sybase和sql server 最初是差不多的东西:他们最初的关系和今天的mysql类似,唯一的区别是两家都是商业型数据库,mysql的分支是开源。
    因为一些事情分成了两家,故而非常明显的是两者对T-SQL一直支持率非常高。深入学习sql server挖过它的历史:2010刚好公司两种数据库同时使用和维护时用过一段sybase,利用sql server的基础去学习几乎非常轻松。
    2019-06-14
    3
  • 君莫惜
    SQL值的是关系型数据库(Mysql,sql server,oracle)
    NoSQL包括: 键-值数据库(Redis)、文档型数据库(MongoDB)、搜索引擎数据库(electsearch)、列式存储型数据库
    2019-06-14
    2
  • JackPn
    我们公司用了ceph替换了HBase作为文件存储的数据库,我刚入职不久还不太清楚这俩东西,老师能说一下这两个的区别吗?转正答辩的时候说不定会被问,我得从技术的角度搞清楚公司为啥这么做
    2019-06-14
    2
  • 未来的胡先森
    用过的数据库管理系统有:Access、SQL server、MySQL。
    对于 SQL 语言统一但是还是有这么多 DBMS ,我的认为是:
    各个公司都在某一方面开发了自己独特的功能或特色,大公司都不愿意在数据库这一重要领域失去自己的市场份额,而单一的数据库并不能满足所有的市场需求最终诞生了不同的 DBMS,为了降低用户更换软件的成本都遵循了 SQL 的标准。

    作者回复: 对的 都遵循SQL标准,但在实现的方式上各有特色,同时针对不同的使用场景有不同的解决方案

    2019-06-14
    2
  • 山水人天
    报告老师,我有问题:acess 适用于什么规模的软件开发呢?如果开发的数据库需求大概在两万条数据左右的话,使用acess能否满足要求?
    2019-06-14
    1
    2
  • Hoo-Ah
    还是第一次知道列式存储,看介绍说列式存储容易被压缩,那么把行式存储横着压缩会不会也比较容易压缩?
    2019-06-14
    1
    1
  • ABC
    用过MySQL,PostgreSQL,H2,MongoDB,Oracle,SQlite。平时用的比较多的就是MySQL,H2,MongoDB,SQLite。各有不同用处,比如测试的时候会比较喜欢H2,上线的时候会用MySQL或者MongoDB,在做一些小应用的时候会用SQLite。
    2019-06-14
    1
  • 高泽林
    还不知道有区别的,失误了!
    2019-12-11
  • 丁丁历险记
    如果我开公司,就会转maraidb

    作者回复: 恩 各有优势,选择适合自己的就好

    2019-11-07
  • 爱思考的仙人球
    关系型数据库,我用起来应该都没有问题,毕竟SQL92和SQL99标准基本上是统一的。

    作者回复: 对 基本上差不多,不过也有方言

    2019-10-14
  • whaleFall_
    我使用过HBase,它采用的就是列式存储,为啥要有列式存储呢?比如我们只想查询某一列数据,如果使用行式存储,由于数据库现在大都是分布式的,我们查询的时候就会存在大量IO。请教下老师,这样理解对吗?
    2019-10-12
收起评论
53
返回
顶部