官网:
MySQL :: Download MySQL Installer
阿里云:
MySQL8 https://www.alipan.com/s/auhN4pTqpRp 点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。
作为数据库的景象数据库
1.将解压文件解压到你安装的目录:E:mysql-8.0.11-winx64 不要放在有中文名字和空格的的目录下.例如
注意:配置文件中的路径要和实际存放的路径一致,注意路径的反斜杠要改成斜杠
在安装时,避免出错我们尽量全部使用管理员身份运行CMD,否则在安装时会报错,会导致安装失败的情况
3.进入mysql的bin目录
4.在MySQL目录下的bin目录下执行命令:
5.安装mysql服务
安装mysql服务(注意,一定要是管理员权限)
执行下面的命令:
进入DOS命令后,对MySQL服务器开启或暂停操作
成功了!
成功后有个标识,右键此电脑-服务-计算机管理 -服务和应用程序
6.启动MySQL 服务
服务安装成功之后通过命令net start mysql启动MySQL的服务
7.修改密码
mysql的bin目录下 进行数据库连接 mysql -u root -p
再输入密码 回车
8.密码修改成功后
连接MySQL
相信大家都有的Navicat,小海豚等数据库图形化工具
OK了
数据库
1.创建数据库
直接创建:CREATE DATAbase 数据库名;
如果不存在则创建:CREATE DATAbase IF NOT EXISTS 数据库名;
创建数据库时并设置字符集:CREATE DATAbase 数据库名 CHARACTER SET 字符集;
2.查看数据库
查看所有的数据库:SHOW DATAbaseS;
看某个数据库的定义信息:SHOW CREATE DATAbase 数据库名;
查看正在使用的数据库:SELECt DATAbase();
切换数据库: use 数据库名;
3.修改
修改数据库字符集:ALTER DATAbase 数据库名 DEFAULT CHARACTER SET 字符集;
4.删除
删除数据库 DROP DATAbase 数据库名;
数据库中的表管理
1.创建表
CREATE TABLE [IF NOT EXISTS]表名( 字段名1 字段类型, 字段名2 字段类型, 字段名3 字段类型 );
根据某个旧表的结构,创建一个新表:CREATE TABLE 新表名 LIKE 旧表名;
复制某个表中的所有的信息,包含数据 :CREATE TABLE 新表名 查询语句;
2.查找
查看某个数据库中的所有的表:SHOW TABLES;
查看某个表的结构信息:DESC 表名;
查看某个表的创建SQL语句 : SHOW CREATE TABLE 表名;
3.修改
给表中新增一列:ALTER TABLE 表名 ADD 列名 类型(长度);
修改已经存在的列的数据类型:ALTER TABLE 表名 MODIFY 列名 新数据类型;
修改列名:ALTER TABLE 表名 CHANGE 旧列名 新列名 类型;
删除列:ALTER TABLE 表名 DROP 列名;
修改表名:RENAME TABLE 表名 TO 新表名;
修改字符集: ALTER TABLE 表名 character set 字符集;
4.删除
直接删除表: DROP TABLE 表名;
先判断是否存在再删除: DROP TABLE IF EXISTS 表名;
5.截断表
TRUNCATE 【TABLE】 表名 ;删除表和表中的数据,重新创建的表和原来的表的结构一样
数据操作的语言,主要对MySQL进行增加、删除、修改
1.添加数据
1.1插入多条数据
一次性插入多条语句
INSERT INTO 表名 (列名1,列名2,…) 查询语句;
1.2表内容复制
方式1
方式2
2.修改数据
3.删除
将表中的数据均删除
删除表中符合条件表达式的记录
主键不可重复,主键不能为NULL
一个表中只能有一个主键(包含联合主键)
添加主键的列的值不能为空,也不能重复
唯一标识表中的一行数据,提高查询效率
创建主键约束
单列主键
方式1:
列名 数据类型 PRIMARY KEY
方式2:
创建表完成后,修改表结构
ALTER TABLE 表名 ADD PRIMARY KEY(列名);
单列主键的约束规则:
一张表只能有一个单列主键,不能重复,不能为空
联合主键
创建方式1
创建方式2
验证主键约束
删除主键约束
ALTER TABLE 表名 DROP PRIMARY KEY;
设置主键自增AUTO_INCREMENT
注意:无论SQL执行是否成功,都会自增
方式1
类名 数据类型 PRIMARY KEY AUTO_INCREMENT
方式2
ALTER TABLE 表名 MODIFY COLUMN 字段名 字段数据类型 AUTO_INCREMENT PRIMARY KEY;
delete和truncate删除后,主键的自增
delete在删除之后从断点开始自增
truncate数据之后自动增长默认从起始值1开始,和表之前创建时或者设置的指定自增无关
唯一约束,该约束的键所在的列不能重复,但可以为null
元素不能重复,但是值可以为NULL
一个表之中可以有多列为唯一约束
创建唯一约束
方式1
字段名 数据类型 UNIQUE
修改唯一约束
方法2
修改表中的sno字段,添加唯一约束,要注意不然是空表,要不然里面的数据符合唯一约束
ALTER TABLE 表名 ADD UNIQUE(字段名);
删除唯一约束
ALTER TABLE 表名 DROP INDEX 字段名;
特点:添加非空约束后,列不能为空
非空约束在一张表中可以有多列
创建非空约束
方式1:创建时声明非空约束
字段名 数据类型 NOT NULL
方式2:修改表的结构为非空
注意:修改时不能存在不符合数据的情况
ALTER TABLE 表名 MODIFY 字段名 数据类型 NOT NULL;
删除非空约束
1.特点
(1)在“从表”中指定外键约束,并且一个表可以建立多个外键约束
(2)创建(create)表时就指定外键约束的话,先创建主表,再创建从表
(3)删表时,先删从表(或先删除外键约束),再删除主表
(4)从表的外键列,必须引用/参考主表的键列(主键或唯一键)
为什么?因为被依赖/被参考的值必须是唯一的
(5)从表的外键列的数据类型,要与主表被参考/被引用的列的数据类型一致,并且逻辑意义一致。
例如:都是表示部门编号,都是int类型。
(6)外键列也会自动建立索引(根据外键查询效率很高,很多)
(7)外键约束的删除,所以不会自动删除,如果要删除对应的索引,必须手动删除
2.作用
限定某个表的某个字段的引用完整性,
比如:员工表的员工所在部门的选择,必须在部门表能找到对应的部分。
3.关键字:foreign key
4.主表和从表/父表和子表
主表(父表):被引用的表,被参考的表
从表(子表):引用别人的表,参考别人的表
例如:员工表的员工所在部门这个字段的值要参考部门表,
例如:学生表、课程表、选课表
如何指定外键约束
(1)建表时
(2)建表后(了解)
5.如何查看外键约束名
6.如何查看外键字段索引
7.如何删除外键约束(了解)
删除外键约束,不会自动删除外键约束列的索引,需要单独删除。
8.SQL演示
9.演示问题
(1)失败:不是键列
(2)失败:数据类型不一致
(3)成功,两个表字段名一样
10.设置外键约束等级
- Cascade方式:在父表上update/delete记录时,同步update/delete掉子表的匹配记录
- Set null方式:在父表上update/delete记录时,将子表上匹配记录的列设为null,但是要注意子表的外键列不能为not null
- No action方式:如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作
- Restrict方式:同no action, 都是立即检查外键约束
- Set default方式(在可视化工具SQLyog中可能显示空白):父表有变更时,子表将外键列设置成一个默认的值,但Innodb不能识别
如果没有指定等级,就相当于Restrict方式。
检查性约束的特点:
检查为非NULL的插入的记录的范围是否符合check后面的条件
添加检查性约束
字段 数据类型 CHECK (条件)
添加时检查记录是否符合约束条件
删除检查性约束
ALTER TABLE 表名 DROP CHECK 检查性约束名;
添加默认值约束
如果给传值,以传的值为准,否则是默认值
删除零填充约束
DQL(Data Query Language 数据查询语言)。用途是查询数据库数据,如SELECT语句。是SQL语句中最核心、最重要的语句,也是使用频率最高的语句。其中,可以根据表的结构和关系分为单表查询和多表联查。
单表查询:针对数据库中的一张数据表进行查询,可以通过各种查询条件和方式去做相关的优化。
多表联查:针对数据库中两张或者两张以上的表同时进行查询, 依赖的手段有复杂查询和嵌套查询。
关键字:
DISTINCT:设定DISTINCT可以去掉重复记录。
AS:表名或者字段名过长时,可以用AS关键字起别名,方便操作。
GROUP BY:按组分类显示查询出的数据。
HAVINg:GROUP BY分组时依赖的分组条件。
ORDER BY:将查询出来的结果集按照一定顺序排序完成。
LIMIT:限制显示查询结果的条数。
重要地位
数据库管理系统⼀个重要功能就是数据查询,SQL语句中最核⼼、最重要的语句,也是使⽤频率最 ⾼的语句.数据查询不应只是简单返回数据库中存储的数据,还应该根据需要对数据进⾏筛选以及确定数 据以什么样的格式显示。 MySQL提供了功能强⼤、灵活的语句来实现这些操作。 MySQL数据库使⽤select语句来查询数据。 应⽤
简单查询
通过简单查询,可以查询表中的所有列或者指定列,通过算术运算符、列别名以及消除重复⾏可以 改变查询结果的显示⽅式。
select简单查询
⭐查全表
⭐查询指定的字段
语法:
说明:
数据准备
创建数据库和表:
添加数据:
简单的查询
⭐别名(AS)
列别名⽤来给查询语句中的列或者表达式重新命名,使语句的可读性更强。
语法:
1.列别名可以直接写在列名或者表达式的后面,也可以添加as关键字,加不加as没有区别,通常不加。
2.如果select子句中有计算表达式,通常使用列别名。
注意:
1.列别名中包含有空格
2.列别名中包含有特殊字符,如%,-等。
⭐消除重复行(DISTINCT去重)
重复⾏是查询结果中有完全相同的数据⾏,消除重复⾏是消除相同的查询结果,只保留⼀⾏重复数据,使⽤关键字 DISTINCT 来完成。
语法:
例如:
也可以使⽤DISTINCT关键字消除多列重复数据(同时考虑所有列的数据重复)
算数运算符
简介
数据库中的表结构确⽴后,表中的数据代表的意义就已经确定。通过MySQL运算符进⾏运算,就可 以获取到表结构以外的另⼀种数据。 例如,学⽣表中存在⼀个birth字段,这个字段表示学⽣的出⽣年份。⽽运⽤MySQL的算术运算符⽤ 当前的年份减学⽣出⽣的年份,那么得到的就是这个学⽣的实际年龄数据。
MySQL支持四种运算符:
算数运算符、⽐较运算符、逻辑运算符、位运算符。
运算符优先级
0.优先级
⭐1.算数运算符
可以在SELECT⼦句中使⽤算术运算符(只对数值型数据起作⽤),来改变查询结果的显示⽅式。其中⽀持的5种运算符包括:
⭐2.比较运算符
⭐3.逻辑运算符
⭐4.位运算符
位运算符是在⼆进制数上进⾏计算的运算符。位运算会先将操作数变成⼆进制数,进⾏位运算。然后再 将计算结果从⼆进制数变回⼗进制数。
空值NULL
空值⽤NULL表示,表示⼀种⽆效的、未知的值,空值不是零,也不是空格。
查询结果如下:
空值参与运算
空值参与算术运算,运算后的结果仍为NULL —上述为字符串类型,可以单独修改查看
查询结果如下,可以看到空值参与算术运算后,结果仍为空值
条件查询
通过简单查询,可以查询表中的所有数据⾏。但⼤多数情况下,我们只需要查询符合某些特定条件的数据⾏,这就需要⽤到SQL语⾔中的条件查询来过滤。
普通条件查询
语法:
说明:
1.条件查询使用WHERe子句来完成,WHERe子句必须紧跟在FROM子句后面。
2.条件表达式的格式为:列名 比较运算符 要比较的值,例如:deptno=10
3.常见的比较运算符包括:=、>、>=、<、<=、<>
含义为等于, 大于,大于等于,小于,小于等于,不等于
4.数值型、字符型、日期型数据都可以使用比较运算符进行比较。
5.字符型和日期型数据作为查询条件时,条件表达式右边的值,必须添加单引号
特殊比较运算符
BETWEEN…AND…
使⽤BETWEEN … AND… 可以查询出某列的值在某个范围内(包括边界值)的数据⾏。
语法:WHERe 列名 BETWEEN 值1 AND 值2;
IN
使⽤IN运算符可以查询出某列的值是否和给定集合内的任意⼀个值相等。
语法:WHERe 列名 IN (值1, 值2, …值n)
LIKE
使⽤LIKE运算符可以查询出某列的值是否满⾜关键字匹配,也叫模糊查询。
先介绍两个通配符:
% :⽤来匹配任何字符,进⾏模糊匹配
_ : 下划线_⽤来匹配单个字符
IS NULL
如果要查询某列的值是否为NULL,
使⽤ “ 列名 = NULL” 是查询不出来的。只能使⽤ “ 列名 IS NULL”
least,greatest运算符
⭐对查询结果排序【排序查询】
简介:
前⾯讲解的简单查询和条件查询SQL,结果集的显示顺序都不是我们指定的。在⼤多数情况下,我 们希望查询出来的结果集按照⼀定的顺序显示,⽐如按价格降序显示、在价格基础上分类排序等等。这就需要⽤到SQL语⾔中的对结果集排序的⼦句ORDER BY。
语法:
排序规则说明
1、ORDER BY⽤于⼦句中可以⽀持单个字段,多个字段,表达式,函数,别名等
2、可以按照3种⽅式进⾏排序:分别是按列名排序、按列别名排序、按列序号排序。
3、ASC表示按升序排序(默认值), DESC表示按降序排序。
4、可以同时按照多个列名进⾏排序
5、ORDER BY ⼦句必须写在SELECt语句的最后,LIMIT⼦句除外
6、数字升序排列⼩值在前,⼤值在后。即按照数字⼤⼩顺序由⼩到⼤排列。
7、⽇期升序排列相对较早的⽇期在前,较晚的⽇期在后。
8、字符升序排列按照字⺟由⼩到⼤的顺序排列,即由A-Z排列。
9、空值在升序排列中排在最前⾯,在降序排列中排在最后。
按列名排序
按别名排序
按列序号排序
按多列排序
⭐聚合函数
MIN,MAX,SUM,AVG,COUNT
MIN和MAX函数会忽略掉NULL值后,再进行计算
SUM求和,AVG求平均值,它俩也会忽略掉NULL值,再进行计算
COUNT 求符合条件的记录[元组]数
聚合函数处理NULL值的小测试
⭐Group By 分组
Having是分组后进行筛选
⭐分页查询LIMIT
语法:
SELECT * FROM product LIMIT page;
page 展示多少条数据,索引从0开始
SELECt * FROM product LIMIT start,page
start 表示开始的下标:
计算公式:(第几页-1)*每页最多显示几条
page:每页最多显示几条
⭐执行顺序
数据准备
一对一 一般需要表合并
一对多
多对多 需要从表
内连接
多张表联查时符合关系条件相等的数据叫内连接,返回符合条件的公有数据。
笛卡尔积
隐藏内连接
显式内连接
内连接应用:
外连接
外连接,返回主查表中的所有数据,从表返回符合条件的数据。
主查表在join的左边,left
主查表在join的右边,right
数据准备
左外连接
右外连接
满外连接
基本概念:一个查询语句(外部查询)中包含了另一个查询语句(子查询)
子查询被当作一个单元来执行,它先于外部查询执行,其结果可以被外部查询使用。
子查询的结果通常被看作是一个临时表,外部查询可以像操作任何其他表一样操作这个临时结果集。
1.单行单列
1.查询年龄最大的员工信息,显示信息包含员工号、员工名字、员工年龄
2.多行单列
2.查询研发部和销售部的员工信息,包含员工号、员工名字
3.多行多列
ALL
所有 相当于and
ANY
任意 相当于or
IN
在SQL语言中,是一个运算符,用于测试一个值是否在一个列表(一组值)中。它通常用在子句中,以过滤出满足特定条件的记录。
当你看到这样的查询语句:
这个查询会返回所有列的值存在于括号内列表(value1, value2, value3等)的记录。
举例来说,如果你有一个表,其中有一个列,你可以使用来找出特定顾客ID列表的所有订单:
这个查询将返回为101,102或103的所有订单。
在你提供的查询中:
这里用于检查表中的是否存在于由子查询返回的部门编号列表中。如果存在,并且大于1001,那么相应的员工记录就会被选中并返回。
EXISTS
把外层sql的结果,拿到内层sql去测试,如果内层的sql成立,则该行取出。内层查询是exists后的查询。
至少存在员工的部门
自己和自己做内连接或者外连接,用于显示自关联的层级关系
数据准备
数据准备
group_concat函数
数学相关函数
abs()取绝对值
sqrt()开平方
mod(x,y)求余数
ceil(x)和ceiling(x)向上取整
floor(x)向下取整
rand()生成随机数
round()四舍五入函数
sign()判断值的范围
pow(x,y),x的y次方
sin()函数
truncate(x,y)截断
字符串相关的函数
lower() 将大写转小写
upper() 将小写转大写
concat() 字符串连接
substr()/substring()截取字符串
length() 返回字符串的长度
char_length() character_length() 返回一共有多少个字
instr() 在字符串中找某个字符串第一次出现的位置
LPAd()、RPAD()指定字符串输出的长度
trim去除字符串的字符/空格
replace() 替换字符串
repeat() 重复字符串
reverse() 反转字符串
format() 格式化字符串
日期时间相关函数
获取日期相关函数
获取日期
获取时间
获取当前天
日期相关的转换
格式化时间
extract函数
日期相关计算问题(向后/向前偏移时间)
datediff(end_date,start_date) 和指定时间差多少天
练习
流程控制函数
if()类似三目运算
ifnull()判断是否为空
nullif(expr1,expr2) 比较两个字符串是否相等,相等为null,不相等返回expr1
练习
开窗函数MySQL8特有
数据准备
排序函数
开窗聚合函数
滑动窗口
练习
数据准备
前后函数
首尾函数
分箱函数
概念:将一组SQL语句放在同一批次内去执行,如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行
事务是一个过程,在进行中
特点:一个事务中如果有一个数据库操作失败,则整个