资料来了
2021JAVAWEB 最新
链接:https://pan.baidu.com/s/1xRnIve6OqTG8pZ0M2zeHlw 
提取码:zy1i

数据库设计:
表关系--一对多:
- 一对多(多对一):
- 如:部门表和员工表
- 一个部门对应多个员工,一个员工对应一个部门
- 实现方式:在==多==的一方建立==外键==,指向一的一方的主键
表关系--多对多:
- 多对多:
- 如:订单和商品
- 一个商品对应多个订单,一个订单包含多个商品
- 实现方式:建立第三张==中间表==,中间表==至少包含两个外键==,分别关联==两方主键==
表关系--一对一:
- 一对一:
- 如:用户和用户详情
- 一对一关系多用于表拆分,将一个实体中经常使用的字段放一张表,不经常使用的放另一张表,用于提升查询性能
- 实现方式:在任意一方加入外键,关联另一方主键,并且设置外键为==唯一(unique)==

表关系
一对一:
如:用户和用户详情
一对一关系多用于表拆分,将一个实体中经常使用的字段放一张表,不经常使用的字段放另一张表,用于提升查询功能
一对多(多对一):
如:部门和员工
一个部门对应多个员工,一个员工对应一个部门
多对多:
如:商品和订单
一个商品对应多个订单,一个订单包含多个商品

### 事务四大特征
- 原子性(**A**tomicity):事务是不可分割的最小操作单位,要么同时成功,要么同时失败。
- 一致性(**C**onsistency):事务完成时,必须使所有的数据都保持一致状态。
- 隔离性(**I**solation):多个事务之间,操作的可见性。
- 持久性(**D**urability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

1. 数据库设计概念
- 数据库设计就是根据业务系统的具体要求,结合我们所选用的DBMS(数据库管理系统),为这个业务系统构造出最优的数据存储模型
- 建立数据库中的**表结构**以及**表与表之间的关联关系**的过程
- 有哪些表?表里有哪些字段?表和表之间有什么关系?
2. 数据库设计的步骤
1. 需求分析(数据是什么?数据具有哪些属性?数据与属性的特点是什么?)
2. 逻辑分析(通过ER图对数据库进行逻辑建模,不需要考虑我们所选用的数据库管理系统)
3. 物理设计(根据数据库自身的特点把逻辑设计转换为物理设计) //逻辑设计和物理设计通常合二为一了,ER图越来越少的人会去画了
4. 维护设计(1.对新的需求进行建表;2.表优化)

1,数据库
存储数据的仓库,数据是有组织的进行存储
英文DataBase,简称DB
2,数据库管理系统
管理数据库的大型软件
英文DataBase Management System, |简称DBMS,
3,SQL
英文Structured Query Language,简称SQL,结构化查询语言操作关系型数据库的编程语言
.定义操作所有关系型数据库的统标/准
Oracle:收费的大型数据库,Oracle 公司的产品
MySQL:开源免费的中小型数据库。后来Sun公司收购了MySQL,而Sun公司又被Oracle收购
●SQL Server: MicroSoft公司收费的中型的数据库。C#、.net等语言常使用
●PostgreSQL: 开源免费中小型的数据库
●DB2: IBM公司的大型收费数据库产品
. sQLite:嵌入式的微型数据库。如:作为Android内置数据库
. MariaDB:开源免费中小型的数据库
4,MySQL数据模型
关系型数据库
关系型数据库是建立在关系模型基础上的数据库,简单说,关系型数据库是由多张能互相连接的 二维表组成的数据库优点
1.都是使用表结构,格式一致,易于维护。
2.使用通用的SQL语言操作,使用方便,可用于复杂查询。
3.数据存储在磁盘中,安全。

SQL语法


  • SQL 语句可以单行或多行书写,以分号结尾
  • MySQL 的 SQL 语句不区分大小写,关键字建议大写
  • 单行注释


04-SQL简介&通用语法&分类


  1. DDL 数据定义语言,用于定义数据库、表、列等
  2. DML 数据操纵语言,用于对表中的数据进行增、删、改
  3. DQL 数据查询语言,用于查询表中的数据
  4. DCL 数据控制语言,用于控制数据库的访问权限安全级别及创建用户

P12的表和内容语句
CREATE TABLE stu (
    id INT,--编号
    NAME VARCHAR (20),-- 姓名
    age INT,-- 年龄
    sex VARCHAR (5), -- 性 别
    address VARCHAR (100),-- 地址
    math DOUBLE (5, 2),-- 数学成绩
    english DOUBLE (5, 2),-- 英语成绩
    hire_date date-- 入学时间
);
INSERT INTO stu(id,NAME,age,sex,address,math,english,hire_date)
VALUES
(1,'码云',55,'男','杭州',66,78,'1995-09-01'),
(2,'马化腾',55,'女','深圳',66,48,'1895-02-01'),
(3,'马斯克',55,'男','香港',23,78,'1995-03-01'),
(4,'流白',55,'男','湖南',66,58,'1994-09-04'),
(5,'留情',55,'女','湖南',66,NULL,'1595-09-01'),
(6,'刘德华',55,'男','香港',76,78,'1695-09-02'),
(7,'张学友',55,'男','香港',64,28,'1795-09-05'),
(8,'德玛西亚',55,'女','南京',96,78,'1195-09-09');

/*
分组函数
select 字段列表 from 表名 【where 分组前条件限定】 group by 分组字段名 【having 分组后条件过滤】
注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
where 和 having 区别:
    执行时间不一样:where时分组之前进行限定的,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤
    可判断的条件不一样:where不能对聚合函数进行判断,having可以。 原因是执行顺序不同
执行顺序:where > 聚合函数 > having
*/
select * from stu;
-- 1、查询男同学和女同学各自的数学平均分
select sex,avg(math) from stu group by sex;
select name,sex,avg(math) from stu group by sex; -- 包含其他字段无意义
-- 2、查询男同学和女同学各自的数学平均分,以及各自人数
select sex,avg(math),count(*) from stu group by sex;
-- 3、查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组
select sex,avg(math),count(*) from stu where math > 60 group by sex;
-- 4、查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数不低于70分的不参与分组,分组之后人数大于2
select sex,avg(math),count(*) from stu where math > 60 group by sex having count(*) > 1;
学习心得:这个老师讲的很好



SELECT*FROM stu WHERE age>20;
-- 查询年龄大于等于20岁且不小于40
SELECT*FROM stu WHERE age>=20&& age<=40;
SELECT*FROM stu WHERE age>=20 AND age<=40;
SELECT*FROM stu WHERE age BETWEEN 20 AND 40;
-- 查询入学日期
SELECT*FROM stu WHERE hire_data BETWEEN '1996-09-01' AND '1999-09-01';
-- 查询年龄等于45
SELECT*FROM stu WHERE age=45;
-- 查询年龄不等于45的信息
SELECT*FROM stu WHERE age!=45;
SELECT*FROM stu WHERE age <> 45;
-- 查询年龄等于35岁 或者 年龄等于 36岁或者年龄等于75岁的学员信息
SELECT*FROM stu WHERE age=35 OR age=36 OR age=75;
SELECT*FROM stu WHERE age IN(35,36,75);
-- 查询英语成绩为null的学员信息
-- 注意:null值的比较不能使用= !=,需要使用 is is not
SELECT*FROM stu WHERE english IS NULL;
SELECT*FROM stu WHERE english IS NOT NULL;


-- 删除tb_brand表
drop table if exists tb_brand;
-- 创建tb_brand表
create table tb_brand
(
-- id 主键
id int primary key auto_increment,
-- 品牌名称
brand_name varchar(20),
-- 企业名称
company_name varchar(20),
-- 排序字段
ordered int,
-- 描述信息
description varchar(100),
-- 状态:0:禁用 1:启用
status int
);
-- 添加数据
insert into tb_brand (brand_name, company_name, ordered, description, status)
values ('三只松鼠', '三只松鼠股份有限公司', 5, '好吃不上火', 0),
('华为', '华为技术有限公司', 100, '华为致力于把数字世界带入每个人、每个家庭、每个组织,构建万物互联的智能世界', 1),
('小米', '小米科技有限公司', 50, 'are you ok', 1);
public class Brand {
// id 主键
private Integer id;
// 品牌名称
private String brandName;
// 企业名称
private String companyName;
// 排序字段
private Integer ordered;
// 描述信息
private String description;
// 状态:0:禁用 1:启用
private Integer status;
}

案例代码
# 创建部门表
    CREATE TABLE dept(
        did INT PRIMARY KEY AUTO_INCREMENT,
        dname VARCHAR(20)
    );
    
    # 创建员工表
    CREATE TABLE emp (
        id INT PRIMARY KEY AUTO_INCREMENT,
        NAME VARCHAR(10),
        gender CHAR(1), -- 性别
        salary DOUBLE, -- 工资
        join_date DATE, -- 入职日期
        dep_id INT,
        FOREIGN KEY (dep_id) REFERENCES dept(did) -- 外键,关联部门表(部门表的主键)
    );
    -- 添加部门数据
    INSERT INTO dept (dNAME) VALUES ('研发部'),('市场部'),('财务部'),('销售部');
    -- 添加员工数据
    INSERT INTO emp(NAME,gender,salary,join_date,dep_id) VALUES
    ('孙悟空','男',7200,'2013-02-24',1),
    ('猪八戒','男',3600,'2010-12-02',2),
    ('唐僧','男',9000,'2008-08-08',2),
    ('白骨精','女',5000,'2015-10-07',3),
    ('蜘蛛精','女',4500,'2011-03-14',1),
    ('小白龙','男',2500,'2011-02-14',NULL);    
SELECT * FROM emp;
-- 多表查询
SELECT * FROM emp , dept;
-- 笛卡尔积 : 有 A ,B两个集合 取 A,B所有的组合情况
-- 消除无效数据
-- 查询emp 和 dept 的数据 ,emp.dep_id = dept.did
SELECT * FROM emp , dept WHERE emp.dep_id = dept.did;    
学习心得
笛卡尔积:取集合A与集合B的所有组合情况。连接查询:内:A,B集合交集。外:左外:A表数据和交集部分的数据。右外:B表数据和交集部分的数据
子查询:

案例学习代码
数据类型:1.数值2.日期3.字符串
设计一个学生表:
1.编号
2.姓名,姓名最长不超过10个汉字
3.性别,取值男女 因此只有最多输入一个汉字
4.生日,年月日
5.入学成绩,小数点后两位
6.邮件地址,最大长度不超过64
7.家庭联系电话,可能会出现其他情况
8.学生状态(以数字表示:1.正常2.休学3.毕业..)
create table student(
    id int,
    name varchar(10),//10个汉字
    gender char(1),
    birthday date,
    score double(5,2),
    email varchar(64),
    tel varchar(15),
    status tinyint
);
删除表
drop table 表名;
show table;//展示表
drop table if exist 表名;
alter table 表名 rename to 新表名;//修改表名
alter table 表名 add 列名 数据类型;//添加一列
alter table 表名 modify 列名 新数据类型;//修改数据类型modify(n 修改,改进)
alter table 表名 change 列名 新列名 新数据类型;//修改列名和数据类型
alter table 表名 drop列名;//删除列
图形化工具navicat,我现在用的是SQLyog。感觉navicat更好用一些,因为不需要频繁的刷新浏览器。
学习心得