了解SQL

SQL的两个重要标准是SQL92和SQL99.

SQL语言的划分

  1. DDL,也叫Data Definition Language,也就是数据定义语言,用来定义数据库对象,包括数据库、数据表和列. 通过DDL,可以创建、删除和修改数据库和表结构
  2. DML,也叫Data Manipulation Language, 数据操作语言,用它来操作和数据库相关的记录,包括了增加、删除、修改数据表中的记录.
  3. DCL,也叫Data Control Language,数据控制语言,用来定义访问权限和安全级别.
  4. DQL,也叫Data Query Language,数据查询语言,用它来查询想要的记录,是SQL语言的重中之重,也是学习的重点.

SQL开始

SQL是我们与DBMS(数据库管理系统)交流的语言,在创建DBMS之前,需要对它进行设计,对于RDBMS(关系数据库管理系统)来说采用的是ER图(Entity Relationship Diagram),即实体-关系图的方式进行设计, ER图评审通过,再用SQL语句或者可视化管理工具(如Navicat)创建数据表.

实体 - 关系是描述现实世界的概念模型,该模型有三个要素: 实体、属性、 关系.

实体是需要管理的对象, 属性是标识每个实体的属性, 关系则是对象之间的关系.

SQL大小写的规范
  1. 表名、表别名、字段名、字段别名等都小写
  2. SQL保留字、函数名、绑定变量等都大写

SELECT name, hp_max FROM heros WHERE role_main = '战士'

DBMS的前世今生

DB、DBS和DBMS的区别

DBMS的英文全称是DataBase Management System,数据库管理系统,时机上是对多个数据库进行管理,所以可以理解为 DBMS = 多个数据库(DB) + 管理程序.

DB的英文是DataBase,也就是数据库.数据库是存储数据的集合,可以理解为多个数据表.

DBS的英文是DataBase System,数据库系统.是更大的概念,包括了数据库、数据库关系系统以及数据库管理人员DBA.

注意的是我们通常叫MySQL、Oracle等称之为数据库,准确的来说,他们应该是数据库管理系统,也就是DBMS.

排名前二十的DBMS

了解了DBMS的概念之后,当下主流的DBMS都有哪些? 看下图,是2019年5月DB-Engine公布的DBMS的排名:

排名可以看出,关系型数据库绝对是DBMS的主流,使用最多的DBMS分别是Oracle、MySQL和SQL Server.

关系型数据库(RDBMS)是建立在关系模型基础上的数据库,SQL就是关系型数据库的查询语言.

相对于SQL,NoSQL泛指非关系型数据库,包括了榜单上的键值型数据库数据库、文档型数据库、搜索引擎和列存储等,除此以外还包括图形数据库.

键值型数据库通过key-value键值的方式来存储数据,其中key和value可以是简单的对象,也可以是复杂的对象.key作为唯一标识符,有点事查找速度快,这方面明显优于关系型数据库,同事缺点也很明显,无法像关系型数据库一样自由使用条件过滤(比如WHERE),如果不知道去那里查找数据,就要遍历所有的键,需要消耗大量的计算.键值型数据库典型的使用场景就是作为内容缓存. Redis是最流行的键值型数据库.

文档型数据库用来管理文档,在数据库中文档作为处理信息的基本单位,一个文档就相当于一条记录,MongoDB是最流行的文档型数据库.

搜索引擎也是数据库检索中的重要应用,常见的全文搜索引擎有Elasticsearch、Splunk和Solr. 虽然关系型数据库采用了索引提升搜索效率,但是针对全文索引效率却极低.搜索引擎的优势在于采用了全文索引的技术,核心原理是"倒排索引".

列式数据库是相对于行式存储的数据库,Oracle、MySQL、SQL Server等数据库都是采用的行式存储(Row-based),而列式数据库是将数据按照列式存储到数据库中,这样做的好处是可以大量降低系统的I/O,适合于分布式文件系统,不足在于功能相对有限.

图形数据库,利用了图这种数据结构存储了实体(对象)之间的关系.最典型的例子就是社交网络中人与人的关系,数据模型主要是以节点和边(关系)来实现,特点在于能高效地解决复杂的关系问题.

SQL阵营和NoSQL阵营

NoSQL的分类很多,刚才提到的键值型、文档型、搜索引擎、列式存储和图形数据库等都属于NoSQL阵营.也只有用NoSQL一次才能将这些技术囊括进来.即使如此,在DBMS排名中,还是SQL阵营的比重更大,影响力前五的DBMS中有4个是关系型数据库,而排名前20的DBMS中也有12个是关系型数据库.所以说SQL还是非常重要的.

NoSQL的演变:

  • 1970: NoSQL = We have no SQL
  • 1980: NoSQL = Know SQL
  • 2000: NoSQL = No SQL
  • 2005: NoSQL = Not only SQLL
  • 2013: NoSQL = No, SQL

NoSQL对SQL做了很好的补充,所以说NoSQL在当下的时代还是很重要的.

SQL阵营的DBMS

1979 年,Oracle 2 诞生,它是第一个商用的 RDBMS(关系型数据库管理系统),随后被卖给了军方客户。随着 Oracle 软件的名气越来越大,公司也改叫 Oracle 公司。20 世纪 90 年代,Oracle 的创始人埃里森成为继比尔·盖茨之后第二富有的人,可以说 IBM 缔造了两个帝国,一个是软件业的霸主微软,另一个是企业软件市场的霸主 Oracle。如今 Oracle 的年收入达到了 400 亿美金,足以证明商用数据库软件的价值。从这点我们也能看出,如果选择了一个大的赛道,就要尽早商业化,占据大型企业客户完全可以创建巨大的商业价值,也足以证明一个软件企业不需要靠卖硬件也可以挣到很多钱。

MySQL 是 1995 年诞生的开源数据库管理系统,因为免费开源的特性,得到了开发者的喜爱,用户量迅速增长,成为开源数据库的 No.1。但在发展过程中,MySQL 先后两次被易手,先是在 2008 年被 SUN 收购,然后在 2010 年 SUN 被 Oracle 收购,于是 Oracle 同时拥有了 MySQL 的管理权,至此 Oracle 在数据库领域中成为绝对的领导者。从这里我们也能看到,虽然 MySQL 是免费的产品,但是使用人数多,就足以证明巨大的用户价值。一个有巨大用户价值的产品,即使没有直接的商业价值,但作为基础设施也会被商业巨头看上。

不过在 Oracle 收购 MySQL 的同时,MySQL 的创造者担心 MySQL 有闭源的风险,因此创建了 MySQL 的分支项目 MariaDB,MariaDB 在绝大部分情况下都是与 MySQL 兼容的,并且增加了许多新的特性,比如支持更多的存储引擎类型。许多企业也由原来的 MySQL 纷纷转向了 MariaDB。

SQL Server 是微软开发的商业数据库,诞生于 1989 年。实际上微软还推出了 Access 数据库,它是一种桌面数据库,同时具备后台存储和前台界面开发的功能,更加轻量级,适合小型的应用场景。因为后台的存储空间有限,一般只有 2G,Access 的优势在于可以在前台便捷地进行界面开发。而 SQL Server 是大型数据库,用于后台的存储和查询,不具备界面开发的功能。从这里我们也能看出,即使 SQL 语言是通用的,但是为了满足不同用户的使用场景,会存在多个 DBMS。比如 Oracle 更适合大型跨国企业的使用,因为他们对费用不敏感,但是对性能要求以及安全性有更高的要求,而 MySQL 更受到许多互联网公司,尤其是早期创业公司的青睐。

Oracle 作为市场占有率最高的商用数据库软件,适合大型的跨国企业,而针对轻量级的桌面数据库,我们采用 Access 就可以了。对于免费开源的产品来说,可以选用 MySQL 或者 MariaDB。同时在 NoSQL 阵营中,我们也需要了解键值型、文档型、搜索引擎、列式数据库和图形数据库的区别。

SQL的概念与发展 - 极客时间学习笔记的更多相关文章

  1. Mysql中的sql是如何执行的 --- 极客时间学习笔记

    MySQL中的SQL是如何执行的 MySQL是典型的C/S架构,也就是Client/Server架构,服务器端程序使用的mysqld.整体的MySQL流程如下图所示: MySQL是有三层组成: 连接层 ...

  2. MYSQL实战-------丁奇(极客时间)学习笔记

    1.基础架构:一条sql查询语句是如何执行的? mysql> select * from T where ID=10: 2.基础架构:一条sql更新语句是如何执行的? mysql> upd ...

  3. MySQL的过滤(极客时间学习笔记)

    数据过滤 SQL的数据过滤, 可以减少不必要的数据行, 从而可以达到提升查询效率的效果. 比较运算符 在SQL中, 使用WHERE子句对条件进行筛选, 筛选的时候比较运算符是很重要. 上面的比较运算符 ...

  4. java并发编程实践——王宝令(极客时间)学习笔记

    1.并发 分工:如何高效地拆解任务并分配给线程 同步:线程之间如何协作 互斥:保证同一时刻只允许一个线程访问共享资源 Fork/Join 框架就是一种分工模式,CountDownLatch 就是一种典 ...

  5. MySQL的select(极客时间学习笔记)

    查询语句 首先, 准备数据, 地址是: https://github.com/cystanford/sql_heros_data, 除了id以外, 24个字段的含义如下: 查询 查询分为单列查询, 多 ...

  6. DDL创建数据库,表以及约束(极客时间学习笔记)

    DDL DDL是DBMS的核心组件,是SQL的重要组成部分. DDL的正确性和稳定性是整个SQL发型的重要基础. DDL的基础语法及设计工具 DDL的英文是Data Definition Langua ...

  7. Mysql实战45讲 06讲全局锁和表锁:给表加个字段怎么有这么多阻碍 极客时间 读书笔记

    Mysql实战45讲 极客时间 读书笔记 Mysql实战45讲 极客时间 读书笔记 笔记体会: 根据加锁范围:MySQL里面的锁可以分为:全局锁.表级锁.行级锁 一.全局锁:对整个数据库实例加锁.My ...

  8. Mysql实战45讲 05讲深入浅出索引(下)极客时间 读书笔记

    极客时间 Mysql实战45讲 04讲深入浅出索引(下)极客时间 笔记体会: 回表:回到主键索引树搜索的过程,称为回表覆盖索引:某索引已经覆盖了查询需求,称为覆盖索引,例如:select ID fro ...

  9. mysql实战45讲 (三) 事务隔离:为什么你改了我还看不见 极客时间读书笔记

    提到事务,你肯定不陌生,和数据库打交道的时候,我们总是会用到事务.最经典的例子就是转账,你要给朋友小王转100块钱,而此时你的银行卡只有100块钱. 转账过程具体到程序里会有一系列的操作,比如查询余额 ...

随机推荐

  1. thinkphp3.2生成二维码

    public function createCode() { Vendor('phpqrcode.phpqrcode'); $object = new \QRcode(); $url = 'http: ...

  2. python 指定字符串位置查找

    指定字符串位置查找 #指定字符查找 s = 'F:/my_pycharm/pycharm_project/CSV表格/10.csv' print(s.find('/')) # 2, 第一个/在2位置 ...

  3. .Net Core使用Swagger来对接口文档化

    参考文档来源:https://www.cnblogs.com/yilezhu/p/9241261.html 官方地址 https://swagger.io/ 代码即接口文档,接口文档即代码 使用.ne ...

  4. Ubuntu 18.04安装Conda、Jupyter Notebook、Anaconda

    1.Conda是一个开源的软件包管理系统和环境管理系统,它可以作为单独的纯净工具安装在系统环境中,有的python库无法用conda获得时,conda允许在conda环境中利用Pip获取包文件.可以将 ...

  5. JSP中 JSTL和EL标签的使用

    使用JSTL前的准备 想要使用JSTL,首先需要给工程导入JSTL的包(JSTL.jar和standard.jar). JSTL简介 JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应 ...

  6. DRF的基本使用(一)

    本帖最后由 杰哥,我就服你 于 2018-12-20 13:22 编辑 Django rest framework(DRF) D:是一个用于构建Web API强大又灵活的框架,基于Django框架二次 ...

  7. 如何在Pycharm中添加新的模块

    在使用Pycharm编写程序时,我们时常需要调用某些模块,但有些模块事先是没有的,我们需要把模块添加上去. 最近在学习爬虫,写了下面几行代码: 结果出现错误 错误ModuleNotFoundError ...

  8. lstm和gru详解

    一.LSTM(长短期记忆网络) LSTM是一种特殊的RNN类型,一般的RNN结构如下图所示,是一种将以往学习的结果应用到当前学习的模型,但是这种一般的RNN存在着许多的弊端.举个例子,如果我们要预测“ ...

  9. SpringBoot之异步定时任务

    如果每个Scheduled方法是同步执行的,万一有一个发生死锁,那么其他任务就没法执行,下面介绍异步定时任务 异步定时任务 Spring为任务调度与异步方法执行提供了注解支持,即通过在方法上设置@As ...

  10. CF1225C p-binary

    CF1225C p-binary 洛谷评测传送门 题目描述 Vasya will fancy any number as long as it is an integer power of two. ...