一、修改表-添加外键约束
外键约束:foreign key
。给product中的这个cno添加一个外键约束
alter table product add foreign key(cno) references category(cid);
。从分类表中,删除分类为5信息
。delete from category where cid=5;
。首先得去product表,删除所有分类ID5商品
建立数据库原则:一个项目/应用 对应 一个数据库
多表之间得建表原则:
1.一对多:商品和分类
。建表原则:在多得一方添加一个外键,指向一的一方的主键
2.多对多:老师和学生,学生和课程
。建表原则:建立一张中间表,将多对多的关系,拆分成一对多的关系,中间表至少要有两个外键分别指向原来的那两张表
3.多对一
4.一对一:在一个表中添加一个列(外键) 指向另一个表的主键
主键约束:默认就是不能为空,唯一
。外键都是指向另一张表的主键
。主键一张表只能有一个
唯一约束:列面的内容,必须是唯一,不能出现重复情况,为空
。唯一约束不可以作为其他表的外键
。可以有多个唯一约束
二、多表查询
- 交叉连接查询 笛卡尔积
select * from product;
select * from category;
笛卡尔积,查出来是两张表的乘积,查出来的结果没有意义
select * from product,category;
--过滤出有意义的数据
select * from product,category where cno=cid;
select * from product as p,category as c where p.cno=c.cid;
数据准备
insert into product values (null,'耐克蒂',998,null,null);
--内连接查寻
---隐式内连接
select * from product as p,category as c where p.cno=c.cid;
---显式内连接
select * from product p inner join category c on p.cno=c.cid;
区别:
隐式内连接:在查询出结果额基础上去做的where条件过滤
显示内连接:带着条件去查询结果,执行效高
--左外连接:会将左表中的所有的数据都查询出来,如果右表中没有对应的数据,用null代替
select * from product p left outer join category c on p.cno=c.cid;
数据准备:
insert into category values (100,'电脑办公','电脑又出错');
--右外连接:会将右表中的所有的数据都查询出来,如果左表中没有对应的数据,用null代替
select * from product p right outer join category c on p.cno=c.cid;
分页查询
。每页数据3
。起始索引从0
。第一页:0
。第二页:3
起始索引:index代表显示第几页
每页显示3条数据
startIndex = (index-1)*3
第一个参数是索引
第二个参数显示的个数
select * from product limit 0,3;
select * from product limit 3,3;
--子查询
---查询分类名称为手机数码的所有商品
1.查询分类名为手机数码的ID
select cid from category where cname = '手机数码';
2.得出ID为1的结果
select * from product where cno = (select cid from category where cname='手机数码');
--查询出(商品名称,商品分类名称)信息
--左连接
select p.pname,c.cname from product p left outer join category c on p.cno = c.cid;
--子查询
select pname,(select cname from category c where p.cno=c.cid) as 商品分类名称 from product p;