数据库概述
1.为什么要使用数据库
- 持久化:
- 数据持久化:将内存的数据保存到硬盘加以固化
- 主要作用:将内存中的数据存储在关系型数据库
2.数据库与数据库管理系统
DB:数据库:本质为一个文件系统DBMS:数据库管理系统:如MySQLSQL:结构化查询语句:与数据库通信的语言
3.RDBMS 与 非RDBMS
3.1 关系型数据库(RDBMS)
- 把复杂的数据结构归结为简单的
二元关系(即二维表格) - 以 row 和 column 的形式存储数据,一系列 行与列 被称为 table, 一组表组成一个 database
- 表与表之间的数据记录有
关系 - 优势
- 复杂查询:用SQL语句在多表间做复杂的数据查询
- 事务支持:对于高安全性能的数据访问要求得以实现
3.1 非关系型数据库
- 基于键值对存储,性能高
4. 关系型数据库设计规则
- 典型数据结构:
数据表, 其组成都是结构化的
4.1 表、记录、字段
- E-R(实体-联系)模型中有三个主要概念是:
实体集、属性、联系集- 实体集 对应 表
- 实体 对应 行(也称为一条记录)
- 属性 对应 列(也称为一个字段)
4.2 表的关联
4.2.1 一对一
- 实际场景运用不多,因为可以创建成一张表
4.2.2 一对多
- 常见实例场景: 客户表和订单表 , 分类表和商品表 , 部门表和员工表
4.2.3 多对多
产品-订单
一个订单可以有多个产品,一个产品可以出现在多个订单
4.2.4 自我引用
基本SELECT语句
1. 杂谈
1.1 SQL 分类
DDL:数据定义语言:CREATE 、 DROP 、 ALTER等DML:数据操作语言:INSERT 、 DELETE 、 UPDATE 、 SELECT等DCL:数据控制语言:GRANT 、 REVOKE 、 COMMIT 、 ROLLBACK 、 SAVEPOINT等
1.2 数据导入指令
source d:\xxx.sql;
1.3 显示表结构
DESC table;
2. 基本SELECT语句
- 查询语句
SELECT field1, field2 FROM table1; - 别名
ASSELECT field1 as f1, field2 as f2 FROM table1 as t1; - 去除重复行
DISTINCTSELECT DISTINCT field1, field2 FROM table1 ;- DISTINCT 需放在所有列名前,对所有列的组合进行去重
- 空值
null- 空值参与运算:运算结果全为null 。
- null长度为空,但占用空间
- 常数
SELECT 'lfd' as constField field1 FROM table1 ;- 新增一列,列名为 constField, 内容为 lfd
3. 过滤数据
WHERE: 紧跟在FROM后
运算符
0. NULL
任何计算、比较 带有 NULL 结果均为 NULL
1. 算数运算符
- 数值与非数值相加,非数值类型尝试转为数值('1' => 1),转换失败则按0计算
- 一个数 乘除整数1仍得原数
- 一个数除以整数 无论是否除尽都变为浮点数
- 一个数除以0 为 NULL
2. 比较运算符
-
<=>:安全等于运算符:能对 NULL 进行判断 -
非符号运算符
- BETWEEN AND 左右都是闭区间
- LIKE 运算符的通配符
%:匹配0个或多个字符_:只能匹配一个字符
- ESCAPE :自定义转义字符
\:转义字符ESCAPE '$':将 $ 定义为转义字符WHERE job_id LIKE 'IT$_%' escape '$';:转义后匹配IT_加任意数量的任意字符,否则为IT加至少一个的任意字符
- REGEXP 正则表达式
^匹配以该字符后面的字符开头的字符串。$匹配以该字符前面的字符结尾的字符串。.匹配任何一个单字符。[...]匹配在方括号内的任何字符。[abc]匹配“a”或“b”或“c”。- 为了命名字符的范围,使用一个
-。[a-z]匹配任何字母,而[0-9]匹配任何数字。
*匹配零个或多个在它前面的字符。x*匹配任何数量的‘x’字符[0-9]*匹配任何数量的数字,- 而
*匹配任何数量的任何字符。
3. 逻辑运算符
- AND 优先级高于 OR
排序与分页
1. 排序数据
1.1 ORDER BY
- ASC:升序
- DESC:降序
多列排序:第一列有相同值后对第二列进行排序
SELECT name, id FROM table ORDER BY field1 DESC, field2 ASC;
2. 分页
SELECT filed FROM table LIMIT 偏移量 , 返回行数;
LIMIT 关键字放在 SELECT 语句最后
- 偏移量:从哪行开始显示
- 第一条记录偏移量为0
- 可不指定,即从第一条记录开始
MySQL8.0 可以使用 LIMIT 3 OFFSET 4 等于 LIMIT 4,3