一、外键约束
1.定义方式:
外键约束是指用于在两个表之间建立关系,需要指定引用主表的哪一列。
foreign key
foreign key(ordersid) references orders(id)
例子:
添加一个外键: alter table product add foreign key(cid) references category(cid);
注意:删除的时候, 先删除外键关联的所有数据,再才能删除分类的数据
2.实例演示:
- 网上购物商城实例: 用户购物流程
-用户表 (用户的ID,用户名,密码,手机)
create table user(
uid int primary key auto_increment,
username varchar(31),
password varchar(31),
phone varchar(11)
);
insert into user values(1,'xiangzaixiansheng','123','15555555555');
订单表 (订单编号,总价,订单时间 ,地址,外键用户的ID)
create table orders(
oid int primary key auto_increment,
sum int not null,
otime timestamp,
address varchar(100),
uno int,
foreign key(uno) references user(uid)
);
insert into orders values(1,200,null,'张江创新园',1);
insert into orders values(2,250,null,'传奇广场',1);
```
商品表 (商品ID, 商品名称,商品价格,外键cno)
create table product(
pid int primary key auto_increment,
pname varchar(10),
price double,
cno int,
foreign key(cno) references category(cid)
);
insert into product values(null,'iphone',6998,1);
insert into product values(null,'锤子',2888,1);
insert into product values(null,'阿迪达斯',299,2);
insert into product values(null,'老村长',88,3);
insert into product values(null,'茅台',1500,3);
insert into product values(null,'小熊饼干',1,4);
```
订单项: 中间表(订单ID,商品ID,商品数量,订单项总价) 多对多需要新建一张表
create table orderitem(
ono int,
pno int,
foreign key(ono) references orders(oid),
foreign key(pno) references product(pid),
ocount int,
subsum double
);
--给1号订单添加商品 200块钱的商品
insert into orderitem values(1,7,100,100);
insert into orderitem values(1,8,101,100);
--给2号订单添加商品 250块钱的商品 ()
insert into orderitem values(2,5,1,35);
insert into orderitem values(2,3,3,99);
```
商品分类表(分类ID,分类名称,分类描述)
create table category(
cid int primary key auto_increment,
cname varchar(15),
cdesc varchar(100)
);
insert into category values(null,'相机','电子产品,东莞生产');
insert into category values(null,'鞋靴箱包','江南皮鞋厂');
```
二、其他介绍
主键约束: 默认就是不能为空, 唯一
- 外键都是指向另外一张表的主键
- 主键一张表只能有一个
唯一约束: 列面的内容, 必须是唯一, 不能出现重复情况, 为空
- 唯一约束不可以作为其它表的外键
- 可以有多个唯一约束
三、多表查询
1.内连接查询-查询出两张表的交集
//隐式内连接
select * from product p,category c where p.id=c.id;
//显示内连接
select * from product p inner join category c on p.id=c.id;
2.外连接查询
左外连接:将会把左表中的数据都查询出来,右表中没有的将会用null代替。
select * from product p left outer join category c on p.id=c.id;
右外连接
select * from product p right outer join category c on p.id=c.id;
查询出来的数据的效果图:
3.分页查询
第一个参数是显示页的索引,第二个参数是要显示的个数。
select * from product limit 0,3;