java小白第五天

写在前面

本文是边看黑马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 基础篇总结

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值