MySQL_基础
MySQL概述
-
数据库相关概念
- 概念
- 数据库 dataBase
- 数据库管理系统 DataBase Management System
- SQL
- 概念
人 → DBMS → DataBase
-
- 主流的关关系型数据库
- Oracle
- MySQL
- Microsoft SQL Server
- PostgreSQL
- 主流的关关系型数据库
-
MySQL数据库
- 安装部署
- 启动与停止
- services.msc 手动启动和停止
- net start mysql80/ net stop mysql80
- 客户端连接
- 方式一:MySQL提供的客户端命令行工具(MySQL 8.0 Command Line Client)
- 方式二:系统自带的命令行工具:mysql [-h 127.0.0.0] [-P 3306] -u root -p pwd(必须配置环境变量)
- 数据模型
-
- 数据库分类
- 关系型数据库(RDBMS)
- 概念:建立在关系的模型上, 有多张相互连接的二维表组成的数据库。
- 特点:
- 使用包存储数据,格式统一,便于维护。
- 使用SQL语句操作,标准统一, 使用方便。
- 关系型数据库(RDBMS)
- 数据库分类
-
图形化界面工具
- sqlyog
- navicat
- DataGrip
SQL
-
SQL通用语法
- 分号结尾
- 不区分大小写,关键字建议使用大写
- 注释
- 单行注释:-- 或者#
- 多行注释:/* */
-
SQL语句分类
-
DDL Data Definition Language 数据库定义语言
-
用来定义数据库对象(数据库、表 、字段)
-
-
-
关于数据库操作语法
查询 查询所以数据库:SHOW DATABASES; 查询当前数据库: SELECT DATABASE(); 查询当前数据库所有表 : show tables; 创建 创建数据库:CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则] 示例:create database if not exists accountApp default charset utf8;(utf8占3个字节, utf8mb4占4个字节) 删除 删除数据库: drop database if exists accountApp; 使用 use accountapp; select database();
-
关于表操作的语法
-
查询 查询当前数据库所有表 : show tables;
查询当前表中有哪些字段:DESC 表名;
查询当前表的建表语句:SHOW CREATE TABLE 表名; 创建 创建表:create table 表名( 字段1 字段1类型 [comment 字段1注释], 字段n 字段n类型 [comment 字段n注释] )[connent 表注释]; 删除 删除表: drop TABLE 表名; 修改 表结构修改语法:ALTER TABLE 表名 ADD/MODIFY/CHANGE(修改字段名称)/DROP/RENAME TO(修改表名)...; - 数据类型
- 数值类型
![Snipaste_2025-10-02_23-00-48]()
- 字符串类型
- 日期时间类型
- 数值类型
-
-
-
-
DML Data manipulation Languange 数据操作语言,
-
用来对数据库中的表的数据记录进行操作。
-
-
-
-
-
添加
1、给指定字段添加数据 INSERT INTO 表名 (字段1, 字段2,...) VALUES(值1, 值2,...) 2、给全部字段添加数据
INSERT INTO 表名 VALUES(值1,值2,...)
3、批量添加数据
INSERT INTO 表名 (字段1, 字段2,...)ALUES(值1,值2,...),(值1,值2,...),(值1,值2,...)INSERT INTO 表名 VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...)修改 UPDATE 表名 地段1=值1, 字段2=值2 [WHERE条件] 删除 DELETE FROM 表名 [WHERE 条件]
-
-
-
-
DQL 数据库查询语言
-
-
-
-
用来查询数据库表中的记录
-
-
-
-
-
SELECT 字段列表 FROM 表名 //条件查询) WHERE >, >=, < ,<=, = ,<>, like, between...and, in, and , or, 条件列表 //分组查询 GROUP BY 分组字段列表 //条件列表 HAVING 分组后条件列表 //排序 ORDER BY 排序字段列表 升序:ASC, 降序:DESC //分页参数 LIMIT 起始索引(从0开始),每页展示记录数
示例:
查询性别为男,年龄在200到40(含40)以内的5个员工信息,对查询的结果按年龄升序,年龄一样按入职时间升序。
select * from tb_user where gender= '男' and age between 20 and 40 order by age asc, entrydata asc limit 5; -
聚合函数
- count
- max
- min
- avg
- sum
-
-
-
-
DCL数据控制语言
-
用来管理数据库用户, 控制数据库的访问权限
-
-
-
用户管理 CREATE USER '用户名'@‘主机名’ IDENTIFIED BY '密码'; ALTER USER '用户名'@‘主机名’ IDENTIFIED WITH mysql_native_password BY '密码'; DROP USER '用户名'@‘主机名’ ; 访问权限
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@‘主机名’;REVOKE 权限列表 ON 数据库名.表名 FORM '用户名'@‘主机名’;
-
-
函数
-
字符串函数
-
语法
-
select 函数(参数)
-
-
函数
- concat(s1, s2) 将字符串拼接
- lower str转小写
- upper str转大写
- lpad(str, n, pad) 左填充
- rpad(str, n, pad) 右填充
- trim 去掉头尾空格
- substring (str, start, len) 截取字符串
-
示例
-
企业员工工号同意为5位数。不够5位的全部在前面补0, 例如1号员工00001 update tb_user set workon = lpad(wokeno. 5, '0')
-
-
-
数值函数
-
语法
-
select 函数(参数)
-
-
函数
- cerl 向上取整
- floor 向下取整
- mod(x,y) x/y取模
- rand() 0-1的随机数
- round(x, y) 对x四舍五入,保留y个小数
-
示例
-
生成一个6位数的随机验证码 select lpad(round(rand()*1000000), 0), 6, '0');的
-
-
-
日期函数
-
语法
-
select 函数(参数)
-
-
函数
- curdate() 当前日期
- curtime() 当前时间
- now() 当前日期和时间
- year(date) 获取data的年份
- month(date)
- day(date)
- date_add(date, increate expr type) data上增加时间
- datediff(date1, date2) 之间的天数
-
-
流程函数
-
语法
-
select 函数
-
-
函数
- if(value,t, f)value未true, 返回他, 否则返回f
- ifnull(value1,value2) value1不为空,返回value1,否则返回values2
- case when [val] then [res] ... else [default] end; val为true返回热水, 否则返回default的默认值
- case [expr] when [val] then [res] ... else [default] end; 如果expr的值等于val,返回res,否则返回default的默认值
-
示例
-
根据不同的分数定级 select id, name (case when math >= 85 then '优秀’ when math >= 60 then '及格' else '不及格' end)'数学', (case when english>= 85 then '优秀’ when english>= 60 then '及格' else '不及格' end)'英语', (case when chinese>= 85 then '优秀’ when chinese>= 60 then '及格' else '不及格' end)'语文', from score;
-
-
约束
-
概述
-
概念:
-
作用在表中字段上的规则, 用于限制存贮在表中的数据
-
-
分类
- 非空约束 not null
- 唯一约束 unique
- 主键约束 primary key
- 默认约束 default
- 检查约束 check
-
案例
-
![image]()
create table yueshu_user( id int primary key auto_increment comment '主键', name varchar(10) not null unique comment '姓名', age int check ( age > 0 && age <= 120 ) comment '年龄', status char(1) default '1' comment '状态', gender char(1) comment '性别' )comment '用户表'; insert into yueshu_user(name, age, status,gender) values ('t',19,'1','男'),('t2',25,'0','男');
-
-
外键约束 foreign key
-
概念:
-
-
两张表数据之间建立连接,保证数据的一致性和完整性
-
-
-
案例
-
![image]()
-
添加外键
create table 表名{
字段 数据类型
...
[constraint] 外键名称 foreing key 外键字段名 peferences 主表(主表列名)}
alter table 表名 add_constraint 外键名称 foreign key (外键字段) peferencrs 表名(主表列名)
例如:
alter table emp add constraint waijian foreign key(user_id) peferencrs tb_job(jobid)
删除外键
alter table emp drop foreign key waijian;
-
-
删除更新行为
-
-
多表查询
-
多表关系
-
一对多(多对一)
- 案例:部门与员工的关系,多个员工对应一个部门
- 实现:在多的一方建立外键,指向一的一方的主键
-
-
多对多
- 案例: 学生与课程之间的关系
- 实现:建立第三张中间表,中间表至少包含两个外键,分别关联两方的主键
-
![image]()
-
一对一
- 案例:用户与用户详情的关系
- 关系:一对一的关系,多用于多表拆分,将一张表的基础字段放在一张表中,其他详情信息放在另一张表中,以提升操作效率。
- 实现:在任意一方加入主键,关联另一方的主键,并且设置外键的唯一性。
- 原表
![image]()
-
拆分后
-
![image]()
-
-
多表查询
-
笛卡尔积:
-
两个结合A和B中所有组合情况。多表查询药消除这种情况。
-
-
- 设置两张表中的ID相等
-
select * from student, course where course.id = student.id;
-
分类
-
连接查询
-
内连接: A和B的交集
-
隐式外连接
-
select 字段列表 from t1,t2 where ...
例如:查询一个员工的姓名,并关联的部门名称
sele t1.name,t2.name from t1, t2 where t1.id = t2.id;
-
-
显示外连接
-
select 字段列表 from t1 [inner] join t2 on 链接条件
例如:查询一个员工的姓名,并关联的部门名称
select * from table1 t inner join table2 t2 on t1.id = t2.id;
-
-
-
外连接
-
左外连接
-
select 字段列表 from table1 left [outer] join table2 on 条件 例如:查询teble1中的所以数据,和对应的部门信息 select t1.*, t2.name from table1 t1 left outer join table2 t2 on t1.id = t2.id;
-
-
右外连接
-
select 字段列表 from table1 left [outer] join table2 on 条件 例如:查询teble2中的所以数据,和对应的员工信息 select t2.*, t1.* from table1 t1 right outer join table2 t2 on t1.id = t2.id;
-
-
-
自连接
-
select 字段列表 from table1 别名1 join table1 别名2 on 条件 例如:查询员工及其所属领导的ID select t1.name , t2.name from table1 t1 join table1 t2 where t1.mangerid = t2.id; 查询所有员和领导的名字,如果员工没有领导,也要查出来 select t1.name '员工', t2.name ‘领导’ from table t1 left join table t2 on t1.manageid = t2.id;
-
-
-
联合查询
- 就是把多次查询的结果合并起来, 形成一个新的查询结果集
-
select 字段列表 from 表A union [all] select 字段列表 from 表B 例如:将薪资低于5000的员工和年龄大于50的员工全部查询出来 直接合并 select & from emp where slary <5000 union all select & from emp where age > 5000; 合并之后去重 select & from emp where slary <5000 union select & from emp where age > 5000;
-
多张表的列数必须保持一致,字段类型也要保持一致。
-
子查询
- SQL中嵌套select语句,称为嵌套语句,也称为子查询。
- 分类
- 标量子查询:子查询的结构为单个数
-
select * from emp where dept_id = (select id from dept where name ='销售部')
-
- 列子查询:子查询结果为一列
-
![image]()
-
查询销售部和市场部的所有员工信息
select * from emp where dept_id in (select ID from dept whereh name='销售部' or Name = '市场部';)查询比财务部所有人工资都高的员工信息
select * from emp where salary > all(select salsry from emp where dept_id = (select id from dept where name = '财务部' );)查询比市场部其中任意一个工资高的员工信息
select * from emp where salary > any (select salsry from emp where dept_id = (select id from dept where name = '财务部' ););
select * from emp where salary > some(select salsry from emp where dept_id = (select id from dept where name = '财务部' ););
-
- 行子查询:子查询的结果为一行
- 操作符:= ,<>, in , not in,
-
查询 某的薪资及其直属领导相同的员工信息
select * from emp where (salary,manageid) = (select salsry, mainageid from emp where name = ‘某’;);
- 表子查询:子查询的结构为多行多列
- 操作符:in
-
查询与a和b 的职位和薪资相同的员工信息。
select * from emp where (job, salary) in (select Job, salary from emp where name = 'a' aor name = 'b';);
- 标量子查询:子查询的结构为单个数
-
-
事务
-
简介
事务是一组操作的集合, 他会把所有的操作作为一个整体提交或撤销造作请求,即这些操作要么同事成功,要么同事失败。
-
事务操作
-
查看/设置事务调教方式
-
select @@autocommit; 查看事务提交方式
set @@autocommit = 0; 修改事务提交方式
0为自动,1为自动。
-
-
提交事务
-
commit;
-
-
回滚事务
-
rollback;
-
-
开启事务
-
start transaction 或者 begin
-
-
-
事务四大特性
-
原子性
-
事务最小操作单元,要么全部成功, 要么全部失败
-
-
一致性
-
事务完成时,必须是所有的数据都保持一致状态。
-
-
隔离性
-
数据库系统提供的隔离机制,保证室外在不受外界并发操作影响的独立环境下运行。
-
-
持久性
-
事务一旦提交或回滚, 他对数据库中数据的操作是永久的。
-
并发事务问题
-
脏读
- 一个事务读到另一个事务还没有提交的数据
-
不可重复
- 一个事务先后读取同一条记录,但是两次读取的数据不同。
-
幻读
- 一个事务按照条件查询数据时,没有对应的数据行,但是在插入前又发现数据已经存在, 好像出现了幻影。
-
-
事务隔离级别
-
隔离级别
-
![image]()
- read uncommit
- read commit
- repeatable read(默认)
- serializable
-
-
查看事务级别
-
select @@transaction_isolation
-
-
-
-
设置事务的隔离级别
-
-
-
-
set [session | globle] transaction isolation leveal {read uncommit | read commit | repeatable read | serializable};
例如:set session transaction isolation level repeatable read ;
-
-












浙公网安备 33010602011771号