主表: category (分类表) cid为主键
从表:product(商品表) category_id为外键
外键特点: 1.从表外键的值是对主表主键的引用.
2.从表外键类型,必须与主表主键类型一致.
语法:
alter table 从表 add[constraint] [外键名称] foreign key (从表外键字段名) references 主表(主表的主键)
// [外键名称]可以不写,[外键名称]用于删除外键约束删除外键约束:
alter table 从表 drop foreign key 外键名称
alter table product add foreign key(category_id) references category(cid);
从表 外键 主表 主键
要想删除主表中与从表有关联关系的数据,可以这么做:
-
解除主从表的约束关系
-
先删除从表中与主表有关系的数据,再删除主表中的数据。
另外,从表也不能添加主表中不存在的数据
删除外键约束:
alter table 从表 drop foreign key 外键名称
功放
表与表的关系:
一对多的建表原则
在多的一方 创建一个字段,字段作为外键 指向 1的一方的主键
alter table produce add foreign key(cno) references category(cid);
多对多的建表原则
需要创建第三张表,中间至少两个字段,中间为从表,两边为主表.
alter table stu_course add foreign key(sno) references stu(sid);
从表 外键 主表 主键
alter table stu_course add foreign key(cno) references stu(cid);
多表查询 (A,B为两表名称) 条件:一般为 A = B
1.交叉连接查询(基本不会使用..因为得到的是两个表的乘积)
语法: select * from A,B;
2.内连接查询 (使用关键字 inner join ---inner可省略)
隐式内连接 : select * from A,B where 条件 ;
显示内连接 : select * from A inner join B on 条件 ;
3.外连接查询 (使用关键字 outer join --outer可以省略)
左外连接 : select * from A left outer join B on 条件 ;
右外连接 : select * from A right outer join B on 条件 ;
内连接和外连接的区别:
子查询 :一条select语句结果作为另一条select语法的一部分
隐式内连接:
select p.* from products p, category c where p.category_id = c.cid and c.cname = '化妆品');
从表 主表 p(从表).外键 = c(主表).主键 c.主表的一属性 = 化妆品
子查询:
select * from products where category_id = (select cid from category where cname = '化妆品');
从表 外键 主键 主表