数据库概述
数据库与数据库管理系统
DB(Database):数据库
DBMS(Database Management System):数据库管理系统
SQL:结构化查询语言
数据库与数据库管理系统的关系
一句话总结:DBMS就是管理数据库的软件,如Mysql、Oracle、SQLServer、Redis…
Mysql介绍
MySQL从5.7版本直接跳跃发布了8.0版本,mysql8对源代码进行了重构,最突出的一点是多MySQL Optimizer优化 器进行了改进,性能进一步得到提升
Oracle vs MySQL怎么选?
- Oracle性能、安全性高,但是收费
- Mysql体积小,成本低,代码开源
RDBMS 与 非RDBMS
RDBMS(Relational Database Management System)关系型数据库管理系统
关系型数据库(RDBMS)
关系型数据库就是把复杂的数据结构变成二元结构,也就是二维表格形式
- 关系型数据库以**行(row)和列(column)**的形式存储数据,便于理解。这一系列的行和列组合成表,一组表组合成库
- 表与表之间的数据记录有关系。通过关系模型来表示,关系型数据库就是建立在关系模型基础上的数据库
- SQL就是RDB的查询语言
非关系型数据库(非RDBMS)
可以看作关系型数据库的阉割版,它基于key-value存储值,不需要经过SQL层的解析,性能非常高
Redis、mongo、ES
关系型数据库设计规则
ER模型
平时说的ER(entity-relationship)模型,就是实体之间的联系模型
- 模型中有三个概念是:实体集、属性、联系集
- 一个实体集对应一个表
- 一个实体对应一行,也成为一条记录
- 一个属性对应一列,也称为一个字段
ORM
表 ----- 类
表中数据 ---- 对象
表中列 ---- 属性
表的关联关系
表与表之间的**数据记录**有关系(relationship)。现实世界中的各种实体以及实体之间的各种联系均用 关系模型来表示
分别是以下四种:
- 一对一
- 设计学生表、可以分为常用信息和不常用信息分别建表
- 每个常用信息记录会 一 一 对应不常用信息记录
- 一对多
- 客户表和订单表、分类表和商品表、部门表和员工表
- 一个客户数据可以对应订单表中的多条数据,一个分类可以对应多个商品、一个部门可以有多个员工
- 多对多
- 多对对关系必须用三个表来表示,第三个表被称为连接表,它将多对多关系划分成两个一对多关系
- 一门课程可以被多个学生选择,一学生可以选择多个课程
- 自我引用
基本的SELECT语句
SQL分类
SQL是一种规范,Mysql和Oracle都有对应的实现,但它们都属于SQL
下图形象表达了sql,和DBMS的关系
SQL在功能上可分为:
- DDL(Data Definition Languages、数据定义语言)
- creatre、drop、alter关键字都属于DDL
- DML(Data Manipulation Language、数据操作语言)
- insert、delete、update、select关键字都属于DML
- DCL(Data Control Language、数据控制语言)
- grant、revoke、commit、rollback关键字都属于DCL
因为SQL中查询用的最为频繁,所以也可以把查询语句相关的定义为DQL(Data Query Language、数据查询语言)
还有commit、rollback取出来称为TCL(Transaction Control Language,事务控制语言)
SQL的规范
这个点其实可以在数据库图形化软件中学习,你写好语句然后点击优化,软件给你优化后的就是标准的格式
特殊点注意:
- 反引号:它是为了区分MYSQL的保留字与普通字符而引入的符号。
- 当我们要那他们做表名或字段名的时候,我们要加反引号用于区分避免编译器把这部分认为是保留字而产生错误
- MySQL 在 Linux 环境下是大小写敏感的
- 数据库名、表名、表的别名、变量名严格区分大小写
- Mysql在windows不区分大小写
注释
单行注释:\#注释文字(MySQL特有的方式) 单行注释:-- 注释文字(--后面必须包含一个空格。) 多行注释:/* 注释文字 */
命名规范
导入sql
通过source命令进行导入
win: mysql> source d:\mysqldb.sql linux: mysql> source /home/mysql/w3h5.sql; 或者 mysql -uroot -p123456 w3h5 < /home/mysql/w3h5.sql; 如果已经登陆数据库了,直接输入后面的部分:数据库名 < 数据库文件; dbname < /home/mysql/data.sql
导出sql
mysqldump -uroot -p dbname > data.sql; 最好是加上路径/数据库文件名 mysqldump -uroot -p dbname > /home/mysql/w3h5.sql;
基本语句
下面通过测试如下表来学习语句使用
查看所有
SELECT * FROM pms_brand;
选择特定的列
SELECT id,name,sort,logo FROM pms_brand;
给列起别名
通过AS关键字给列起别名,别名便于计算,见名知意
AS可省略
SELECT id id值, NAME 名字, sort 别名, logo 品牌 FROM pms_brand;
去除重复行
使用关键字DISTINCT去除重复行
SELECT DISTINCT sort FROM pms_brand;
空值参与运算
所有空值参与运算的,结果都为null
在mysql中,空值不等于空字符串。一个空字符串的长度是0。空值的长度是空,它是占用空间的!
显示表结构
使用DESC或全程DESCRIBE
DESC pms_brand;
- Fileld:字段名称
- Type:字段类型
- Null:改列是否能存NULL值
- Key:表示该列是否已编制索引。PRI表示该列是表主键的一部分;UNI表示该列是UNIQUE索引的一部分;MUL表示允许出现多次
- Default:表示该列默认值,如果有,值是多少。
- Extra:表示可以获取的与给定列有关的附加信息,例如AUTO_INCREMENT等
过滤数据
通过WHERE关键字来过滤数据
SELECT id, NAME, sort, logo FROM pms_brand WHERE id = 1
MySQL基础篇(运算符、排序分页、多表查询、函数)-2
https://developer.aliyun.com/article/1425387?spm=a2c6h.13148508.setting.15.51724f0e3jEOAZ