MySQL学习笔记2(多表操作)
外键:使两张表之间存在关联
特点:
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(多表操作)的更多相关文章
- MySQL学习笔记十三:表分区
1.分区一般用于非常大的表,采用“分而治之”的策略,将一个很大的对象分成多个小对象进行管理,每个分区都是一个独立的对象. 分区使用分区键将数据根据范围值,特定列值或HASH值等规则分布在不同的分区中. ...
- mysql学习笔记--数据库单表查询
一.查询语句 1. select [选项] 列名 [from 表名] [where 条件] [order by 排序] [group by 分组] [having 条件] [limit 限 ...
- MySQL学习笔记8——多表查询
多表查询 多表查询 *合并结果集 *连接查询 *子查询 合并结果集 *要求被合并的表中,列的类型和列数相同(实际上是查询的结果集列类型和列数相同即可) *UNION,去除重复行 *UNION ALL, ...
- mysql学习笔记--数据库多表查询
一.内连接[inner join] 1. 语法一:select 列名 from 表1 inner join 表2 on 表1.公共字段=表2.公共字段 2. 语法二:select 列名 from 表1 ...
- Hibernate学习笔记--------1.单表操作
一.hibernate基本开发步骤 1.引入包,官网下载的包,目录\lib\required下的jar都加进去,这里使用的是 hibernate-release-5.2.1.Final 2.编写配置文 ...
- Mysql学习笔记(三)对表数据的增删改查。
正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...
- MySQL学习笔记一
MySQL 学习笔记 一 一.数据库简单介绍 1. 按照数据库的发展时间顺序,主要出现了以下类型数据库系统: Ø 网状型数据库 Ø 层次型数据库 Ø 关系型数据库 Ø 面向对象数据库 上面4中数据库系 ...
- Mysql学习笔记(二)数据类型 补充
原文:Mysql学习笔记(二)数据类型 补充 PS:简单的补充一下数据类型里的String类型以及列类型... 学习内容: 1.String类型 2.列类型存储需求 String类型: i.char与 ...
- Mysql学习笔记(一)数据类型
原文:Mysql学习笔记(一)数据类型 学习内容: Mysql基本数据类型. 1.数字类型.. i.整型 Mysql数据类型 含义(有符号) tinyint(m ...
- 初识mysql学习笔记
使用VMVirtualBox导入Ubuntu后,可以通过sudo apt-get install mysql-server命令下载mysql. 在学习过程中,我遇到了连接不上Xshell的问题.最终在 ...
随机推荐
- Unity与安卓IOS交互
记录下 安卓与Unity交互中 跳坑 找到的资料. <1>建立交互 http://blog.csdn.net/lizhengwei1989/article/details/54631 ...
- jQuery之必会增删改查Dom操作
.next .prev <button>change</button> <span class = '.demo'>aaa</span> <p ...
- JS 高级总结
一.查找HTML元素 通常,通过 JavaScript,您需要操作 HTML 元素. 1.通过 id 找到 HTML 元素 2.通过标签名找到 HTML 元素 3.通过类名找到 HTML 元素 提示: ...
- mysql_day01
1.MySQL概述 1.什么是数据库 数据库是一个存储数据的仓库 2.都有哪些公司在用数据库 金融机构.游戏网站.购物网站.论坛网站 ... ... 3.提供数据库服务的软件 1.软件分类 MySQL ...
- "Web Scraping with Python"笔记(一)
1. 合法性:抓取的数据用于个人使用,不存在问题:数据用于转载,需注意抓取的数据类型. 一般情况,抓取的真实数据(营业地址,电话清单等)允许转载.而原创数据(比如意见和评论)受版权限制不能转载. 2 ...
- svn 清理失败的解决方法
首先 下载 SQLiteSpy 工具, 解压后如下图所示, 打开 .exe 应用程序,File ,opendatabase 选中wc.db 然后执行 delete from work_qu ...
- Python - 最大公约数算法
# Python 3.6 # 最大公约数,最大公因子 # Greatest Common Divisor # 辗转相除法 def gcd(num1: object, num2: object) -&g ...
- SpringMVC中的Interceptor拦截器及与Filter区别
SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...
- Java 7 使用TWR(Try-with-resources)完成文件copy
try-with-resources语句是声明了一个或多个资源的try语句块.在java中资源作为一个对象,在程序完成后必须关闭.try-with-resources语句确保每个资源在语句结束时关闭. ...
- 基于UML的中职班主任工作管理系统的分析与设计--文献随笔(二)
一.基本信息 标题:基于UML的中职班主任工作管理系统的分析与设计 时间:2016 出版源:遵义航天工业学校 关键字:中职学校; 班主任工作管理; UML建模 二.研究背景 问题定义:班主任是一项特殊 ...