- 数据库介绍
- MySQL数据库安装和使用
- SQL语句
- DDL之数据库操作
- DDL之表操作
- DML数据库操纵语言
- SQL约束
- DQL操作
- 多表操作
- MySQL索引
- 开窗函数
- 1、可以结构化存储大量的数据,
- 2、可以有效的保持数据的一致性、完整性。
常见数据库
数据库又可以分为关系型数据库和非关系型数据库
登录MySQL数据库
MySQL是一个需要账户名密码登录的数据库,登陆后使用,它提供了一个默认的root账号,使用安装时设置的密码即可登录,有两种登录方式。
MySQL图形化开发工具-DataGrip
DataGrip是JetBrains公司推出的管理数据库的产品,功能非常强大,可以兼容各种数据库,另外,JetBrains公司还有一款知名的IDE开发工具IDEA,用户体验非常不错。
DataGrip连接MySql
SQL语句介绍
结构化查询语言(Structured Query Language)简称SQL,是关系型数据库管理系统都需要遵循的规范,是数据库认识的语句。不同的数据库生产厂商都支持SQL语句,但都有特有内容。
普通话:各数据库厂商都遵循的ISO标准。
方言:数据库特有的关键字。
SQL语句分类
SQL分类:
数据查询语言:简称DQL(Data Query Language),用来查询数据库中表的记录。关键字:select,from,where等
SQL通用语法
SQL语句可以单行或多行书写,以分号结尾
可使用空格和缩进来增强语句的可读性
MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
例如:SELECT * FROM user。Select * from user;
同样可以使用/**/的方式完成注释 -- #
MySQL中的我们常使用的数据类型如下
创建数据库
create database 数据库名; #直接创建数据库,如果存在则报错
create database if not exists bigdata_db; #如果数据库不存在则创建
create database 数据库名 character set 字符集; #创建数据库时设置字符集
查看MySQL服务器中的所有的数据库
show databases;
删除数据库
格式:
drop database 数据库名称
使用数据库
选择数据库
use 数据库名字
查看正在使用的数据库:
select database();
创建表
查看表
查看数据库中的所有表:
格式:show tables;
查看表结构:
格式:desc 表名;
例如:desc sort;
删除表
格式:drop table 表名;
修改表结构格式
插入表记录:insert
更新表记录:update
删除记录:delete
主键约束
PRIMARY KEY 约束唯一标识数据库表中的每条记录。
删除主键约束
自动增长列
非空约束
唯一约束
delect语句
简单查询
条件查询
排序查询
聚合查询
分组查询
分组查询是指使用group by字句对查询信息进行分组。
格式:
SELECT 字段1,字段2… FROM 表名 GROUP BY 分组字段 HAVING 分组条件;
分组操作中的having子语句,是用于在分组后对数据进行过滤的,作用类似于where条件。
having与where的区别:
1).having是在分组后对数据进行过滤.,where是在分组前对数据进行过滤
2).having后面可以使用分组函数(统计函数),where后面不可以使用分组函数
分页查询
分页查询在项目开发中常见,由于数据量很大,显示屏长度有限,因此对数据需要采取分页显示方式。例如数据共有30条,每页显示5条,第一页显示1-5条,第二页显示6-10条。
格式:
insert into select 语句
多表操作
实际开发中,一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表(category)、商品表(products)、订单表(orders)等多张表。且这些表的数据之间存在一定的关系,接下来我们将在单表的基础上,一起学习多表方面的知识。
表与表之间的关系
l一对多关系:
常见实例:客户和订单,分类和商品,部门和员工.
n一对多建表原则:在从表(多方)创建一个字段,字段作为外键指向主表(一方)的主键.
外键约束
现在我们有两张表“分类表”和“商品表”,为了表明商品属于哪个分类,通常情况下,我们将在商品表上添加一列,用于存放分类cid的信息,此列称为:外键
一对多操作
category分类表,为一方,也就是主表,必须提供主键cid
products商品表,为多方,也就是从表,必须提供外键category_id
多表查询
1.交叉连接查询(基本不会使用-得到的是两个表的乘积) [了解]
语法:select * from A,B;这个结果有问题是错误的
2.交际运算:内连接查询(使用的关键字 inner join -- inner可以省略)
n隐式内连接:select * from A,B where 条件;
n显示内连接:select * from A inner join B on 条件;
3.差集运算:外连接查询(使用的关键字 outer join -- outer可以省略)
n左外连接:left outer join
uselect * from A left outer join B on 条件;
n右外连接:right outer join
uselect * from A right outer join B on 条件;
子查询
索引
索引是 MySQL 中一种十分重要的数据库对象。它是数据库性能调优技术的基础,常用于实现数据的快速检索。
索引就是根据表中的一列或若干列按照一定顺序建立的列值与记录行之间的对应关系表,实质上是一张描述索引列的列值与原表中记录行之间一一对应关系的有序表。
在 MySQL 中,通常有以下两种方式访问数据库表的行数据:
1) 顺序访问
顺序访问是在表中实行全表扫描,从头到尾逐行遍历,直到在无序的行数据中找到符合条件的目标数据。这种方式实现比较简单,但是当表中有大量数据的时候,效率非常低下。
2) 索引访问
索引访问是通过遍历索引来直接访问表中记录行的方式。使用这种方式的前提是对表建立一个索引,在列上创建了索引之后,查找数据时可以直接根据该列上的索引找到对应记录行的位置,从而快捷地查找到数据。索引存储了指定列数据值的指针,根据指定的排序顺序对这些指针排序。
索引分类
根据存储方式的不同,MySQL 中常用的索引在物理上分为以下两类。
B-树索引
B-树索引又称为 BTREE 索引,目前大部分的索引都是采用 B-树索引来存储的。B-树索引是一个典型的数据结构,基于这种树形数据结构,表中的每一行都会在索引上有一个对应值。因此,在表中进行数据查询时,可以根据索引值一步一步定位到数据所在的行。
哈希索引
哈希(Hash)一般翻译为“散列”,也有直接音译成“哈希”的,就是把任意长度的输入(又叫作预映射,pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。
HASH 索引不是基于树形的数据结构查找数据,而是根据索引列对应的哈希值的方法获取表的记录行。
索引操作
删除索引
唯一索引
删除索引
索引的使用原则和注意事项
虽然索引可以加快查询速度,提高 MySQL 的处理性能,但是过多地使用索引也会造成以下弊端:
开窗函数
MySql在8.0的版本增加了对开窗函数的支持,终于可以在MySql使用开窗函数了。
开窗函数的语法结构:
开窗函数介绍
row_number(),rank(),dense_rank()这三个函数都是用于返回结果集的分组内每行的排名
三者区别:
row_number:不管排名是否有相同的,都按照顺序1,2,3…..n
rank:排名相同的名次一样,同一排名有几个,后面排名就会跳过几次
dense_rank:排名相同的名次一样,且后面名次不跳跃