外键:使两张表之间存在关联

特点:

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

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

示例:

创建两个表并准备数据:

USE mybase;
CREATE TABLE category(
cid VARCHAR(32) PRIMARY KEY,
cname VARCHAR(100)
);
CREATE TABLE product(
pid VARCHAR(32) PRIMARY KEY,
pname VARCHAR(40),
price DOUBLE,
category_id VARCHAR(32)
);
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','联想','','c001');
INSERT INTO product(pid,pname,price,category_id) VALUES('p002','海尔','','c001');
INSERT INTO product(pid,pname,price,category_id) VALUES('p003','雷神','','c001'); INSERT INTO product(pid,pname,price,category_id) VALUES('p004','JACK JONES','','c002');
INSERT INTO product(pid,pname,price,category_id) VALUES('p005','真维斯','','c002');
INSERT INTO product(pid,pname,price,category_id) VALUES('p006','花花公子','','c002');
INSERT INTO product(pid,pname,price,category_id) VALUES('p007','劲霸','','c002'); INSERT INTO product(pid,pname,price,category_id) VALUES('p008','香奈儿','','c003');
INSERT INTO product(pid,pname,price,category_id) VALUES('p009','相宜本草','','c003');

执行这段代码没有问题:

DELETE FROM category WHERE cid='c003';

添加外键关系:

ALTER TABLE product ADD FOREIGN KEY(category_id) REFERENCES category(cid);

这时候两个表中的数据就存在外键关系

执行这段代码就会出错:

DELETE FROM category WHERE cid='c003';

如果想成功,需要先删除和它有关的product表中的两条数据

如果从表添加数据,不能添加主表中不存在的记录,例如添加category_id为c004的数据

表与表之间的关系:

一对多:

实例:客户和订单,分类和商品

一个分类对应多个商品,一个商品只能属于某个分类

上边这个实例,就是一个一对多案例

多对多:

实例:学生选课

多名学生,选择多门课程,学生随意选择

需要注意多对多的建表方法:

创建第三张表作为中间表,至少两个字段

这两个字段分别作为外键指向各自一方的主键:

具体代码:

CREATE TABLE 从表(
字段1,
字段2,
...
)
ALTER TABLE 从表 ADD FOREIGN KEY(字段1) REFERENCES 主表1(主键);
ALTER TABLE 从表 ADD FOREIGN KEY(字段2) REFERENCES 主表2(主键);

一对一:

实例:公司的地址

一个公司对应一个地址,一对一

实际开发中不使用,通常写在一张表中即可

多表查询:

使用上边创建的两张表以及数据:

两张表的全集
SELECT * FROM category,product; 内连接查询
SELECT * FROM category INNER JOIN product ON cid=category_id; SELECT * FROM category c,product p WHERE c.cid=p.category_id; 外连接查询
SELECT * FROM category LEFT JOIN product ON cid=category_id; SELECT * FROM category RIGHT JOIN product ON cid=category_id; 子查询 SELECT cid FROM category WHERE cname='化妆品'; SELECT * FROM product WHERE category_id=(SELECT cid FROM category WHERE cname='化妆品');

MySQL学习笔记2(多表操作)的更多相关文章

  1. MySQL学习笔记十三:表分区

    1.分区一般用于非常大的表,采用“分而治之”的策略,将一个很大的对象分成多个小对象进行管理,每个分区都是一个独立的对象. 分区使用分区键将数据根据范围值,特定列值或HASH值等规则分布在不同的分区中. ...

  2. mysql学习笔记--数据库单表查询

    一.查询语句 1.  select [选项] 列名 [from 表名]  [where 条件]  [order by 排序]  [group by 分组]  [having 条件]  [limit 限 ...

  3. MySQL学习笔记8——多表查询

    多表查询 多表查询 *合并结果集 *连接查询 *子查询 合并结果集 *要求被合并的表中,列的类型和列数相同(实际上是查询的结果集列类型和列数相同即可) *UNION,去除重复行 *UNION ALL, ...

  4. mysql学习笔记--数据库多表查询

    一.内连接[inner join] 1. 语法一:select 列名 from 表1 inner join 表2 on 表1.公共字段=表2.公共字段 2. 语法二:select 列名 from 表1 ...

  5. Hibernate学习笔记--------1.单表操作

    一.hibernate基本开发步骤 1.引入包,官网下载的包,目录\lib\required下的jar都加进去,这里使用的是 hibernate-release-5.2.1.Final 2.编写配置文 ...

  6. Mysql学习笔记(三)对表数据的增删改查。

    正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...

  7. MySQL学习笔记一

    MySQL 学习笔记 一 一.数据库简单介绍 1. 按照数据库的发展时间顺序,主要出现了以下类型数据库系统: Ø 网状型数据库 Ø 层次型数据库 Ø 关系型数据库 Ø 面向对象数据库 上面4中数据库系 ...

  8. Mysql学习笔记(二)数据类型 补充

    原文:Mysql学习笔记(二)数据类型 补充 PS:简单的补充一下数据类型里的String类型以及列类型... 学习内容: 1.String类型 2.列类型存储需求 String类型: i.char与 ...

  9. Mysql学习笔记(一)数据类型

    原文:Mysql学习笔记(一)数据类型 学习内容: Mysql基本数据类型. 1.数字类型.. i.整型     Mysql数据类型             含义(有符号)     tinyint(m ...

  10. 初识mysql学习笔记

    使用VMVirtualBox导入Ubuntu后,可以通过sudo apt-get install mysql-server命令下载mysql. 在学习过程中,我遇到了连接不上Xshell的问题.最终在 ...

随机推荐

  1. LAMP架构

    LAMP(linux,apache,mysql,php)是linux系统下常用的网站架构模型,用来运行PHP网站.(这得apache是httpd服务),这些服务可以安装同意主机上,也可以安装不同主机上 ...

  2. HttpRunnerManager安装部署

    uname -a cat /etc/redhat-release 1.安装docker.mysql.rabbitmq sudo yum update curl -fsSL https://get.do ...

  3. Codeforces Round #438 A. Bark to Unlock

    题意:给你一个原串和n个子串,问你这n个子串任意组合起来能不能使原串出现,串的长度为2. Examples Input ya4ahoytoha Output YES Input hp2http Out ...

  4. 云笔记项目-Java反射知识学习

    在云笔记项目中,补充了部分反射的知识,反射这一部分基础知识非常重要,前面学习的框架Spring和MyBatis读取xml配置文件创建对象,以及JDBC加载驱动等都用了反射,但只知道有这个东西,具体不知 ...

  5. 大数据入门到精通6---spark rdd reduce by key 的使用方法

    1.前期数据准备(同之前的章节) val collegesRdd= sc.textFile("/user/hdfs/CollegeNavigator.csv")val header ...

  6. vue js库的条件渲染

    条件渲染 通过条件指令可以控制元素的创建(显示)或者销毁(隐藏),常用的条件指令如下: v-if v-if可以控制元素的创建或者销毁 <h1 v-if="ok">Yes ...

  7. js判断是手机端还是pc端访问

    if(/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)) { window.location.href = " ...

  8. mysql 递归查找菜单节点的所有子节点

    背景                                                                                                   ...

  9. Linux驱动之异步通知的应用

    前面的按键驱动方式都是应用程序通过主动查询的方式获得按键值的: 1.查询方式 2.中断方式 3.poll机制 下面介绍第四种按键驱动的方式 4.异步通知:它可以做到应用程序不用随时去查询按键的状态,而 ...

  10. Delphi 域名解析为IP地址

    花生壳:1.LJSZForm-Lable1-Caption改成 “IP地址或域名:”2.LJSZForm-BitBtn1Click-注释掉--else if IsIP(Trim(IPEdit.Text ...