外键

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

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

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

外键特点

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

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

声明外键约束

语法:

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

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

alter table 从表 drop foreign key 外键名称

实际操作

创建数据库

创建分类表

1.分类表

create table category(

cid varchar(32) primary key,

cname varchar(100)

);

创建商品表

2.商品表

create table product(

pid varchar(32) primary key,

pname varchar(40),

pricedouble,

category_id varchar(32)

);

设置编码格式

set name gbk;

添加点数据

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');

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

alter table product add category_id

链接两张表

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

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

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

使用外键的目的

保证数据的完整性。

注意事项

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

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

表与表之间的关系

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

一对多的关系

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

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

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

多对多的关系

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

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

建立关系

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

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

一对一关系(了解)

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

两种建表原则:

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

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

多对多连接

实现如下表结构:

创建订单表

create table orders(

oid varchar(32) primary key,

totalpricedouble);

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

create table orderitem(

oid varchar(50),

pid varchar(50)

);

关联两张表

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

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

多表查询操作

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

select * from A,B

select * from category,product;

内容是乱的!第一张表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;

显式内连接

select * from A inner join B on 条件

select * from category inner join product on cid=category_id;

select * from category join product on cid=category_id;

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;

右外连接 right outer join

select * from A right outer join B on 条件;

select * from category right join product on cid=category_id;

左右连接的区别:

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

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

子查询

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

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

查询化妆品分类

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

利用子查询实现需求

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

mysql创建关联表的方法_MySQL多表创建关联及操作相关推荐

  1. mysql 删除的三种方法_mysql 删除表数据的三种方法

    先说那三个:drop.truncate.delete 1.drop 删除所有表结构和数据 drop table tableName: 2.truncate 删除表所有数据,不删除表结构,不能添加whe ...

  2. mysql 修复表 阿里云_MySql数据表修复方法-阿里云开发者社区

    mysqld进程在一个写入当中被杀死.计算机的意外关闭(例如,如果计算机掉电).一个硬件错误这章描述如何检查和处理在MySQL数据库中的数据损坏.如果你的表损坏很多,你应该尝试找出其原因!见G.1 调 ...

  3. mysql修改表结构例子_mysql修改表结构方法实例详解

    本文实例讲述了mysql修改表结构方法.分享给大家供大家参考.具体如下: mysql修改表结构使用ALTER TABLE语句,下面就为您详细介绍mysql修改表结构的语句写法,希望对您学习mysql修 ...

  4. mysql创建库几种方法_MySQL创建数据库的两种方法

    本文为大家分享了两种mysql创建数据库的方法,供大家参考,具体内容如下 第一种方法:使用 mysqladmin 创建数据库使用普通用户,你可能需要特定的权限来创建或者删除 mysql 数据库. 所以 ...

  5. mysql合并表快速去重_MySQL数据表合并去重的简单实现方法

    场景: 爬取的数据生成数据表,结构与另一个主表相同,需要进行合并+去重 解决:(直接举例) 首先创建两个表pep,pep2,其中pep是主表 CREATE TABLE IF NOT EXISTS `p ...

  6. mysql锁表问题的解决方法_MYSQL锁表问题的解决方法

    本文实例讲述了MYSQL锁表问题的解决方法.分享给大家供大家参考,具体如下: 很多时候!一不小心就锁表!这里讲解决锁表终极方法! 案例一 mysql>show processlist; 参看sq ...

  7. mysql导入表数据方法_mysql数据导入导出方法总结

    MySQL数据备份还原方式总结: 一.将数据导入到指定的数据库 第一种导入方式:(linux下和Windows 下语法是一样的,只是路径的书写方式不同而已) 1.创建一个空数据库 2.进入MySQL安 ...

  8. mysql分表的原则_mysql分表规则(转)

    author:skate time:2013/05/14 Mysql分表准则 在大量使用mysql时,数据量大.高访问时,为了提高性能需要分表处理,简介下mysql分表的标准,后续会继续补充 环境: ...

  9. mysql建表 外键_mysql建表外键怎么设

    mysql建表外键怎么设 mysql建表时设置外键的方法:在"CREATE TABLE"语句中,通过"[CONSTRAINT ] FOREIGN KEY 字段名 [,字段 ...

最新文章

  1. 小白搞懂了GC全过程,全靠阿里专家12张图
  2. linux下单节点oracle数据库间ogg搭建
  3. 【计算理论】计算复杂性 ( 计算理论内容概览 | 计算问题的有效性 | 时间复杂性度量 | 输入表示 | 时间复杂度 )
  4. 今天看到“黑涩会MM”了
  5. 透过字节码分析java基本类型数组的内存分配方式。
  6. Dijkstra(单源最短路算法)
  7. some screenshot of Fiori cloud launchpad
  8. MATLAB的size、length函数
  9. Android 数据存储之SharedPreferences存储小记
  10. 【C】strcpy()需谨慎使用;
  11. iPhone 6S三大性能实测
  12. 大容量NoSql解决方案:Aerospike实战
  13. UIKit 框架之UIControl
  14. VS Code 轻量级插件推荐
  15. python open r w r+ w+ a的区别
  16. Win8下用DOSBox编写汇编语言
  17. bzoj4771 七彩树
  18. 图书借阅系统软件测试实验报告,C 大作业--图书管理系统-实验报告.doc
  19. 模糊PID(自适应模糊PID、fuzzy PID)的基本原理及应用举例 by 研三笔记
  20. linux子系统下载错误,Win10系统开启linux子系统报错“0x80070057”怎么办?

热门文章

  1. docker安装各类软件以及创建私有仓库总结
  2. 如何星标「芋道源码」
  3. 交换机光口识别与连接问题
  4. 广电家庭服务器维修电话,广电家庭服务器换路由器怎么设置
  5. photoshop制作法线和凹凸贴图
  6. 二、STK三维场景数据及导入方法
  7. 关于碰到树莓派Zero 2W的HDMI不显示问题
  8. c语言杨辉三角形7行7liu,7. C语言杨辉三角(两种方法)
  9. 昆特牌决斗计算小工具
  10. 【众智】【AICPU算子】ST报错 RunTimeError