目录
一. MySQL 数据库介绍
二. MySQL 库操作
1.系统数据库
2.数据库操作
三. MySQL 表操作
1.表介绍
2.查看表
3.创建表
4.查看表结构
5.修改表
6.复制和删除
四. MySQL 数据操作
1.插入数据 INSERT
2.删除与更新 INSERT
4.查询数据 INSERT
单表查询
1.单表查询语法
2.准备数据
3.简单查询
4.where条件
6.group by 分组
(1).什么是分组
(2)聚合函数:count() avg() max() min() sum()
(3).having 过滤
(4).order by 排序
编辑
(5). limit 限制结果条目
(4).正则匹配
多表查询
1.子查询
2.多表连接查询
(1).内连接
(2).左连接
(3).右连接
五. MySQL 数据库用户授权
1.创建用户
2.授权操作
3.查看权限
4.撤销权限
一. MySQL 数据库介绍
以下所有数据库语句均在“mysql>”操作环境中执行,并且每一条操作语句都是以分号“;”结束
数据库目前标准的指令集是 SQL。SQL是 Structured Query Language 的缩写,即结构化查询语言。它是1974年由 Boyce 和 Chamberlin 提出来的,1975~1979年IBM 公司研制的关系数据库管理系统原型 System R实现了这种语言。经过多年的发展,SL语言得到了广泛的应用。
SQL 语言主要由以下几部分组成。
DDL(Data Definition Language,数据定义语言):用来建立数据库、数据库对象和定义字段,如CREATE、ALTER、DROP。
DMl(Data Manipulation Language,数据操纵语言):用来插入、除和修改数据库中的数据,如INSERT、UPDATE、DELETE。
DQL(Data Query Language,数据查询语言):用来查询数据库中的数据如 SELECT。
DCL(Data Control Language,数据控制语言):用来控制数据库组件的存取许可、存取权限等,如COMMIT、IROLLBACK、GRANT、REVOKE。
二. MySQL 库操作
1.系统数据库
经初始化后的 MySQL 服务器 ,默认建立了四个数据库:sys、mysql、information_schema、performance_schema
information schema:虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息、列信息、权限信息、字符信息等
performance_schema: MySQL 5.5开始新增一个数据库:主要用于收集数据库服务器性能参数,记录处理查询请求时发生的各种事件、锁等现象
mysql:授权库,主要存储系统用户的权限信息
sys: 主要用于存储系统性能信息和监控数据,对数据库的性能优化和故障排除具有关键作用
2.数据库操作
(1).创建数据库
语法:
mysql>CREATE DATABASE 数据库名;
列:创建一个名为db1的库
(2).命名规则
可以由字母(区分大小写)、数字、下划线、@、#、$
具有唯一性,不能使用关键字如create select
不能单独使用数字,最长128 位
(3).选择和查看

(4).删除数据库
删除成功后会提示Query OK。
三. MySQL 表操作
1.表介绍
库相当于文件夹。而表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段
| ID | name | age | sex |
| 1 | 张三 | 18 | male |
| 2 | 李四 | 68 | female |
| 3 | 王五 | 30 | male |
id,name,age,sex 称为字段,其余的,一行内容称为一条数据记录
2.查看表
使用 SHOW TABLES 查看当前所在的数据库中包含的表。在操作之前,需要先使用 USE语句切换到所使用的数据库,就像要查看一个文件夹里面有多少文件,要先进入这个文件夹
mysql>USE mysql;
Database changed
mysql>SHOW TABLES;
3.创建表
语法
mysql>create table表名(
字段名1 类型[(宽度)约束条件],
字段名 2 类型[(宽度)约束条件],
字段名3类型[(宽度)约束条件]
);
#注意:
1.在同一张表中,字段名是不能相同
2.宽度和约束条件可选
3.字段名和类型是必须的,字段的类型宽度和约束条件是可选项
4.表中最后一个字段不要加逗号
类型介绍
MySQL 支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。
数值类型
| 类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
|---|---|---|---|---|
| INT | 4 字节 | (-2,147,483,648, 2,147,483,647) | (0, 4,294,967,295) | 大整数值 |
| DOUBLE | 8 字节 | (-1.797E+308, -2.22E-308) | (0, 2.22E-308, 1.797E+308) | 双精度浮点数值 |
| DOUBLE(M,D) | 8 字节 | 受 M 和 D 约束 | 受 M 和 D 约束 | 双精度浮点数值 |
| DECIMAL(M,D) | 依赖 M 和 D | M 最大 65(依赖 M 和 D) | M 最大 65(依赖 M 和 D) | 小数值 |
日期类型
| 类型 | 大小 | 范围 | 格式 | 用途 |
|---|---|---|---|---|
| DATE | 3 | 1000-01-01 至 9999-12-31 | YYYY-MM-DD | 日期值 |
| TIME | 3 | -838:59:59 至 838:59:59 | HH:MM:SS | 时间值或持续时间 |
| YEAR | 1 | 1901 至 2155 | YYYY | 年份值 |
| DATETIME | 8 | 1000-01-01 00:00:00 至 9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
| TIMESTAMP | 4 | 1970-01-01 00:00:00 至 2038-01-19 03:14:07(格林尼治时间) | YYYYMMDD HH:MMSS | 混合日期和时间值(时间戳) |
字符串类型
| 类型 | 大小 | 用途 |
|---|---|---|
| CHAR | 0-255 字符 | 定长字符串 |
| VARCHAR | 0-65535 字节 | 变长字符串 |
| BLOB | 0-65535 字节 | 二进制长文本数据 |
| TEXT | 0-65535 字节 | 长文本数据 |
约束条件
约束条件与数据类型的宽度一样,都是可选参数,类似于使用excel存储数据时,可以利用 excel 的公式限制员工 ID 列:禁止重复值,且不能为空
约束条件作用:用于保证数据的完整性和一致性,主要分为:
| 约束条件 | 说明 |
|---|---|
| PRIMARY KEY (PK) | 标识该字段为表的主键,可以唯一标识记录 |
| FOREIGN KEY (FK) | 标识该字段为表的外键 |
| NOT NULL | 标识该字段不能为空 |
| UNIQUE KEY (UK) | 标识该字段的值是唯一的 |
| AUTO_INCREMENT | 标识该字段的值自动增长(仅限整数类型且通常作为主键) |
| DEFAULT | 为该字段设置默认值 |
| UNSIGNED | 无符号(仅用于数值类型,表示非负数) |
| ZEROFILL | 使用0填充(当数值位数不足时,用0填充显示) |
| ENUM(...) | 限制字段可以存储的值集合(需在括号内指定可选值,如 ENUM('男','女')) |
创建表示例
mysql>create database dbl; #创建dbl库mysql>use dbl;#进入dbl库mysql>create table tl(
-> id int,
-> name varchar(50)
-> age int(3),
-> sex enum('male’, female’)
-> );mysql> show tables,
4.查看表结构
DESCRIBE语句:用于显示表的结构,即组成表的各字段(列)的信息。需要指定“数据库名.表名”作为参数;若只指定表名参数,则需先通过 USE 语句切换到目标数据库
5.修改表
修改表名:
ALTER TABLE 表名 RENAME 新表名;
增加字段:
ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…],ADD 字段名 数据类型 [完整性约束条件[…];
ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…] FIRST;
ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名;
删除字段
ALTER TABLE 表名 DROP 字段名;
修改字段
ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件…];
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];
6.复制和删除
复制:
只复制表结构,不复制表中数据:
复制表结构十记录(key不会复制:主键、外键和索引)
删除
删除数据库中的表,需要指定“数据库名.表名”作为参数;若只指定表名参数,则需先通过执行“USE”语句切换到目标数据库

四. MySQL 数据操作
在 MySQL管理软件中,可以通过 SQL,语句中的 DML, 语言来实现数据的操作,包括使用 INSERT 实现数据的插入、使用 UPDATE 实现数据的更新、使用 DELETE实现数据的删除、使用 SELECT 查询数据。
1.插入数据 INSERT
INSERT INTO语句:用于向表中插入新的数据记录,语句格式如下所示
插入数据后可使用 mysql>select *from tl;验证
顺序插入:
INSERT INTO 表名 VALUES(值 1,值 2,值 3…值 n);

指定字段插入数据:
INSERT INTO 表名(字段 1,字段 2,字段 3…字段 n)VALUES(值 1,值 2,值 3…值n);

插入多条记录:
INSERT INTO 表名 VALUES(值 1,值 2,値 3…値 n),(值 1,值 2,值 3…值 n),(值 1,值 2,值 3…值 n);

2.删除与更新 INSERT
删除
DELETE 语句:用于删除表中指定的数据记录,语句格式如下所示
删除数据后可使用 mysql>select *from t1; 验证
DELETE FROM 表名 WHERE 条件表达式 #条件表达式后续讲解
![]()
更新
UPDATE 语句:用于修改、更新表中的数据记录。语句格式如下所示。
更新数据后可使用 mysql>select *from tl;验证
UPDATE 表名 SET 字段名 1=字段值 1[,字段名 2=字段值 2] WHERE 条件表达式

需要注意的是,在执行 UPDATE、DELETE 语句时,通常都带 WHERE 条件,不带条件的 UPDATE 语句和 DELETE 语句会修改或删除所有的记录,是非常危险的操作。
4.查询数据 INSERT
单表查询
1.单表查询语法
语法:
SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY 字段 HAVING 选
ORDER BY 字段
LIMIT 限制条数
关键字执行的优先级
from
where
group by
having
select
order bylimit
2.准备数据
![]()
创建人员信息表
插入数据:
三个部门:教学,销售,运营
3.简单查询
语法:把表中需要的列的数据查询出来
SELECT 字段1,字段 2...FROM 表名
例子:

表示所有字段时,可以使用通配符“*”,显示所有的数据记录

4.where条件
WHERE是SQL中用于筛选数据的核心子句,其作用是通过指定条件从表中过滤出符合条件的记录。它可应用于SELECT、UPDATE、DELETE 等语句中,控制操作的范围
where 字句中可以使用:
1.比较运算符:> <> = <= <> !=
薪资大于 10000 的人姓名

不是 403 办公室的人姓名

2.between 80 and 100 值在 10 到20 之间
薪资在 10000 至 15000 之间的人姓名

3.in(80,90,100)值是 10 或 20 或 30
薪资是 9000 或 10000 或 30000 的人姓名

4.like egon%4.pattern可以是%或,%表示任意多字符表示一个字符

5.逻辑运算符:在多个条件直接可以使用逻辑运算符andor not
薪资 17000 并且办公室是 403 的人

6.group by 分组
(1).什么是分组
分组指的是:将所有记录按照某个相同字段进行归类,比如针对员工信息表的职位分组,或者按照性别进行分组等
(2)聚合函数:count() avg() max() min() sum()
count():计数
计算男生和女生的人数

avg():平均值
每个岗位的平均薪资

max():最大值
每个岗位的最高薪资

min():最小值
每个岗位的最低薪资

sum():总和
每个岗位的薪资总和

(3).having 过滤
HAVING与WHERE不一样的地方
执行优先级从高到低:where>group by>havingWhere 发生在分组 group by 之前,因而 Where 中可以有任意字段,但是绝对不能使用聚合函数。
Having 发生在分组 group by 之后,因而 Having 中可以使用分组的字段,无法直接取到其他字段,但可以使用聚合函数
有哪些岗位是平均工资大于 10000的

(4).order by 排序
使用 SELECT 语句可以将需要的数据从 MySQL 数据库中查询出来,如果对查询的结果进行排序,该如何去实现呢?可以使用0RDERBY语来完成排序,并最终将排序后的结果返回给用户
排序的关键字可以使用 ASC或者 DESC。ASC 是按照升序进行排序的,是默认的排序方式,即 ASC 可以省略。SELECT语句中如果没有指定具体的排序方式,则默认按 ASC 方式进行排序。DESC是按降序方式进行排列

(5). limit 限制结果条目
在使用 MySQL SELECT 语句进行查询时,结果集返回的是所有匹配的记录有时候仅需要返回第一行或者前几行,这时候就需要用到LIMIT 子句
倒叙排列后仅显示第一行

(4).正则匹配
MySQL 正则表达式通常是在检索数据库记录的时候,根据指定的匹配模式匹配记录中符合要求的特殊字符串。MySQL的正则表达式使用REGEXP 这个关键字来指定正则表达式的匹配模式
Name 是l开头的姓名

Name 是u结尾的姓名

Name 是wan 和 wu之间至少1个g的姓名

多表查询
多表查询用于从多个关联表中提取组合数据,常见方式包括JOIN连接和子查询,以下是关键知识点与使用场景:
准备数据



1.子查询
子查询也被称作内查询或者嵌套查询,是指在一个查询语句里面还嵌套着另一个查询语句。子查询语句是先于主查询语句被执行的,其结果作为外层的条件返回给主查询进行下一步的查询过滤。子查询不仅可以在 SELECT 语句中使用,在INERT、UPDATE、DELETE中也同样适用。在嵌套的时候,子查询内部还可以再次嵌套新的子查询,也就是说可以多层嵌套。
在开始实际的举例之前,先来学习一下IN 这个操作符的用法,IN用来判断某个值是否在给定的结果集中,通常结合子查询来使用。IN的语法结构如下:
<表达式>[NOT]IN<子查询>
当表达式与子查询返回的结果集中的某个值相等时,返回TRUE,否则返回FALSE。若启用了 NOT关键字,则返回值相反。需要注意的是,子查询只能返回一列数据,如果需求比较复杂,一列解决不了问题,可以使用多层嵌套的方式来应对。
查询平均年龄在 25 岁以上的部门名

#查看技术部员工姓名

2.多表连接查询
MySQL 的连接查询,通常都是将来自两个或多个表的行结合起来,基于这些表之间的共同字段,进行数据的拼接。首先,要确定一个主表作为结果集,然后将其他表的行有选择性的连接到选定的主表结果集上。使用较多的连接查询包括:内连接、左连接和右连接。
(1).内连接
MySQL 中的内连接就是两张或多张表中同时符合某种条件的数据记录的组合。通常在 FROM 子句中使用关键字INNERJOIN来连接多张表,并使用ON 子句设置连接条件。内连接的语法格式如下。
SELECT column_name(s)FROM tablel
INNER JOIN table2 ON tablel.column_name = table2. column name;
bumen 没有 204 这个部门,因而 renyuan 表中关于 204 这条员工信息没有匹配出来
(2).左连接
MySQL 除了内连接,还可以使用外连接。区别于MySQL 外连接是将表分为基础表和参考表,再依据基础表返回满足条件或不满足条件的记录。外连接按照连接时表的顺序来分,有左连接和右连接之分。
左连接也可以被称为左外连接,在FROM子句中使用LEFTJOIN或者LEFTOUTERJOIN 关键字来表示。左连接以左侧表为基础表,接收左表的所有行,并用这些行与右侧参考表中的记录进行匹配,也就是说匹配左表中的所有行以及右表中符合条件的行。

以左表为准,即找出所有员工信息,当然包括没有部门的员工
本质就是:在内连接的基础上增加左边有右边没有的结果
(3).右连接
右连接也被称为右外连接,在FROM子中使用RIGHTJOIN或者RIGHTOUTER JOIN 关键字来表示。右连接跟左连接正好相反,它是以右表为基础表,用于接收右表中的所有行,并用这些记录与左表中的行进行匹配。也就是说匹配右表中的每一行及左表中符合条件的记录

以右表为准,即找出所有部门信息,包括没有员工的部门
本质就是:在内连接的基础上增加右边有左边没有的结果
五. MySQL 数据库用户授权
MySQL 数据库的 root 用户账号拥有对所有数据库、表的全部权限,频繁使用 root 账号会给数据库服务器带来一定的安全风险。实际工作中,通常会建立一些低权限的用户,只负责一部分数据库、表的管理和维护操作,甚至可以对查询、修改、删除记录等各种操作做进一步的细化限制,从而将数据库的风险降至最低。
1.创建用户
Mysq18用户创建与授权的分离,必须先创建用户才能给用户授权语法:
CREATEUSER 用户名@来源地址 IDENTIFIED BY ‘密码’
- 用户名@来源地址:用于指定用户名称和允许访问的客户机地址,即谁能连接、能从哪里连接。来源地址可以是域名、IP 地址,还可以使用“%”通配符,表示某个区域或网段内的所有地址,如“%.bdqn.com”“192.168.1.%”等。
- IDENTIFIED BY:用于设置用户连接数据库时所使用的密码字符串。在新建用户时,若省略“IDENTIFIED BY”部分,则用户的密码将为空
2.授权操作
授权语法:
GRANT 权限列表 ON 数据库名.表名 TO 用户名@来源地址
权限列表:用于列出授权使用的各种数据库操作,以逗号进行分隔,如select,insert,update”使用“all”表示所有权限,可授权执行任何操作。
数据库名.表名:用于指定授权操作的数据库和表的名称,其中可以使用通配符“*”。例如,使用“auth.*”表示授权操作的对象为 auth执行以下操作可以为数据库用户'xiaoqi'@'localhost’,设置对 test 数据库中的所有表具有查询权限
GRANT SELECT ON test.* To 'xiaogi'@ localhost’;
切换到其他 Shell 终端,以用户 xiaoqi 的身份连接数据库。在已授权的数据库上操作将被允许,否则将被拒绝。例如,允许用户xiaoqi 查询 test 数据库中表的数据记录,但禁止查询其他数据库中的表的记录。show databases只能看到被授权的库
在企业服务器的应用中,数据库与网站服务器有时候是相互独立的。因此在MySQL 服务器中,应根据实际情况创建新的用户授权,允许授权用户从网站服务器访问数据库。通常的做法是,创建一个或几个网站专用的数据库,并授子所有权限,限制访问的来源 IP 地址。
3.查看权限
SHOW GRANTS语句:专门用来查看数据库用户的授权信息,通过FOR子句可指定查看的用户对象(必须与授权时使用的对象名称一致),语句格式如下所
SHOW GRANTS FOR 用户名@来源地址
执行以下操作可以查看用户 dbuser 从主机 192.168.4.19 访问数据库时的授权信息。
4.撤销权限
REVOKE语句:用于撤销指定用户的数据库权限,撤销权限后的用户仍然可以连接到 MySQL 服务器,但将被禁止执行对应的数据库操作,语句格式如下所示。
REVOKE 权限列表 ON 数据库名.表名 FROM 用户名@来源地址
执行以下操作可以撤销用户 xiaoqi 从本机访问数据库 test 的所有权限。










![[免费]SpringBoot+Vue垃圾分类管理【论文+源码+SQL脚本】](https://i-blog.csdnimg.cn/direct/6e930f3dde3c4f2bb9cf4501c8642e1c.jpeg)









