[别被脱库系列]1 数据库的初恋

此系列文章首发于数据库初恋篇,因为排版看起来稍微舒服很多

此数据库系列,是学习工作中的总结,具体章节系列如下图所示。如果您需要扫盲数据库,突击数据库的面试,那就盘他,盘他!所谓初恋,初次见面,下凡数据库基础。请多多关照!

童鞋别被脱裤系列
童鞋别被脱裤系列

这是系列篇第一节,其主要内容如下思维导图所示。

数据库基础
数据库基础

1 了解sql—-长生不老,异常稳定

查看近几年的TIOBE发现了,一直在前十,可见是个老且管用的东西。

来自网络
来自网络

了解几个术语:

  • DDL(Data Definition Language),定义数据库对象。

  • DML:(DATA Manipulation Language),用来操作和数据库相关记录。

  • DCL:(Data Cnotrol Language)定义访问权限和安全级别。

  • DQL(Data Query Language)。查询记录。

sql大小写规范

  • 表名、表别名、字段名、字段别名等可以小写

  • SQL保留字,函数名,绑定变量大写

SELECT name,age FROM student WHERE id=”1″;

2 为啥要存储数据

我们大部分的系统都会考虑到数据的存储,那么如何更有效地保存好数据,做好数据备份。当我们拥有了数据,可以进行数据挖掘,大数据分析,舆情预测,自然语言处理等等一系列的操作,可见存储数据是多么的重要。这一篇文章对数据库基础知识的扫盲,下一节将是数据存储,数据备份等。另外我需要知道硬盘的处理速度比cpu,内存,网卡都会慢。

CREATE TABLE authors_name(author_id int(15) NOT NULL AUTO_INCREMENT),author_name varchar(255) NOT NULL);

3 DBMS是什么

  • DB、DBS和DBMS区别

全称 功能
DB DataBase Management System 可对多个数据库进行管理
DBS DataBase 存储树的集合,理解为多个数据表
DBS DataBase system 老大哥。包含了数据库管理系统和数据库管理人员DBA

4 当前主流的DBMS有哪些

主流的DBMS
主流的DBMS

5 sql与Nosql

Nosql的timestamp:

1970:Nosql=we have no sql

1980:Nosql=know sql

2000:Nosql=No SQL

2005:Nosql=not only sql

2013:Nosql=No,SQL

键值数据库

通过key-value方式存储,key为唯一表示,优点,查询快,缺点是无法像关系型数据库一样使用条件过滤,这样可能导致遍历所有的键,消耗大量的计算。所以经常用来作为缓存,比如redis。

文档数据库

管理文档,一个文档相当于一条记录,MongoDB。

搜索引擎

虽然关系型数据库常常通过索引的方式提高检索效率(不一定),但是对于全文检索却比较低。搜索引擎的优势比如Elasticsearch、Splunk和Solr采用全文搜索,核心原理为倒排索引

列式数据库

相对于行式数据库,将数据按照列存储,这样可以大量降低系统的IO(因为相邻的数据类型一样,方便压缩,自然就会降低IO),适合分布式文件系统,比如

图数据库

典型的就是网络中的人与人的关系,节点和边关系。

6 Oracle中的sql如何执行的

查询执行流程
查询执行流程

  • 语法检查:检查SQL拼写是否正确。
  • 语义检查:检查SQL访问对象是否存在。
  • 权限检查:检查用户是否有访问权限。
  • 共享池检查:包含了库缓存、数据字典缓冲区等。主要用来缓冲执行计划或者表、视图等对象。
  • 优化器:进行硬解析,决定创建解析树和生成执行计划应该怎么做
  • 执行器:有了优化器,那么在执行器思考如何被执行

7 mysql中sql如何执行的

查询执行流程
查询执行流程

  • 查询缓存

首先注意,mysql8.0之后已经放弃了这个功能(因为如果数据更新,缓存会情况,如果为动态数据经常更新,这样反而增加SQL查询时间)。缓存通常的理解是一个中间层,如果在中间层存在查询语句就直接返回,如果没有则给解析器处理。

  • 解析层

主要进行语法分析和语义分析。

  • 优化器

确定SQL语句的执行路径。是根据全表检索还是根据索引。

  • 执行器

进行权限检查。

那么mysql和oracle两者执行情况有啥不一样呢

MySql具有多种存储引擎且可以自定义存储引擎,那么有哪些存储引擎,优点缺点是啥?

描述
InnoDB Mysql5.5以后默认存储引擎,支持事务,行级锁,外键约束
MyISAM Mysql5.5以前为默认存储引擎,不支持事务和外键,最大特点速度快,占资源少
Memory存储引擎 使用系统内存为存储介质,更快的响应速度。
NDB存储引擎 用于Mysql Cluster分布式集群环境
Archive存储引擎 压缩机制的特点便于文件的归档,常用来做仓库

8 如何查看一条sql的资源使用情况

  • prifiling是否开启

mysql> select @@profiling;如果为0代表关闭,设置为1表示打开。

  • 执行sql查询语句

mysql> select from student;

  • 查看当前所有profiles

show profiles;查看当前会话的profiles

  • 查看执行时间show profile

9 DDL

  • 创建数据库

创建公众号原创作者数据库

CREATE DATABASE WeChat_Official_Account_Author;

  • 创建表结构(注意语句最后;结束,最后一个字段定义结束没有逗号)

创建表 作者名(author_id,author_name且id为递增)

CREATE TABLE authors_name(author_id int(15) NOT NULL AUTO_INCREMENT),

author_name varchar(255) NOT NULL);

  • 添加字段

ALTER TABLE authors_name ADD(age int(12));

  • 修改字段名

ALTER TABLE authors_name RENAME_COLUME age to author_age;

  • 删除字段

ALTER TABLE author_names DROP COLUME author_age;

10 数据库的常见约束

不成规矩,不成方圆

  • 主键约束

唯一标识一条记录,不重复且不能为空(UNIQUE+NOT NULL)。主键可以使是一个字段或者多个字段的组合,一个数据表主键只能有一个

  • 外键约束

外键确保表与表之间引用的完整性。外键可以重复也可以为空。

  • 唯一性约束

字段在表中可以使唯一的。

  • NOT NULL约束

表明字段不应为空,必须有取值。

  • CHECK约束

检查特定字段取值范围的有效性

11 常见查询语句

  • 查询姓名列

查询单列

SELECT author_name FROM authors_name;

查询所有列

SELECT FROM authors_name;

  • 去除重复行

SELECT DISTICT age FROM authors_name;

  • 查询排序

ASC 递增排序,DESC递减排序

SELECT author_name FROM authors_names ORDER BY age DESC;

  • 约束返回结果的个数

返回5条数据 LIMIT需要放在最后

SELECT author_name FROM authors_names ORDER BY age DESC LIMIT 5;

  • SELECT语句中关键字顺序

关键字的顺序:SELECT…..FROM…WHERE…GROUP BY

  • SELECT语句的执行顺序

FROM>WHERE>GROUP BY HAVING>SELECT

  • 那么一句select的执行原理是什么?请看下图。

一句select经历了啥
一句select经历了啥

12 sql运算符

  • 比较运算符(不同的DBMS支持的运算符可能不同)

比较运算符
比较运算符

  • 逻辑运算符

逻辑运算符
逻辑运算符

当WHERE字句中同时出现OR和AND的时候,AND执行优先级会更高。一般来说()优先级最高,其次是AND,然后是OR。

  • 通配符过滤

通配符是对文本类型进行模糊哈讯,但是通常是全表扫描,所以效率很低。只有当LIKE后面没有通配符,并对字段进行索引的时候不会进行全表扫描。匹配一部分特殊字符。”LIKE”操作符。

  • 通配符匹配之任意字符串出现的任意次数(%)

  • 通配符匹配之耽搁字符(_)

13 常见sql函数

提供函数,类似接口,更方便快速的得出想要的结果。

描述 例子
ABS() 取绝对值 SELECT ABS(-5)—5
MOD() 取余 SELECT MOD(101,3)—2
ROUND() 四舍五入为指定的小数位数,如果两个参数,分别为字段名称和小数位数 SELECT ROUND(38.29,1)–38.3
LENGTH() 计算字段长度。一个汉字三个字符。 SELECT LENGTH(‘小蓝’)–6
UPPER() 字符转大写 SELECT LOWER(‘qwe’)–QWE
LOWER() 字符转小写 SELECT LOWER(‘QWE’)–qwe
REPLACE() 替换函数 SELECT REPLACE(‘QWE123D’,’QWE’,789)–789123D
SUBSTRING() 截取字符串 SELECT SUBSTRING(‘QWE123’,1,3)–
CHAR_LENGTH() 计算机字段的长度,汉字,数字都算一个字符 SELECT CHAR_LENGTH(‘小蓝’)–2
CONCAT() 连接字符串 SELECT CONCAT(‘XIAOLAN’,789)—XIAOLAN789
DATA() 返回时间的日期 SELECT DATA(‘2020-03-13 11:30:20’)–2020-03-13
YEAR()/MONTH()/DAY() 返回时间的年份/月份/天数 SELECT YEAR(NOW())–2020
HOUR() 返回时间的小时 SELECT hour(’12:13:14′)–12
MINUTE() 返回时间的分钟 SELECT MINUTE(’12:13:14′)–13
SECOND() 返回时间的秒部 SELECT SECOND(’12:13:14′)–14
CURRENT_DATE() 系统当前日期 SELECT CURRENT_DATE(‘2020-03-13 11:30:20’)–2020-03-13
CURRENT_TIME() 系统当前时间,没有具体日期 SELECT CURRENT_TIME(‘2020-03-13 11:30:20’)–11:30:20
CURRENT_TIMESTAMP() 日期+时间 SELECT CURRENT_TIMESTAMP–2020-03-13 11:30:20

14 聚集函数

描述 例子
COUNT() 总行数,不管某个字段是否为NULL SELECT COUNT() FROM authors_name WHERE age>25
MAX() 最大值 SELECT MAX(Age) FROM authors_name
MIN() 最小值 SELECT MIN(Age) FROM authors_name
SUM() 求和 SELECT SUM(Age) FROM authors_name
AVG() 平均值 SELECT AVG(Age) FROM authors_name

  • 数据分组

使用GROUP BY字句进行数据分组。

  • HAVING过滤分组和WHERE的区别

WHERE 是用于数据行,而 HAVING 则作用于分组。如果分组完以后需要排序,就在其后增加ORDER BY完成

17 视图

  • 什么是视图

视图可以理解为一个中间表(结果集),咋们叫虚拟表,它主要把我们经常查询的结果存放于中,从而提升使用的效率。本身不具有数据。如下图所示。

  • 为什么使用视图

版权声明:本文为lanjianhappy原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/lanjianhappy/p/12506592.html