数据库基础知识三

1、笛卡尔积(将两张表连成一张表的唯一途径)

2、真实表,由两个文件组成

.frm文件 定义表结构
.ibd文件 表数据

3、连表的2种方式

内连接 INNER JOIN

INNER JOIN 与 ON 最好成对出现
学生连接分数

SELECT *
FROM student INNER JOIN score
ON student.id=score.s_id;

外连接 outer join

分为左外连接和右外连接

SELECT *
FROM student LEFT OUTER JOIN score
ON student.id=score.s_id;
SELECT *
FROM student RIGHT OUTER JOIN score
ON student.id=score.s_id;

内连接与外连接的区别

1、内连接可以直接做笛卡尔积,外连接不能直接做笛卡尔积,后面必须跟上ON
2、内连接查询78条,外连接查询106条

create table if not exists category(
	id int primary key auto_increment comment '编号',
	name varchar(20) not null comment '品类名称',
	parentId int not null comment '父级编号',
	type int comment '类型',
	iconClass varchar(255) comment '品类图标',
	foreign key(parentId) references category(id)
);
INSERT INTO category VALUES ('548', '化妆品', '0', '1', '');
INSERT INTO category VALUES ('628', '家用商品', '0', '1', '');
INSERT INTO category VALUES ('654', '面部护理', '548', '2', '');
INSERT INTO category VALUES ('655', '少女派', '654', '3', '');
INSERT INTO category VALUES ('656', '餐具', '628', '2', '');
INSERT INTO category VALUES ('657', '卫具', '628', '2', '');
INSERT INTO category VALUES ('658', '叉子', '656', '3', '');
INSERT INTO category VALUES ('659', '锅', '656', '3', '');
INSERT INTO category VALUES ('660', '进口食品,生鲜', '0', '1', '');
INSERT INTO category VALUES ('661', '零食/糖果/巧克力', '660', '2', '');
INSERT INTO category VALUES ('662', '坚果', '661', '3', '');
INSERT INTO category VALUES ('663', '蜜饯', '661', '3', '');
INSERT INTO category VALUES ('669', '孕期教育', '546', '3', '');
INSERT INTO category VALUES ('670', '电子商品', '0', '1', '');
INSERT INTO category VALUES ('673', '联想手机', '671', '3', '');
INSERT INTO category VALUES ('674', '手环', '670', '2', '');
INSERT INTO category VALUES ('675', '小米手环', '674', '3', '');
INSERT INTO category VALUES ('676', '保健食品', '0', '1', '');
INSERT INTO category VALUES ('677', '老年保健品', '676', '2', '');
INSERT INTO category VALUES ('678', '中年营养品', '676', '2', '');
INSERT INTO category VALUES ('679', '儿童保健品', '676', '2', '');
INSERT INTO category VALUES ('680', '脑白金', '677', '3', '');
INSERT INTO category VALUES ('681', '箱包', '0', '1', '');
INSERT INTO category VALUES ('682', '旅行箱', '681', '2', '');
INSERT INTO category VALUES ('683', '手提箱', '681', '2', '');
INSERT INTO category VALUES ('690', '电脑', '670', '2', '');
INSERT INTO category VALUES ('691', '联想电脑', '690', '3', '');
INSERT INTO category VALUES ('692', '刀叉', '656', '3', null);
INSERT INTO category VALUES ('693', '碗筷', '656', '3', null);
INSERT INTO category VALUES ('696', '客厅专用', '628', '2', '');

查询所有的一级分类

select *
from category
where type=1;

查询所有的一级分类对应的二级分类
做笛卡尔积
c1和c2 其实是一张表
父表(主表) - 一级分类表 1
子表(从表) - 二级分类表 N
谁是主就看谁的名字
自连接(一张表体现一对多的关系)

select c2.name,c1.name
from category c1 inner join category c2 
on c1.parentid=c2.id  // c1的外键 连 c2的主键
where c2.type=1; 
select c1.name,c2.name
from category c1 inner join category c2 
on c1.id=c2.parentid 
where c1.type=1; 

查询所有的一级分类对应的二级分类(包含没有二级分类的一级分类)

INSERT INTO category VALUES (null, '汽车生活', 0, 1, '');
INSERT INTO category VALUES (null, '保健养生', 0, 1, '');
SELECT c1.name,c2.name
FROM category c1 LEFT OUTER JOIN category c2 
ON c1.id=c2.parentid 
WHERE c1.type=1; 

主键设置自增长 可以赋给它为空 但自增长会赋值

INSERT INTO category VALUES (null, '汽车生活', '0', '1', '');
INSERT INTO category VALUES (null, '保健养生', '0', '1', '');

4、表之间的关系

一对一的关系(可以设计为一张表,也可以设计为两张表)

一对多的关系(可以设计为一张表,也可以设计为两张表)

两张表:外键和所参考的字段不在一张表里,在另一张表里(两表连接)
一张表:自连接(外键和外键参考的主键在一张表里)A与A做笛卡尔积

多对多的关系(必须设计为三张表)

设计数据库时最重要的就是找数据关系

5、导入文件

在数据库中导入表文件
选中数据库右击选择运行SQL文件
在这里插入图片描述
在数据库中导入仓库
选中数据库新建数据库easybuy,选择easybuy数据库右击选择运行SQL文件 导入数据
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
查询 省 和 市

SELECT p1.name,p2.name
FROM pca p1 RIGHT OUTER JOIN pca p2
ON p1.id=p2.parent_id
WHERE p1.level=1

查询 省-市-区

SELECT p1.name,p2.name,p3.name
FROM pca p1 INNER JOIN pca p2
ON p1.id=p2.parent_id
INNER JOIN pca p3
ON p2.id=p3.parent_id

6、对接上数据库

tomcat服务器跑起来 - 单机tomcat - 对接上数据库
在navicat中新建一个easybuy数据库
选择easybuy数据库—>>右击选择运算SQL文件—>>点击浏览选择easybuy.sql数据库—>>点击开始—>>完成后点击关闭
在这里插入图片描述
先单机tomcat部署easybuy项目

systemctl stop firewalld
cd /usr/local/tomcat/conf
vim server.xml
<Context path="" docBase="EasyBuy" reloadable="true"/> //154行
cd ../bin
./startup.sh

浏览器输入单机192.168.20.10:8080(IP:8080) 显示如下页面
在这里插入图片描述

vim /usr/local/tomcat/webapps/EasyBuy/WEB-INF/classes/database.properties

修改ip为数据库所在ip地址
在这里插入图片描述
数据库服务器开放3306端口或关闭防火墙
退出保存重启tomcat

:wq!
cd ../../../../bin
./shutdown.sh
./startup.sh

刷新浏览器即可连接到数据库,连接成功会显示商品列表及购物车
在这里插入图片描述
在这里插入图片描述

7、数据的输入与输出

输入操作(增/删/改)
用户输入数据 到 数据库
注册账号后,用户表中会有对应的数据
数据库(中央仓库):是所有用户共享的
输出操作(查):
后台管理—一级分类–自动出来二级分类
在这里插入图片描述

-- 查询一级分类
SELECT *
FROM easybuy_product_category
WHERE type=1;

-- 根据一级分类查询二级分类
SELECT *
FROM easybuy_product_category
WHERE id = 670;

-- 根据二级分类查询三级分类
SELECT *
FROM easybuy_product_category
WHERE parentId = 670;

8、数据库的设计图

E-R图(Entity Relationship) 实体关系图
关系是程序做逻辑推理的基础

  • 一个用户有多个地址
  • 一个用户有多个订单
  • 一个订单有多个订单详情
  • 一个商品有多个订单详情
  • 一个品类有多种商品
  • 一个品类有多级分类
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白*进阶ing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值