MySQL多表创建关联及操作

MySQL多表创建关联及操作外键 现在有两张表 分类表 和 商品表 为了表明商品属于哪个类别 通常情况下 我们将在商品上添加一列 用来存放分类的 cid 信息 此列成为外键

大家好,欢迎来到IT知识分享网。

 外键

  MySQL多表创建关联及操作

  现在有两张表“分类表”和“商品表”,为了表明商品属于哪个 类别,通常情况下,我们将在商品上添加一列,用来存放分类的cid信息,此列成为外键

   MySQL多表创建关联及操作

  此时,分类表 category 称作主表,cid 成为主键。商品表 products 成为从表,category_id 成为外键。

  通过主表和从表的外键描述主外键的关系,呈现的就是一对多的关系。

外键特点

  1. 从表外键的值是对主键的引用。

  2. 从表外键类型必须与主表主键类型一致。

声明外键约束

  语法:

alter table 从表 add[constraint] [外键名称] foreign key (从表外键在字段名)references 主表(主表的主键);

[外键名称] 用于删除外键约束的,一般建议 “ _fk ”结尾。

alter table 从表 drop foreign key 外键名称 

实际操作

创建数据库

MySQL多表创建关联及操作

创建分类表

1.分类表 
create table category( cid varchar(32) primary key, cname varchar(100) );

MySQL多表创建关联及操作

创建商品表

2.商品表 
create table product( pid varchar(32) primary key, pname varchar(40), price double, category_id varchar(32) );

 MySQL多表创建关联及操作

设置编码格式

set name gbk;

 MySQL多表创建关联及操作

添加点数据

insert into category(cid,cname) values('c001','家电'); insert into category(cid,cname) values('c002','服饰'); insert into category(cid,cname) values('c003','化妆品'); insert into product(pid,pname,price,category_id) values('p001','联想','5000','c001'); insert into product(pid,pname,price,category_id) values('p002','海尔','5000','c001'); insert into product(pid,pname,price,category_id) values('p003','雷神','5000','c001'); insert into product(pid,pname,price,category_id) values('p004','JACK JONES','800','c002'); insert into product(pid,pname,price,category_id) values('p005','真维斯','200','c002'); insert into product(pid,pname,price,category_id) values('p006','花花公子','440','c002'); insert into product(pid,pname,price,category_id) values('p007','劲霸','2000','c002'); insert into product(pid,pname,price,category_id) values('p008','香奈儿','800','c003'); insert into product(pid,pname,price,category_id) values('p009','相宜本草','200','c003');

 MySQL多表创建关联及操作

最后一列 category_id 列在创建表的时候自己定义的,如果没有,则可以使用一下命令添加一列。

alter table product add category_id

链接两张表

alter table product add foreign key(category_id) references category(cid);

MySQL多表创建关联及操作

两张表已经关联,主表有外键约束。不能轻易删除主表数据,因为从表有他的记录。

要想解除关系,先删除从表对他有关系的数据删除,再删除主表数据。

使用外键的目的

  保证数据的完整性。

 注意事项

  从表外键不能添加主表中不存在的记录。

  主表不能删除从表中已经引用的记录。

 表与表之间的关系

  表语表之间的关系,说的就是表与表数据之间的关系。

一对多的关系

  常见的实例:客户和订单,分类和商品,部门和员工。

  一对多建表原则:在从表(多方)创建一个字段,字段作为外键指向主表的主键。

alter table 从表 add [constraint][外键名称] foreign key(从表外键在字段名) references 主表(主表的主键);

MySQL多表创建关联及操作

多对多的关系

  常见的实例:学生和课程,商品和订单,演员和角色。

  多对多关系建立表原则:需要创建第三张表,中间表中至少两个字段,这两个字段分别作为外键指向各自一方的主键。

  MySQL多表创建关联及操作

MySQL多表创建关联及操作

建立关系

alter table stu_course add foreign key(sno) references stu(sid); alter table stu_course add foreign key(sno) references course(cid);

 一对一关系(了解)

  在实际开发中应用不多,因为一对一可以创建成一张表。

  两种建表原则:

    外键唯一:主表的主键和从简的外键唯一,形成主外键关系,外键唯一 unique。

    外键是主键:主表的主键和从表的主键,形成主外键关系。

   MySQL多表创建关联及操作

多对多连接

实现如下表结构:

  MySQL多表创建关联及操作

 创建订单表

create table orders( oid varchar(32) primary key, totalprice double );

   MySQL多表创建关联及操作

创建经单项的表(中间表)

create table orderitem( oid varchar(50), pid varchar(50) );

   MySQL多表创建关联及操作

关联两张表

alter table orderitem add constraint orderitem_fk foreign key(oid) references orders(oid);

MySQL多表创建关联及操作

alter table orderitem add constraint orderitem1_fk foreign key(pid) references product(pid);

MySQL多表创建关联及操作

多表查询操作

 1. 交叉连接查询(基本不会用到 – 得到的是两个表的乘积)

select * from A,B select * from category,product;

 MySQL多表创建关联及操作

  内容是乱的!第一张表3条数据,第二张表9条数据,一共 3*9 = 27 条数据。

2. 内连接查询(使用关键字 inner join   — inner可以省略)

 隐式内连接

select * from A,B where 条件 select * from category c,product p where c.cid = p.category_id;

MySQL多表创建关联及操作

显式内连接

select * from A inner join B on 条件 select * from category inner join product on cid=category_id;

MySQL多表创建关联及操作

 select * from category join product on cid=category_id;

 

MySQL多表创建关联及操作

3. 外连接查询(使用关键字 outer join   –outer可以省略) 

 左外连接:left outer join

select * from A left outer join B on 条件 select * from category left join product on cid=category_id;

MySQL多表创建关联及操作

右外连接 right outer join 

select * from A right outer join B on 条件; select * from category right join product on cid=category_id; 

MySQL多表创建关联及操作

左右连接的区别:

  左连接:左边的数据全部查出来。category数据全部出来。

  右连接:右边的数据全部查出来。product数据全部出来。

  MySQL多表创建关联及操作

子查询

 将一条 select 语句查询的结果作为另一条 select 语法的一部分(查询条件,查询结果,表等)。

 例如:查询化妆品分类中上架商品详情。

  MySQL多表创建关联及操作

查询化妆品分类

select cid from category where cname='化妆品';

 MySQL多表创建关联及操作

利用子查询实现需求

select * from product where category_id=(select cid from category where cname="化妆品");

MySQL多表创建关联及操作

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/125169.html

(0)
上一篇 2025-09-29 20:00
下一篇 2025-09-29 20:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信