[JavaWeb]【七】web后端开发-MYSQL

前言:MySQL是一种流行的关系型数据库管理系统,它的作用是存储和管理数据。在Web开发中,MySQL是必备的数据库技能之一,因为它可以帮助Web开发人员处理大量的数据,并且提供了强大的数据查询和管理功能。

一 数据库介绍

1.1 什么是数据库

[JavaWeb]【七】web后端开发-MYSQL_第1张图片

 1.2 数据库产品

[JavaWeb]【七】web后端开发-MYSQL_第2张图片

二 MySQL概述

2.1 下载

点开下面的链接:https://dev.mysql.com/downloads/mysql/

[JavaWeb]【七】web后端开发-MYSQL_第3张图片

点击Download 就可以下载对应的安装包了, 安装包如下:

2.2 解压

下载完成后我们得到的是一个压缩包,将其解压,我们就可以得到MySQL 8.0.31 的软件本体了(就是一个文件夹),我们可以把它放在你想安装的位置 。

[JavaWeb]【七】web后端开发-MYSQL_第4张图片

2.3 配置

2.3.1. 添加环境变量

环境变量里面有很多选项,这里我们只用到Path这个参数。为什么在初始化的开始要添加环境变量呢?

在黑框(即CMD)中输入一个可执行程序的名字,Windows会先在环境变量中的Path所指的路径中寻找一遍,如果找到了就直接执行,没找到就在当前工作目录找,如果还没找到,就报错。我们添加环境变量的目的就是能够在任意一个黑框直接调用MySQL中的相关程序而不用总是修改工作目录,大大简化了操作。

右键此电脑属性,点击高级系统设置

[JavaWeb]【七】web后端开发-MYSQL_第5张图片

点击环境变量

[JavaWeb]【七】web后端开发-MYSQL_第6张图片

系统变量中新建MYSQL_HOME

[JavaWeb]【七】web后端开发-MYSQL_第7张图片

系统变量中找到并双击Path

[JavaWeb]【七】web后端开发-MYSQL_第8张图片

点击新建

[JavaWeb]【七】web后端开发-MYSQL_第9张图片

 最后点击确定。

如何验证是否添加成功?

右键开始菜单(就是屏幕左下角),选择命令提示符(管理员),打开黑框,敲入mysql,回车。

[JavaWeb]【七】web后端开发-MYSQL_第10张图片

如果提示Can't connect to MySQL server on 'localhost'则证明添加成功;

如果提示mysql不是内部或外部命令,也不是可运行的程序或批处理文件则表示添加添加失败,请重新检查步骤并重试。

2.3.2. 初始化MySQL

==以管理员身份,运行命令行窗口:==

[JavaWeb]【七】web后端开发-MYSQL_第11张图片

在刚才的命令行中,输入如下的指令:

mysqld --initialize-insecure

稍微等待一会,如果出现没有出现报错信息,则证明data目录初始化没有问题,此时再查看MySQL目录下已经有data目录生成。

[JavaWeb]【七】web后端开发-MYSQL_第12张图片

tips:如果出现如下错误

是由于权限不足导致的,以管理员方式运行 cmd

[JavaWeb]【七】web后端开发-MYSQL_第13张图片

2.3.3. 注册MySQL服务

命令行(注意必须以管理员身份启动)中,输入如下的指令,回车执行:

mysqld -install

[JavaWeb]【七】web后端开发-MYSQL_第14张图片

现在你的计算机上已经安装好了MySQL服务了。

2.3.4. 启动MySQL服务

在黑框里敲入net start mysql,回车。

net start mysql  // 启动mysql服务
    
net stop mysql  // 停止mysql服务

[JavaWeb]【七】web后端开发-MYSQL_第15张图片

 2.3.5. 修改默认账户密码

在黑框里敲入mysqladmin -u root password 1234,这里的1234就是指默认管理员(即root账户)的密码,可以自行修改成你喜欢的。

mysqladmin -u root password 1234

2.4 登录MySQL

右键开始菜单,选择命令提示符,打开黑框。 在黑框中输入,mysql -uroot -p1234,回车,出现下图且左下角为mysql>,则登录成功。

mysql -uroot -p1234

[JavaWeb]【七】web后端开发-MYSQL_第16张图片

到这里你就可以开始你的MySQL之旅了!

退出mysql:

exit
quit

登陆参数:

mysql -u用户名 -p密码 -h要连接的mysql服务器的ip地址(默认127.0.0.1) -P端口号(默认3306)

2.5卸载MySQL

如果你想卸载MySQL,也很简单。

点击开始菜单,输入cmd,选择 "命令提示符",选择右侧的 "以管理员身份运行"。

[JavaWeb]【七】web后端开发-MYSQL_第17张图片

敲入net stop mysql,回车。

net stop mysql

[JavaWeb]【七】web后端开发-MYSQL_第18张图片

再敲入mysqld -remove mysql,回车。

mysqld -remove mysql

[JavaWeb]【七】web后端开发-MYSQL_第19张图片

最后删除MySQL目录及相关的环境变量。

至此,MySQL卸载完成!

2.2 数据模型

[JavaWeb]【七】web后端开发-MYSQL_第20张图片

 [JavaWeb]【七】web后端开发-MYSQL_第21张图片

2.3 SQL简介

[JavaWeb]【七】web后端开发-MYSQL_第22张图片

 [JavaWeb]【七】web后端开发-MYSQL_第23张图片

 [JavaWeb]【七】web后端开发-MYSQL_第24张图片

三 数据库设计-DDL

[JavaWeb]【七】web后端开发-MYSQL_第25张图片

3.1 数据库操作

[JavaWeb]【七】web后端开发-MYSQL_第26张图片

3.2 MySQL客户端工具

[JavaWeb]【七】web后端开发-MYSQL_第27张图片

IDEA

[JavaWeb]【七】web后端开发-MYSQL_第28张图片

[JavaWeb]【七】web后端开发-MYSQL_第29张图片 [JavaWeb]【七】web后端开发-MYSQL_第30张图片

 [JavaWeb]【七】web后端开发-MYSQL_第31张图片

3.2 数据类型 

[JavaWeb]【七】web后端开发-MYSQL_第32张图片

3.2.1 数值类型

[JavaWeb]【七】web后端开发-MYSQL_第33张图片

3.2.2 字符串类型

[JavaWeb]【七】web后端开发-MYSQL_第34张图片

3.2.3 日期时间类型

[JavaWeb]【七】web后端开发-MYSQL_第35张图片

  

3.2.4 案例

[JavaWeb]【七】web后端开发-MYSQL_第36张图片

 [JavaWeb]【七】web后端开发-MYSQL_第37张图片 

create table tb_emp
(
    id          int auto_increment comment 'ID 主键'
        primary key,
    username    varchar(20)                  not null comment '用户名',
    password    varchar(32) default '123456' not null comment '密码',
    name        varchar(10)                  not null comment '姓名',
    gender      tinyint unsigned             not null comment '性别(1男  2 女)',
    image       varchar(300)                 null comment '图形url',
    job         tinyint unsigned             null comment '职位(1、班主任 2 讲师 3 学生主管 4 教研主管)',
    entrydate   date                         null comment '入职日期',
    create_time datetime                     not null comment '创建时间',
    update_time datetime                     not null comment '修改时间'
)
    comment '员工表';

[JavaWeb]【七】web后端开发-MYSQL_第38张图片

3.3 表(创建、查询、修改、删除)

3.3.1 创建表

[JavaWeb]【七】web后端开发-MYSQL_第39张图片

 [JavaWeb]【七】web后端开发-MYSQL_第40张图片


create table tb_user(
    id int primary key auto_increment comment 'id,唯一标识',
    username varchar(20) not null unique comment '用户名',
    name varchar(10) not null comment '姓名',
    age int comment '年龄',
    gender char(1) default '男' comment '性别'
) comment '用户表';

[JavaWeb]【七】web后端开发-MYSQL_第41张图片

 3.3.2 查询

 [JavaWeb]【七】web后端开发-MYSQL_第42张图片

 3.3.3 修改

[JavaWeb]【七】web后端开发-MYSQL_第43张图片

 [JavaWeb]【七】web后端开发-MYSQL_第44张图片

3.3.4 删除

 [JavaWeb]【七】web后端开发-MYSQL_第45张图片

四 数据库操作-DML

[JavaWeb]【七】web后端开发-MYSQL_第46张图片

 4.1 添加数据 - insert

[JavaWeb]【七】web后端开发-MYSQL_第47张图片

[JavaWeb]【七】web后端开发-MYSQL_第48张图片

4.2 修改数据 - update

[JavaWeb]【七】web后端开发-MYSQL_第49张图片

[JavaWeb]【七】web后端开发-MYSQL_第50张图片

4.3 删除数据 - delete

[JavaWeb]【七】web后端开发-MYSQL_第51张图片

 [JavaWeb]【七】web后端开发-MYSQL_第52张图片

 4.4 总结

[JavaWeb]【七】web后端开发-MYSQL_第53张图片

五 数据库操作-DQL

[JavaWeb]【七】web后端开发-MYSQL_第54张图片

 [JavaWeb]【七】web后端开发-MYSQL_第55张图片

5.1 创建db02数据库,并执行脚本

-- 员工管理(带约束)
create table tb_emp (
                        id int unsigned primary key auto_increment comment 'ID',
                        username varchar(20) not null unique comment '用户名',
                        password varchar(32) default '123456' comment '密码',
                        name varchar(10) not null comment '姓名',
                        gender tinyint unsigned not null comment '性别, 说明: 1 男, 2 女',
                        image varchar(300) comment '图像',
                        job tinyint unsigned comment '职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管',
                        entrydate date comment '入职时间',
                        create_time datetime not null comment '创建时间',
                        update_time datetime not null comment '修改时间'
) comment '员工表';

-- 准备测试数据
INSERT INTO tb_emp (id, username, password, name, gender, image, job, entrydate, create_time, update_time) VALUES
                                                                                                               (1, 'jinyong', '123456', '金庸', 1, '1.jpg', 4, '2000-01-01', '2022-10-27 16:35:33', '2022-10-27 16:35:35'),
                                                                                                               (2, 'zhangwuji', '123456', '张无忌', 1, '2.jpg', 2, '2015-01-01', '2022-10-27 16:35:33', '2022-10-27 16:35:37'),
                                                                                                               (3, 'yangxiao', '123456', '杨逍', 1, '3.jpg', 2, '2008-05-01', '2022-10-27 16:35:33', '2022-10-27 16:35:39'),
                                                                                                               (4, 'weiyixiao', '123456', '韦一笑', 1, '4.jpg', 2, '2007-01-01', '2022-10-27 16:35:33', '2022-10-27 16:35:41'),
                                                                                                               (5, 'changyuchun', '123456', '常遇春', 1, '5.jpg', 2, '2012-12-05', '2022-10-27 16:35:33', '2022-10-27 16:35:43'),
                                                                                                               (6, 'xiaozhao', '123456', '小昭', 2, '6.jpg', 3, '2013-09-05', '2022-10-27 16:35:33', '2022-10-27 16:35:45'),
                                                                                                               (7, 'jixiaofu', '123456', '纪晓芙', 2, '7.jpg', 1, '2005-08-01', '2022-10-27 16:35:33', '2022-10-27 16:35:47'),
                                                                                                               (8, 'zhouzhiruo', '123456', '周芷若', 2, '8.jpg', 1, '2014-11-09', '2022-10-27 16:35:33', '2022-10-27 16:35:49'),
                                                                                                               (9, 'dingminjun', '123456', '丁敏君', 2, '9.jpg', 1, '2011-03-11', '2022-10-27 16:35:33', '2022-10-27 16:35:51'),
                                                                                                               (10, 'zhaomin', '123456', '赵敏', 2, '10.jpg', 1, '2013-09-05', '2022-10-27 16:35:33', '2022-10-27 16:35:53'),
                                                                                                               (11, 'luzhangke', '123456', '鹿杖客', 1, '11.jpg', 2, '2007-02-01', '2022-10-27 16:35:33', '2022-10-27 16:35:55'),
                                                                                                               (12, 'hebiweng', '123456', '鹤笔翁', 1, '12.jpg', 2, '2008-08-18', '2022-10-27 16:35:33', '2022-10-27 16:35:57'),
                                                                                                               (13, 'fangdongbai', '123456', '方东白', 1, '13.jpg', 1, '2012-11-01', '2022-10-27 16:35:33', '2022-10-27 16:35:59'),
                                                                                                               (14, 'zhangsanfeng', '123456', '张三丰', 1, '14.jpg', 2, '2002-08-01', '2022-10-27 16:35:33', '2022-10-27 16:36:01'),
                                                                                                               (15, 'yulianzhou', '123456', '俞莲舟', 1, '15.jpg', 2, '2011-05-01', '2022-10-27 16:35:33', '2022-10-27 16:36:03'),
                                                                                                               (16, 'songyuanqiao', '123456', '宋远桥', 1, '16.jpg', 2, '2010-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:05'),
                                                                                                               (17, 'chenyouliang', '12345678', '陈友谅', 1, '17.jpg', null, '2015-03-21', '2022-10-27 16:35:33', '2022-10-27 16:36:07'),
                                                                                                               (18, 'zhang1', '123456', '张一', 1, '2.jpg', 2, '2015-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:09'),
                                                                                                               (19, 'zhang2', '123456', '张二', 1, '2.jpg', 2, '2012-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:11'),
                                                                                                               (20, 'zhang3', '123456', '张三', 1, '2.jpg', 2, '2018-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:13'),
                                                                                                               (21, 'zhang4', '123456', '张四', 1, '2.jpg', 2, '2015-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:15'),
                                                                                                               (22, 'zhang5', '123456', '张五', 1, '2.jpg', 2, '2016-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:17'),
                                                                                                               (23, 'zhang6', '123456', '张六', 1, '2.jpg', 2, '2012-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:19'),
                                                                                                               (24, 'zhang7', '123456', '张七', 1, '2.jpg', 2, '2006-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:21'),
                                                                                                               (25, 'zhang8', '123456', '张八', 1, '2.jpg', 2, '2002-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:23'),
                                                                                                               (26, 'zhang9', '123456', '张九', 1, '2.jpg', 2, '2011-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:25'),
                                                                                                               (27, 'zhang10', '123456', '张十', 1, '2.jpg', 2, '2004-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:27'),
                                                                                                               (28, 'zhang11', '123456', '张十一', 1, '2.jpg', 2, '2007-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:29'),
                                                                                                               (29, 'zhang12', '123456', '张十二', 1, '2.jpg', 2, '2020-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:31');


 5.2 select语法-基本查询

[JavaWeb]【七】web后端开发-MYSQL_第56张图片

--  =================== DQL: 基本查询 ======================
-- 1. 查询指定字段 name,entrydate 并返回
select name,entrydate from tb_emp;


-- 2. 查询返回所有字段
select id, username, password, name, gender, image, job, entrydate, create_time, update_time from tb_emp;
select * from tb_emp;

-- 3. 查询所有员工的 name,entrydate, 并起别名(姓名、入职日期)
select name as 姓名,entrydate as 入职日期 from tb_emp;
select name 姓名,entrydate 入职日期 from tb_emp;
select name '姓  名',entrydate 入职日期 from tb_emp;

-- 4. 查询已有的员工关联了哪几种职位(不要重复)
select distinct  job from tb_emp;


 5.3 select语法-条件查询

[JavaWeb]【七】web后端开发-MYSQL_第57张图片

--  =================== DQL: 条件查询 ======================
-- 1. 查询 姓名 为 杨逍 的员工
select * from tb_emp where name='杨逍';

-- 2. 查询 id小于等于5 的员工信息
select * from tb_emp where id <= 5;

-- 3. 查询 没有分配职位 的员工信息
select * from tb_emp where job is null;

-- 4. 查询 有职位 的员工信息
select * from tb_emp where job is not null;

-- 5. 查询 密码不等于 '123456' 的员工信息
select * from tb_emp where password != '123456';
select * from tb_emp where password <> '123456';

-- 6. 查询 入职日期 在 '2000-01-01' (包含) 到 '2010-01-01'(包含) 之间的员工信息
select * from tb_emp where entrydate >='2000-01-01' and entrydate <='2100-01-01';
select * from tb_emp where entrydate between '2000-01-01' and '2100-01-01';
-- 7. 查询 入职时间 在 '2000-01-01' (包含) 到 '2010-01-01'(包含) 之间 且 性别为女 的员工信息
select * from tb_emp where entrydate between '2000-01-01' and '2100-01-01' and gender = 2;


-- 8. 查询 职位是 2 (讲师), 3 (学工主管), 4 (教研主管) 的员工信息
select * from tb_emp where job ='2'or job= '3' or job='4';
select * from tb_emp where job in(2, 3, 4);
-- 9. 查询 姓名 为两个字的员工信息
select * from tb_emp where name like '__';

-- 10. 查询 姓 '张' 的员工信息
select * from tb_emp where name like '张%';

 5.4 select语法-分组查询

[JavaWeb]【七】web后端开发-MYSQL_第58张图片

 [JavaWeb]【七】web后端开发-MYSQL_第59张图片

--  =================== DQL: 分组查询 ======================
-- 聚合函数

-- 1. 统计该企业员工数量
-- A 字段
select count(id) from tb_emp;
-- B 常量
select count(1) from tb_emp;

-- C *
select count(*) from tb_emp;

-- 2. 统计该企业员工 ID 的平均值
select avg(id) from tb_emp;

-- 3. 统计该企业最早入职的员工
select min(entrydate) from tb_emp;

-- 4. 统计该企业最迟入职的员工
select max(entrydate) from tb_emp;

-- 5. 统计该企业员工的 ID 之和
select sum(id) from tb_emp;



-- 分组
-- 1. 根据性别分组 , 统计男性和女性员工的数量
select gender,count(*) from tb_emp group by gender;

-- 3. 先查询入职时间在 '2015-01-01' (包含) 以前的员工 , 并对结果根据职位分组 , 获取员工数量大于等于2的职位
select job,count(*) from tb_emp where entrydate <= '2015-01-01' group by job having count(*) >= 2 ;

5.5 select语法-排序查询

[JavaWeb]【七】web后端开发-MYSQL_第60张图片

--  =================== 排序查询 ======================
-- 1. 根据入职时间, 对员工进行升序排序
select * from tb_emp order by entrydate;
select * from tb_emp order by entrydate asc;

-- 2. 根据入职时间, 对员工进行降序排序
select * from tb_emp order by entrydate desc ;

-- 3. 根据 入职时间 对公司的员工进行 升序排序 , 入职时间相同 , 再按照 更新时间 进行降序排序
select * from tb_emp order by entrydate,update_time desc ;

 5.6 select语法-分页查询

[JavaWeb]【七】web后端开发-MYSQL_第61张图片

--  =================== 分页查询 ======================
-- 1. 从起始索引0开始查询员工数据, 每页展示5条记录
select * from tb_emp limit 0,5;

-- 2. 查询 第1页 员工数据, 每页展示5条记录
select * from tb_emp limit 0,5;

-- 3. 查询 第2页 员工数据, 每页展示5条记录
select * from tb_emp limit 5,5;

-- 4. 查询 第3页 员工数据, 每页展示5条记录
select * from tb_emp limit 10,5;

-- 5467 起始索引计算公式 = (页码- 1) * 每页展示记录数

select * from tb_emp limit 10,5;

 5.7 案例1

[JavaWeb]【七】web后端开发-MYSQL_第62张图片

  

select *
from tb_emp
where name like '张%'
  and gender = 1
  and entrydate between '2000-01-01' and '2015-12-31'
order by update_time desc
limit 0, 10;

 5.8 案例2

[JavaWeb]【七】web后端开发-MYSQL_第63张图片

-- 2.1
select if(gender=1,'男性员工','女性员工') 性别,count(*) from tb_emp group by gender;

-- 2-2
select (case job when 1 then '班主任' when 2 then '讲师' when 3 then '学生主管'  when 4 then '教研主管' else '未分配职位' end ) as 职位,count(*) from tb_emp group by job;

 5.9 总结

[JavaWeb]【七】web后端开发-MYSQL_第64张图片

六 多表设计

[JavaWeb]【七】web后端开发-MYSQL_第65张图片

6.1 一对多

 [JavaWeb]【七】web后端开发-MYSQL_第66张图片

 [JavaWeb]【七】web后端开发-MYSQL_第67张图片

  

-- 部门管理
create table tb_dept(
    id int unsigned primary key auto_increment comment '主键ID',
    name varchar(10) not null unique comment '部门名称',
    create_time datetime not null comment '创建时间',
    update_time datetime not null comment '修改时间'
) comment '部门表';


-- 员工管理(带约束)
create table tb_emp (
  id int unsigned primary key auto_increment comment 'ID',
  username varchar(20) not null unique comment '用户名',
  password varchar(32) default '123456' comment '密码',
  name varchar(10) not null comment '姓名',
  gender tinyint unsigned not null comment '性别, 说明: 1 男, 2 女',
  image varchar(300) comment '图像',
  job tinyint unsigned comment '职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管',
  entrydate date comment '入职时间',
  dept_id int unsigned comment '部门ID',
  create_time datetime not null comment '创建时间',
  update_time datetime not null comment '修改时间'
) comment '员工表';


insert into tb_dept (id, name, create_time, update_time) values
        (1,'学工部',now(),now()),(2,'教研部',now(),now()),(3,'咨询部',now(),now()),
        (4,'就业部',now(),now()),(5,'人事部',now(),now());

INSERT INTO tb_emp
	(id, username, password, name, gender, image, job, entrydate,dept_id, create_time, update_time) VALUES
	(1,'jinyong','123456','金庸',1,'1.jpg',4,'2000-01-01',2,now(),now()),
	(2,'zhangwuji','123456','张无忌',1,'2.jpg',2,'2015-01-01',2,now(),now()),
	(3,'yangxiao','123456','杨逍',1,'3.jpg',2,'2008-05-01',2,now(),now()),
	(4,'weiyixiao','123456','韦一笑',1,'4.jpg',2,'2007-01-01',2,now(),now()),
	(5,'changyuchun','123456','常遇春',1,'5.jpg',2,'2012-12-05',2,now(),now()),
	(6,'xiaozhao','123456','小昭',2,'6.jpg',3,'2013-09-05',1,now(),now()),
	(7,'jixiaofu','123456','纪晓芙',2,'7.jpg',1,'2005-08-01',1,now(),now()),
	(8,'zhouzhiruo','123456','周芷若',2,'8.jpg',1,'2014-11-09',1,now(),now()),
	(9,'dingminjun','123456','丁敏君',2,'9.jpg',1,'2011-03-11',1,now(),now()),
	(10,'zhaomin','123456','赵敏',2,'10.jpg',1,'2013-09-05',1,now(),now()),
	(11,'luzhangke','123456','鹿杖客',1,'11.jpg',1,'2007-02-01',1,now(),now()),
	(12,'hebiweng','123456','鹤笔翁',1,'12.jpg',1,'2008-08-18',1,now(),now()),
	(13,'fangdongbai','123456','方东白',1,'13.jpg',2,'2012-11-01',2,now(),now()),
	(14,'zhangsanfeng','123456','张三丰',1,'14.jpg',2,'2002-08-01',2,now(),now()),
	(15,'yulianzhou','123456','俞莲舟',1,'15.jpg',2,'2011-05-01',2,now(),now()),
	(16,'songyuanqiao','123456','宋远桥',1,'16.jpg',2,'2010-01-01',2,now(),now()),
	(17,'chenyouliang','123456','陈友谅',1,'17.jpg',NULL,'2015-03-21',NULL,now(),now());



  外键约束

[JavaWeb]【七】web后端开发-MYSQL_第68张图片

 ​​​​​​​[JavaWeb]【七】web后端开发-MYSQL_第69张图片

6.2 一对一

 [JavaWeb]【七】web后端开发-MYSQL_第70张图片


-- ===========================================一对一=====================================
create table tb_user(
    id int unsigned  primary key auto_increment comment 'ID',
    name varchar(10) not null comment '姓名',
    gender tinyint unsigned not null comment '性别, 1 男  2 女',
    phone char(11) comment '手机号',
    degree varchar(10) comment '学历'
) comment '用户信息表';

insert into tb_user values (1,'白眉鹰王',1,'18812340001','初中'),
                        (2,'青翼蝠王',1,'18812340002','大专'),
                        (3,'金毛狮王',1,'18812340003','初中'),
                        (4,'紫衫龙王',2,'18812340004','硕士');


create table tb_user_card(
    id int unsigned  primary key auto_increment comment 'ID',
    nationality varchar(10) not null comment '民族',
    birthday date not null comment '生日',
    idcard char(18) not null comment '身份证号',
    issued varchar(20) not null comment '签发机关',
    expire_begin date not null comment '有效期限-开始',
    expire_end date comment '有效期限-结束',
    user_id int unsigned not null unique comment '用户ID',
    constraint fk_user_id foreign key (user_id) references tb_user(id)
) comment '用户信息表';

insert into tb_user_card values (1,'汉','1960-11-06','100000100000100001','朝阳区公安局','2000-06-10',null,1),
        (2,'汉','1971-11-06','100000100000100002','静安区公安局','2005-06-10','2025-06-10',2),
        (3,'汉','1963-11-06','100000100000100003','昌平区公安局','2006-06-10',null,3),
        (4,'回','1980-11-06','100000100000100004','海淀区公安局','2008-06-10','2028-06-10',4);

6.3 多对多

[JavaWeb]【七】web后端开发-MYSQL_第71张图片

--  ======================================多对多=============================
create table tb_student(
    id int auto_increment primary key comment '主键ID',
    name varchar(10) comment '姓名',
    no varchar(10) comment '学号'
) comment '学生表';
insert into tb_student(name, no) values ('黛绮丝', '2000100101'),('谢逊', '2000100102'),('殷天正', '2000100103'),('韦一笑', '2000100104');


create table tb_course(
   id int auto_increment primary key comment '主键ID',
   name varchar(10) comment '课程名称'
) comment '课程表';
insert into tb_course (name) values ('Java'), ('PHP'), ('MySQL') , ('Hadoop');


create table tb_student_course(
   id int auto_increment comment '主键' primary key,
   student_id int not null comment '学生ID',
   course_id  int not null comment '课程ID',
   constraint fk_courseid foreign key (course_id) references tb_course (id),
   constraint fk_studentid foreign key (student_id) references tb_student (id)
)comment '学生课程中间表';

insert into tb_student_course(student_id, course_id) values (1,1),(1,2),(1,3),(2,2),(2,3),(3,4);

 [JavaWeb]【七】web后端开发-MYSQL_第72张图片

 [JavaWeb]【七】web后端开发-MYSQL_第73张图片

 6.4 总结

[JavaWeb]【七】web后端开发-MYSQL_第74张图片

 6.5 综合案例

[JavaWeb]【七】web后端开发-MYSQL_第75张图片

-- 瑞吉点餐页面原型 , 设计表结构
-- 分类表
create table category(
    id int unsigned primary key auto_increment comment '主键ID',
    name varchar(20) not null unique comment '分类名称',
    type tinyint unsigned not null comment '类型 1 菜品分类 2 套餐分类',
    sort tinyint unsigned not null comment '顺序',
    status tinyint unsigned not null default 0 comment '状态 0 禁用,1 启用',
    create_time datetime not null comment '创建时间',
    update_time datetime not null comment '更新时间'
) comment '菜品及套餐分类' ;

-- 菜品表
create table dish(
    id int unsigned primary key auto_increment comment '主键ID',
    name varchar(20) not null unique comment '菜品名称',
    category_id int unsigned not null comment '菜品分类ID',
    price decimal(8, 2) not null comment '菜品价格',
    image varchar(300) not null comment '菜品图片',
    description varchar(200) comment '描述信息',
    status tinyint unsigned not null default 0 comment '状态, 0 停售 1 起售',
    create_time datetime not null comment '创建时间',
    update_time datetime not null comment '更新时间'
) comment '菜品';

-- 套餐表
create table setmeal(
    id int unsigned primary key auto_increment comment '主键ID',
    name varchar(20) not null unique comment '套餐名称',
    category_id int unsigned not null comment '分类id',
    price decimal(8, 2) not null comment '套餐价格',
    image varchar(300) not null comment '图片',
    description varchar(200) comment '描述信息',
    status tinyint unsigned not null default 0 comment '状态 0:停用 1:启用',
    create_time datetime not null comment '创建时间',
    update_time datetime not null comment '更新时间'
)comment '套餐' ;


-- 套餐菜品关联表
create table setmeal_dish(
    id int unsigned primary key auto_increment comment '主键ID',
    setmeal_id int unsigned not null comment '套餐id ',
    dish_id int unsigned not null comment '菜品id',
    copies tinyint unsigned not null comment '份数'
)comment '套餐菜品关系';










七 多表查询

[JavaWeb]【七】web后端开发-MYSQL_第76张图片

[JavaWeb]【七】web后端开发-MYSQL_第77张图片

7.1 内连接

[JavaWeb]【七】web后端开发-MYSQL_第78张图片

 [JavaWeb]【七】web后端开发-MYSQL_第79张图片

7.2  外连接

[JavaWeb]【七】web后端开发-MYSQL_第80张图片

[JavaWeb]【七】web后端开发-MYSQL_第81张图片

7.3 子查询

[JavaWeb]【七】web后端开发-MYSQL_第82张图片

 ​​​​​​​[JavaWeb]【七】web后端开发-MYSQL_第83张图片

 [JavaWeb]【七】web后端开发-MYSQL_第84张图片

 [JavaWeb]【七】web后端开发-MYSQL_第85张图片

 [JavaWeb]【七】web后端开发-MYSQL_第86张图片

 ​​​​​​​[JavaWeb]【七】web后端开发-MYSQL_第87张图片

 [JavaWeb]【七】web后端开发-MYSQL_第88张图片

 [JavaWeb]【七】web后端开发-MYSQL_第89张图片

7.4 总结

[JavaWeb]【七】web后端开发-MYSQL_第90张图片

7.5 案例

[JavaWeb]【七】web后端开发-MYSQL_第91张图片

 [JavaWeb]【七】web后端开发-MYSQL_第92张图片[JavaWeb]【七】web后端开发-MYSQL_第93张图片

 [JavaWeb]【七】web后端开发-MYSQL_第94张图片

 [JavaWeb]【七】web后端开发-MYSQL_第95张图片

 [JavaWeb]【七】web后端开发-MYSQL_第96张图片

 [JavaWeb]【七】web后端开发-MYSQL_第97张图片

 [JavaWeb]【七】web后端开发-MYSQL_第98张图片

八 事务

8.1 概念

[JavaWeb]【七】web后端开发-MYSQL_第99张图片

8.2 操作

[JavaWeb]【七】web后端开发-MYSQL_第100张图片 

 [JavaWeb]【七】web后端开发-MYSQL_第101张图片

 8.3 四大特性

 ​​​​​​​[JavaWeb]【七】web后端开发-MYSQL_第102张图片

 8.4 总结 

 [JavaWeb]【七】web后端开发-MYSQL_第103张图片

九 索引

你可能感兴趣的:(java,mysql,数据库)