mysql创建关联表的方法_MySQL多表创建关联及操作
外键
现在有两张表“分类表”和“商品表”,为了表明商品属于哪个 类别,通常情况下,我们将在商品上添加一列,用来存放分类的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多表创建关联及操作相关推荐
- mysql 删除的三种方法_mysql 删除表数据的三种方法
先说那三个:drop.truncate.delete 1.drop 删除所有表结构和数据 drop table tableName: 2.truncate 删除表所有数据,不删除表结构,不能添加whe ...
- mysql 修复表 阿里云_MySql数据表修复方法-阿里云开发者社区
mysqld进程在一个写入当中被杀死.计算机的意外关闭(例如,如果计算机掉电).一个硬件错误这章描述如何检查和处理在MySQL数据库中的数据损坏.如果你的表损坏很多,你应该尝试找出其原因!见G.1 调 ...
- mysql修改表结构例子_mysql修改表结构方法实例详解
本文实例讲述了mysql修改表结构方法.分享给大家供大家参考.具体如下: mysql修改表结构使用ALTER TABLE语句,下面就为您详细介绍mysql修改表结构的语句写法,希望对您学习mysql修 ...
- mysql创建库几种方法_MySQL创建数据库的两种方法
本文为大家分享了两种mysql创建数据库的方法,供大家参考,具体内容如下 第一种方法:使用 mysqladmin 创建数据库使用普通用户,你可能需要特定的权限来创建或者删除 mysql 数据库. 所以 ...
- mysql合并表快速去重_MySQL数据表合并去重的简单实现方法
场景: 爬取的数据生成数据表,结构与另一个主表相同,需要进行合并+去重 解决:(直接举例) 首先创建两个表pep,pep2,其中pep是主表 CREATE TABLE IF NOT EXISTS `p ...
- mysql锁表问题的解决方法_MYSQL锁表问题的解决方法
本文实例讲述了MYSQL锁表问题的解决方法.分享给大家供大家参考,具体如下: 很多时候!一不小心就锁表!这里讲解决锁表终极方法! 案例一 mysql>show processlist; 参看sq ...
- mysql导入表数据方法_mysql数据导入导出方法总结
MySQL数据备份还原方式总结: 一.将数据导入到指定的数据库 第一种导入方式:(linux下和Windows 下语法是一样的,只是路径的书写方式不同而已) 1.创建一个空数据库 2.进入MySQL安 ...
- mysql分表的原则_mysql分表规则(转)
author:skate time:2013/05/14 Mysql分表准则 在大量使用mysql时,数据量大.高访问时,为了提高性能需要分表处理,简介下mysql分表的标准,后续会继续补充 环境: ...
- mysql建表 外键_mysql建表外键怎么设
mysql建表外键怎么设 mysql建表时设置外键的方法:在"CREATE TABLE"语句中,通过"[CONSTRAINT ] FOREIGN KEY 字段名 [,字段 ...
最新文章
- 小白搞懂了GC全过程,全靠阿里专家12张图
- linux下单节点oracle数据库间ogg搭建
- 【计算理论】计算复杂性 ( 计算理论内容概览 | 计算问题的有效性 | 时间复杂性度量 | 输入表示 | 时间复杂度 )
- 今天看到“黑涩会MM”了
- 透过字节码分析java基本类型数组的内存分配方式。
- Dijkstra(单源最短路算法)
- some screenshot of Fiori cloud launchpad
- MATLAB的size、length函数
- Android 数据存储之SharedPreferences存储小记
- 【C】strcpy()需谨慎使用;
- iPhone 6S三大性能实测
- 大容量NoSql解决方案:Aerospike实战
- UIKit 框架之UIControl
- VS Code 轻量级插件推荐
- python open r w r+ w+ a的区别
- Win8下用DOSBox编写汇编语言
- bzoj4771 七彩树
- 图书借阅系统软件测试实验报告,C 大作业--图书管理系统-实验报告.doc
- 模糊PID(自适应模糊PID、fuzzy PID)的基本原理及应用举例 by 研三笔记
- linux子系统下载错误,Win10系统开启linux子系统报错“0x80070057”怎么办?