了解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. [视频教程] 使用docker的方式安装redis

    直接使用docker拉取redis的镜像,并且进行端口映射与文件目录共享,这样可以直接在宿主机的端口上就可以进行访问了.其实本质上也是在一个简化版的ubuntu的容器内安装好的redis-server ...

  2. HTML&CSS基础-子元素和后代元素选择器

    HTML&CSS基础-子元素和后代元素选择器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.html源代码 <!DOCTYPE html> <html ...

  3. JAVA基础复习(重点)

    一. 初识Java编程 1.           Java开发环境 JDK Java开发工具 JVM Java虚拟机 JRE Java运行环境 2.实现第一个hello world public cl ...

  4. (二)Amazon Lightsail 部署LAMP应用程序之部署单片LAMP应用程序

    部署单片LAMP应用程序 简介:通过复制应用程序代码并提供链接PHP前端和本地MySQL数据库的参数,将LAMP对战应用程序部署到先前启动的Lightsail实例中.完成后,Apache/PHP前端和 ...

  5. kettle工具字符串替换

    原数据: 去掉括号内容(包括括号,或者替换为指定内容) 即可. 世界之大,这个东西,准确的说正则表达式,我搞了小半天!!!

  6. vs code 中配置git go

    { "window.zoomLevel": 1, "editor.fontSize": 15, //"files.autoSave": &q ...

  7. go语言的redis客户端

    redis3.0之后提供了新的HA的解决方案,即Cluster模式,由多个节点组成的集群模式.集群master之间基于crc16算法,对key进行校验,得到的值对16384取余,就是key的hash ...

  8. sublime3配置

    1.sunblim3配置 一旦配置好了,如果换了一台电脑那直接将C:\Users\djx\AppData\Roaming\Sublime Text 3\Packages\User文件夹拷贝到新下载的s ...

  9. bolb与base64的图片互转

    直接看图简单明了. 注:便于测试你可以自己用base64图片测试互转一下.这里base64图片太长了就不给予展示了,望理解

  10. SecureCRT 8.1工具下载和破解附Xshell6

    附教程:https://jingyan.baidu.com/article/eae078275917861fec548592.html 这一篇教程实际上已经说得非常明确了,只需要把注册机放在和secu ...