写在前面
本文是边看黑马b站视频边写的一片笔记, 文中大多图片都来自黑马视频. 旨在巩固学习以及方便后续查阅和供广大朋友们学习, 感谢黑马视频分享
开篇-怎么学-学什么


MySQL-基础篇
数据库的启动与停止

mysql 连接

这种方式记得配 bin 路径的 path 变量

01SQL
SQL通用语法

SQL分类

01 DDL data definition language
DDL - 数据库操作

note:
IF NOT EXISTS– 如果不存在则创建数据库, 存在则无效, 不报错, 但是不加该语句, 若创建的数据库已存在会报错IF EXISTS– 如果存在则删除数据库, 不存在无效, 不报错, 但是不加该语句, 若删除的数据库不存在会报错
DDL – 操作表
创建与查询
修改表结构


mysql数据类型
数值类型

代码示例
age TINYINT UNSIGNED
score double(4,1) # 长度为4, 有一位小数
字符串类型

note:
- char(len) – 长度固定为len, 不足空格补齐 内存固定 性能好
- varchar(len) – 最长为len, 不足有多少用多少 节省内存 性能低
日期时间类型

修改表结构
修改表名

删除表

添加字段

删除字段

修改字段

02 DML data manipulation language
用于对数据库中表的数据记录进行增删改操作
- insert
- update
- delete
添加记录

修改记录

删除记录

02 DQL data query language
数据查询语言
数据查询语言最为复杂和常用, 要重点掌握
select 总格式

基本查询
一般不使用通配符 * , 效率较低, 不易辨识
别名 as 可以省略
去重 distinct

条件查询

模糊查询示例

聚合函数

查询记录数量, 一般使用通配符 * , 这是因为 null 值不参与任何聚合函数的运算, 所以此时使用具体字段, 可能结果不准


分组查询


排序查询


分页查询


1. select * from emp where age in(20,21,22,23);
2. select * from emp where gender = '男' and age between 20 and 40 and name like '___';
3. select gender, count(*) from emp where age < 60 group by gender;
4. select name, age from emp where age <= 35 order by age, entrydate desc;
5. select * from emp where gender = '男' and age between 20 and 40 order by age asc, entrydate desc limit 5; # 注意 limit 位于最后
编写顺序与执行顺序

04 DCL data control language
管理数据库用户, 控制用户对数据库的访问权限
DCL 管理用户

note:
- 用户都记录在 mysql 的 user 表中
权限列表

DCL 权限控制

02 函数
函数 : 指一段可以直接被另一段程序调用的程序或代码
- 字符串函数
- 数值函数
- 日期函数
- 流程函数
01 字符串函数

# 将员工表的工作id字段补足5位, 不足前补0
update emp set workno = lpad(workno, 5, '0');
02 数值函数

# 生成一个六位数的随机验证码
select lpad( round( rand() * 1000000 , 0 ) , 6 , '0' );
03 日期函数

04 流程函数
进行条件筛选

### 总结

03 约束
约束: 约束是作用于表中字段上的规则, 用于限制存储在表中的数据
作用: 保证数据库中数据的正确 有效 完整



create table 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 '用户表';
外键约束
外键约束建立两张表之间数据的联系, 保证数据的一致性和完整性


外键约束的删除更新行为

默认是 no action / restrict
04 多表查询


01 多表关系



01 内连接
内连接: 查询两张表的交集

代码示例


02 外连接

代码示例


03 自连接

如: 查询下表中员工直属领导的姓名


代码示例

04 联合查询

代码示例

06 子查询

01 标量子查询

代码示例


02 列子查询

代码示例


03 行子查询

代码示例



04 表子查询

代码示例


03 案例


代码示例
# inner
1 select emp.name, emp.age, emp.job, dept.name from emp, dept where emp.deptid = dept.id;
2 select e.name, e.age, e.job, d.name from (select * from emp where age < 30) e, inner join dept d on e.deptid = d.id ;
select e.name, e.age, e.job, d.name from emp e inner job dept d on e.deptid = d.id where age < 30;
select e.name, e.age, e.job, d.name from emp e , dept d where emp.deptid = d.id and emp.age < 30;
3 select distinct dept.id dept.name from emp, dept where emp.deptid = dept.id;
# outter
4 select e.*, d.name from emp e left join dept d on e.deptid = d.id where e.age >40;
5 select e.name, s.level from emp e left join salgrade s on e.salary > s.lowsal and e. salary < s.upsal;
6 select e.*, s.level form (select * from emp where emp.deptid = (select id from dept where name = '研发部')) e left join salgrade s on e.salary between s.lowsal and s.upsal;
select e.*, s.level
from emp e,
dept d,
salgrade s
where e.deptid = d.id,
and (e.salary between s.lowsal and s.upsal)
and d.name = '研发部';
7 select avg(e.salary) from emp e where e.deptid = (select id from dept where name = '研发部');
select avg(e.salary) from emp e, dept d where e.deptid = d.id and d.name = '研发部';
# 子查询
8 select * from emp e where e.salary > (select salary from emp where name = '灭绝');
9 select * from emp where salary > (select avg(salary) from emp);
10 select * from (select * from emp e left join dept d on e.deptid = d.id group by d.name) e where e.salary > (select ave(salary) from emp e left join dept d on e.deptid = d.id group by d.name);
select * from emp e2 where e2.salary < ( select avg(e1.salary) from emp e1 where e1.deptid = e2.deptid )
11 select count(*) from dept d left join emp e on dept.id = e.deptid group by d.name;
select d.id, d.name, ( select count(*) from emp e where e.deptid = d.id) from dept d;
12 select s.name, s.num, c.name from student s, course c, student_course sc where s.id = sc.studentid and c.id = sc.courseid;
04 总结

05 事务
目录
- 事务简介
- 事务操作
- 事务四大特性
- 并发事务问题
- 事务隔离级别
事务: 是一组操作的集合, 是一个不可分割的单位。
事务会把所有的操作作为一个整体向系统提交或撤销操作请求
即事务表示的操作要么同时成功, 要么同时失败
mysql默认事务自动提交, 也就是说, 当执行一条 mysql 语句时, mysql 会立即隐式的提交事务, 每一条语句就是一个事务
01 事务操作


代码示例
set @@autocommit = 0; # 手动开启事务
start transaction; # 手动开启事务
begin; # 手动开启事务
update account set money = money -1000 where name = '张三';
update account set money = money + 1000 where name = '李四';
commint; # 提交事务
rollback; # 回滚事务
02 事务四大特性 acid

03 并发事务问题于事务隔离级别
- 多个并发操作引发并发事务问题

事务隔离级别
隔离级别越高, 数据越安全, 性能越低

06 基础篇总结

231

被折叠的 条评论
为什么被折叠?



