添加外键(alter table 需要添加外键的表名 add foreign key(属性) references 连接的表名(属性);)
多表之间的建表原则
一对多:多的一方添加一个外键和一的一方的主键关联(例如:一个类别有多种商品,一个商品属于一个类别)
多对多:创建一张中间表分别添加外键与另外俩张表的主键关联(例如:一个学生可以选多个课程,一个课程有多个学生)
一对一:分成俩张表有外键关联或者合成一张表或者俩张表里面主键相等可建立连接(一个人只有一个身份证,一个身份证对应一个人)
==================================================================
商城建表实例
用户表(用户id,用户名,密码,手机)
create table user(
uid int primary key auto_increment,
uname varchar(31),
password varchar(31),
phone varchar(11)
);
//插入一条数据
insert into user values(1,'zhangsan','123','13811112222');
订单表(订单编号,总价,订单时间,地址,外键用户id)
create table orders(
oid int primary key auto_increment,
sum int,
otime timestamp,
address varchar(100),
uid int,
foreign key(uid) references user(uid)
);
//插入数据
insert into orders values(1,200,null,'香江1栋',1);
insert into orders values(2,220,null,'香江2栋',1);
商品表(商品id,商品名称,商品价格,外键商品分类cid)
create table product(
pid int primary key auto_increment,
pname varchar(10),
price double,
cid int,
foreign key(cid) references category(cid)
);
//插入数据
insert into product values(null,'小米',998,1);
insert into product values(null,'苹果',4998,1);
insert into product values(null,'中信',598,1);
insert into product values(null,'阿迪王',99,2);
insert into product values(null,'老村长',88,3);
insert into product values(null,'劲酒',35,3);
insert into product values(null,'小熊饼干',2,4);
insert into product values(null,'旺旺雪饼',5,4);
商品分类表(分类id,分类名称)
create table category(
cid int primary key auto_increment,
cname varchar(15)
);
//插入数据
insert into category values(null,'手机数码');
insert into category values(null,'鞋靴箱包');
insert into category values(null,'香烟酒水');
insert into category values(null,'馋嘴零食');
订单项(中间表 订单id,商品id,商品数量,订单项总价)
create table orderitem(
oid int,
pid int,
foreign key(oid) references orders(oid),
foreign key(pid) references product(pid),
sum int,
oicount int
);
//添加数据
insert into orderitem values(1,9,20,100);
insert into orderitem values(1,8,50,100);
insert into orderitem values(2,6,1,88);
insert into orderitem values(2,8,61,122);
//连表查询
select * from product,orderitem,orders where orders.oid=1 and orders.oid=orderitem.oid and orderitem.pid=product.pid;
//内连接查询
select * from product p,category c where p.cid=c.cid;//隐式内连接(先查询再用条件过滤)
select * from product p inner join category c on p.cid=c.cid;//显示内连接(带着条件查询,效率更高)
//左外连接(讲左表的数据都查询出来,如果右表没有对应数据,用null代替)
select * from product p left outer join category c on p.cid=c.cid;
//右外连接
select * from product p right outer join category c on p.cid=c.cid;
//分页查询
select * from product limit 0,1;(表示从0号索引开始查询1条记录)