java web

Java web介绍

  • 网页
  • 数据库
  • JavaWeb程序

数据库相关概念

数据库

存储数据的仓库,数据是有组织的的进行存储

DataBase

数据库管理系统

DBMS

管理数据库,操作数据库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pyGWy9NP-1678695707505)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-10 14.17.56.png)]

SQL

Structured Query Language. 结构化查询语言

操作关系型数据库的编程语言

MySQL数据模型

关系型数据库:由多张相互连接的二维表组成的数据库

优点

  • 格式一致,易于维护
  • 都是使用通用的SQL语言操作,使用方便,可用于复杂查询
  • 数据存储在硬盘中,安全

mac 打开 MySQL的方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2Y8lN3BH-1678695634787)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-10 14.30.42.png)]

SQL

简介看上面

语句用法

  • SQL语句可以单行书写或多行书写,以分号结尾

  • MySQl数据库的SQL语言不区分大小写,关键字建议使用大写

  • 注释

    单行 – 注释内容或#注释内容

    多行/*

    ​ */

SQL分类

DDL操作数据库,表

DML对表中数据进行增删改

DQL对表中的数据进行查询

DCL对数据库进行权限控制

DDL

  • 查询

    show DataBases;
    
  • 创建

create DataBase if not exists db1;
  • 删除
drop database if exists db1;
  • 使用
use db1;
select database();#查看使用的database

操作表

  • 查询
show tables;
desc func;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nbR09X7h-1678695634787)(/Users/chenwenshuo/Desktop/截屏2023-03-10 14.51.30.png)]

  • 创建表
creat table 表明(
				字段名1	数据类型1,
				字段名2	数据类型2,
				···
				字段名n	数据类型n
			
);
#最后一行末尾不加逗号

int

varchar() 字符串 括号里加最多几个字符

数据类型
  • 数值
  • 日期
  • 字符串

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6qCkk6ua-1678695634788)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-10 15.11.09.png)]

常用

age int

score double(总长度,小数点后保留的位数). 0~1002

birthday date

name char(10)定长 存储性能高,浪费空间

name varchar(10)变长 存储性能低,节约空间

看以后数据到底变不变,存储空间大小决定用char还是varchar

create table student(
		id int,
		name varchar(10),
		gender char(1),
		birthday date,
		score double(5,2),
		email varchar(64),
		tel varchar(15),
		status tinyint 
);
  • 删除
drop table tb1;
  • 修改
alter table student rename to stu;
alter table stu add address varchar(50);
alter table stu modify address char(50);
alter table stu change address addr varchar(30);
alter table stu drop addr;

DML

  • 给指定列添加数据
select * from student;#查询所有数据
insert into student(id,name) values(1,'张三')insert into student(id,name,sex,birthday,score,email,tel,status) valus(2,'李四','男','1999',~~~);
#要是给所有类型添加数据,列名列表是可以省略的

  • 修改数据
update student set gender = '女' where name = '张三';
update student set gender = '女' ,score = 99.99 where name = '张三';
#若没有where条件则,表中所有都会改
delete from student where name = ‘张三’;

DQL

  • 基础查询
select
	字段列表
from
	表明列表
where
	条件列表
group by
	分组字段
having
	分组后条件
order by
	排序字段
limit
	分页限定
--基础查询=========
--查询 name age 两列
select name ,age from stu;
--查询所有列的数据(但最好不要用)
select * from stu;
--查询地址信息
select address from stu;
--去除重复记录
select distinct address from stu;
--起别名
select name,math as 数学成绩,english as 英语成绩 from stu;
  • 条件查询
-- 查询年龄大于20岁并且小于三十的学员信息
select * from stu where age>20 && age<30;
select * from stu where age>20 and age<30;
select * from stu where age between 20 and 30;
--查询入学日期在1990-09-01到1999-09-01之间的学员信息
select * from stu where hire_date between '1998-09-01'and'1999-09-01';
--查询年龄等于18岁的学员信息
select * from stu where age = 18;#一个🟰不是两个
--查询年龄不等于18岁的学员信息
select * from stu where age != 18select * from stu where age <> 18--查询年龄等于18或者20或者22
select * from stu where age = 18 or 20 or 22;
select * from stu where age in (18,20,22);
--查询英语成绩为null的学员信息;注意null值的比较不能使用= !=.需要使用is is not
select * from stu where english is null;

  • 模糊查询 like
通配符:
	(1)_:代表单个任意字符
	(2%:代表人一个数字符
--查询姓马的信息
select * from stu where name like '马%';
--查询第二个是花的学员信息
select * from stu where name like'_花%';

  • 排序查询
排序方式
ASC:升序排列(默认值)
DESC:降序排列
--查询学生信息,按照年龄升序排列
select * from stu order by age;
--查询学生信息,按照数学成绩降序排列
select * from stu order by math desc;
--查询学生成绩,按照数学成绩降序排列,如果数学成绩一样,在按照英语成绩升序排列
select* from stu order by math desc,english asc;
  • 分组查询

聚合函数

将一列数据作为一个整体,进行纵行计算

count 统计数量

max 最大值

min 最小值

sum 求和

avg 求平均值

-- 统计班级一共多少个学生
select count(id) from stu;#count 统计的列名不能为空
select count(*) from stu; #最推荐
-- 查询数学成绩最高分
select max(math) from stu;
--查询数学成绩总分
select sum(math) from stu;
--查询数学成绩平均值
select avg(math) from stu;
查询最低时若列中存在null,不统计!
-- 查询男同学和女同学各自数学平均分
select sex, avg(math) from stu group by sex;
-- 查询男同学和女同学各自数学平均分,分数低于70分的不参与分组
select sex, avg(math) from stu where math>70 group by sex;
-- 查询男同学和女同学各自数学平均分,分数低于70分的不参与分组,分组后人数大于2
select sex, avg(math) from stu where math>70 group by sex having count(*)>2;

where 和 having 的区别:

执行的时机不一样:where时分组前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤

可判断的条件不一样:where不能对聚合函数进行判断,having可以

执行顺序:where>聚合函数>having

  • 分页查询
-- 从0开始查询,查询3条数据
select * from stu limit 0,3;
-- 每页显示3条数据,查询第1页数据
select * from stu limit 0,3;
-- 第2页
select * from stu limit 3,3;
-- 第3页
select * from stu limit 6,3;

起始索引 = (当前页码-1)*每页显示的条数

limit是mysql的方言

数据库

约束

概念和分类

约束是作用于表中列上的规则,用于限制加入表的数据

约束的存在保证了数据库中的正确性,有效性和完整性

分类

  • 非空约束 not null
  • 唯一约束 unique
  • 主键约束 primary key 主键是一行数据的唯一标识,要求非空且唯一
  • 检查约束 check MySQL不支持检查约束
  • 默认约束 default
  • 外键约束 foreign key

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mdNZjR6f-1678695634788)(/Users/chenwenshuo/Desktop/截屏2023-03-11 08.59.49.png)]

主键加auto increament 会自增长

外键约束让两个表的数据之间建立链接,保证数据的一致性和完整性

-- dep_id关联dept表的id主键
constraint fk_emp_dept foreign key(dep_id)references dept(id);
-- 删除外键
alter table emp drop foreign key fk_emp_dept;
-- 添加外键
alter table emp add constraint fk_emp_dept foreign key(dep_id)references dept(id);

数据库设计

建立数据库中的表结构以及表与表之间的关联关系的过程

步骤

需求分析

逻辑分析

物理设计

维护设计

表关系

表关系之一对多

部门和员工

在多的一方建立外键,指向一的一方的主键

多对多

订单和商品

建立第三张中间表,至少包含两个外键,分别关联两方主键

一对一

用户和用户详细

多用于表拆分,将一个实体中经常使用的字段放一个表,不经常使用的字段放另一张表,用于提升查询性能

在任意一方加入外键,关联另一方主键,并且设置的外键为unique

多表查询

select * from emp,dept; – 不行,会产生笛卡尔积

笛卡尔积:有a,b两个集合,取a,b所有的组合的情况

消除无效数据

查询emp和dept的数据,emp.dep_id = dept.did;

连接查询

  • 内连接:相当于查询A,B相交的数据
-- 隐式内连接
select 字段列表 from12··· where 条件;
-- 显式内连接
select 字段列表 from1[inner] join2 on 条件;

select emp.name,emp.gender,dept.dname from emp,dept where emp.dep_id = dept.did;

select * from emp inner join dept on emp.dep_id = dept.did;#inner可省略
  • 外连接:

    左外连接:查询A表所有数据和交集部分数据

    右外连接:查询B表所有数据和交集部分数据

select * from emp left join dept on emp.dep_id = dept.did;
select * from emp right join dept on emp.dep_id = dept.did;

子查询

-- 查询中嵌套查询
select *from emp;
select salary from emp where name = '猪八戒'select *from emp where salary> 3600;
-- 通过子查询查询
select * from emp where salary >(select salary from emp where name = '猪八戒')-- 单行单列
-- 多行单列
select 字段列表 fromwhere 字段名 = (子查询)select 字段列表 fromwhere 字段名 in(子查询);

多行多列

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-esMvGD0Q-1678695634788)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-13 15.18.53.png)]

当作虚拟表

练习

-- 查询所有员工的信息,查询员工编号,员工姓名,工资,职务名称,职务描述
select emp.id,emp.name,emp.slary,job.jname,job.descrioption from emp,job where job_id = job.id;
select emp.id,emp.name,emp.slary,job.jname,job.descrioption from emp inner join job on job_id = job.id;
-- 查询加上部门名称,部门位置
#dept和emp一对多
select emp.id,emp.name,emp.slary,job.jname,job.descrioption,dept.dname,dept.loc from emp,job,dept where job_id = job.id and dept.id = emp.dept_id;
-- 查询员工的姓名,工资和工资等级
select * from emp,salarygrade t2 where emp.salary >= t2.losalary and <= t2.hisalary
-- 查询员工姓名,工资,职务名称,职务描述,部门名称,部门位置,工资等级
select emp.id,emp.name,emp.slary,job.jname,job.descrioption,dept.dname,dept.loc  t2.grade from emp,job,dept,salarygrade as t2 where job_id = job.id and dept.id = emp.dept_id
and emp.salary between t2.losalary and t2.hisalary;
-- 查询出部门编号,部门名称,部门位置,部门人数
select * from dept;
select dept_id,count(*) from emp group by dept_id;
select dept.id,dept.dname,dept.loc,t1.count from dept,(select dept_id,count(*) from emp group by dept_id) t1 where dept_id = t1.dept_id;

事务

  • 数据库的事务是一种机制,一个操作序列,包含了一组数据库的操作命令
  • 事务把所有的命令作为个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么同时成功,要么同时失败
  • 事务是一个不可分割的工作逻辑单元
-- 开启事务
start transaction;
begin;
-- 提交事务
commit;
-- 回滚事务;
rollback;

-- 转账操作
-- 李四-500,张三+500 update
update account set money = monny-500 where name = '李四'update account set money = monny+500 where name = '张三'-- 开启事务
beginupdate account set money = monny-500 where name = '李四'update account set money = monny+500 where name = '张三'commit;
-- 或者
rollback;
#要看是出错的还是正确的

事务四大特征

acid

  • 原子性:事务是不可分割的最小操作耽误,要么同时成功,要么同时失败
  • 一致性:事务完成时,必须使所有的数据都保持一致状体
  • 隔离性:多个事务之间,操作的可见性;
  • 持久性:事务一旦提交或回滚,它对数据库中的数据的改变就是永久的
-- 查询事务的默认提交方式
select @@autocommit;
-- 修改事务的默认提交方式
set @@autocommit = 0;
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值